mes codes php modifier et supprimer ne marchent pas

Sujet vérouillé
imani
le 16/07/2013 à 11:28
imani
Bonjour,

Je suis entrain de faire un projet en php mais je suis bloqué sur les codes "supprimer' et "modifier".
Donc, je ne parviens pas à supprimer et modifier les données dans mes formulaires. Et ça fait déjà une durée considérable que ça me pose toujours de problèmes.
(J'utilise MySql comme bdd (PHPMyAdmin) et WAMPServer comme serveur).

Ceci est un exemple de ma table Client.
Voici premièrement mon code php pour la modification :

<?php
require_once("connectionMYSQL.inc.php");

//----------------------------- requête pour la modification
if(isset($_POST['bouton4'])){
$requete = "UPDATE client SET nom = '".$_POST['nom']."',prenom = '".$_POST['prenom']."',etatcivil = '".$_POST['etatcivil']."',nationalite= '".$_POST['nationalite']."',adresse = '".$_POST['adresse']."',telephone = '".$_POST['telephone']."',occupation = '".$_POST['occupation']."',sexe = '".$_POST['sexe']."' WHERE IdClient ='".$_POST['IdClient']."' ";
$resultat = mysql_query($requete);
}
//---------------------requête de recherche

$requete2 = "SELECT * FROM client WHERE IdClient='".$_POST['IdClient']."'";
$resultat2 = mysql_query($requete2);
$produit = mysql_fetch_array($resultat2);

?>


Et mon formulaire est le suivant :




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Modification des clients</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href= "style.css" type = "text/css" rel = "stylesheet"/>
</head>
<body>
<form align= "center" id="monform" name = "form1" method = "post" action="updateClient.php" >

<table>
<tr>
<td>IdClient:</td>
<td><input type="hidden" name="IdClient" value="<?php echo $client['IdClient']; ?>"></td>
</tr>

<tr>
<td>Nom:</td>
<td><input type="text" name="nom" value="<?php echo $client['nom']; ?>"></td>
</tr>
<tr>
<td>Prenom:</td>
<td><input type="text" name="prenom" value="<?php echo $client['prenom']; ?>"></td>
</tr>
<tr>
<td>Etat Civil:</td>
<td><input type="text" name="etatcivil" value="<?php echo $client['etatcivil']; ?>"></td>
</tr>
<tr>
<td>Nationalite:</td>
<td><input type="text" name="nationalite" value="<?php echo $client['nationalite']; ?>"></td>
</tr>
<tr>
<td>Adresse:</td>
<td><input type="text" name="adresse" value="<?php echo $client['adresse']; ?>"></td>
</tr>
<tr>
<td>Telephone:</td>
<td><input type="text" name="telephone" value="<?php echo $client['telephone']; ?>"></td>
</tr>
<tr>
<td>Occupation:</td>
<td><input type="text" name="occupation" value="<?php echo $client['occupation']; ?>"></td>
</tr>
<tr>
<td>Sexe:</td>
<td><input type="text" name="sexe" value="<?php echo $client['sexe']; ?>"></td>
</tr>
<tr>
<td><input type="submit" name="bouton4" value="Modifier"></td>
</tr>
</table>
</form>
<?php include("footer.php")?>
</body>
</html>




Aurai-je glissé une erreur quelque part ?
P.S : je suis encore débutant en PHP.

Je vous en prie aidez-moi.
Merci d'avance pour votre aide.
j'accepte
LupusMic
le 16/07/2013 à 23:45
LupusMic
N'oublie pas d'utiliser le bbcode pour rendre ton code plus lisible.

Que veut dire « ça ne marche pas » ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
imani
le 17/07/2013 à 08:20
imani
Bonjour,
Bah, Par "ça ne marchent pas", je vais signifier que les codes ne donnent ne donnent aucun résultat !Autrement dit, quand je veux modifier une donnée via un formulaire, ce dernier apparait complètement vide (donc sans aucune donnée dessus)et là vous comprenez que faire la modification est impossible car le formulaire est vide.

Ben, je ne sais pas si, cette fois-ci, vous saisissez bien mon souci.

Et le bbcode, c'est quoi au fait ? C'est un utilitaire pour écrire les codes ?


Merci encore une fois. Je compte à votre aide. Bonne journée.
j'accepte
LupusMic
le 17/07/2013 à 12:26
LupusMic
Pour le BBCode, je te laisse relire les conditions d'utilisation du forum où s'y est indiqué.

En ce qui concerne ton problème, ça peut venir de beaucoup de choses. Il faut que tu vérifie. Mais en première lecture, ton formulaire est vide certainement parce que ta requête SQL ne renvoie rien. Mon petit doigt me dit que c'est parce que tu essaye de consulter des données HTTP POST alors que tu visualise ton formulaire en HTTP GET.

Si tu ne sais pas ce que sont HTTP GEt et HTTP POST, tu devrais lire un document qui explique ce qu'est une requête HTTP (demande à Google pour voir, si tu ne trouver pas de ressource abordable, on t'aidera).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
imani
le 17/07/2013 à 15:20
imani
Rebonjour,

Ouf, je viens de consulter pas mal des documents concernant les données HTTP GEt et HTTP POST google qui tentent au moins de donner une explication à mon problème (d'après votre avis) mais malheureusement, je n'arrive pas toujours à comprendre.

"Visualiser un code en HTTP GET", c'est ce que je ne comprends pas surtout bien ! Mais bien sur d'après ce que je viens de lire sur google, on souligne bien d'utiliser _POST pour les accès en écriture comme les ajouts, les modifications et les suppressions.Et en plus,le résultat d’une requête POST n’est pas mis en cache par le navigateur (inutile puisqu’elle n’est pas « idempotent »).

Et franchement, si ça ne va pas vous déranger, vous pouvez me donner une solution si vous l'envisagez. Contrairement, je peux déjà vous remercier pour votre générosité et votre bon vouloir de m'aider !

Suis-je trop loin de la solution ?!? Je viens de passer successivement trois nuits blanches à causes de ces deux codes !!

Bon après midi.
j'accepte
LupusMic
le 17/07/2013 à 19:40
LupusMic
Je vais faire un résumé, ça devrait au moins te débloquer pour ce coup ci.

PHP supporte nativement deux méthodes HTTP : GET et POST. Les autres, c'est un peu plus velu et mal supporté, mais ce n'est pas très utile pour toi pour l'instant.

HTTP GET signifie que tu veux accéder une ressource.
HTTP POST signifie que tu soumets une ressource.

Une ressource est désignée par une URL. Il y a plusieurs compréhension de ce qu'est une ressource, et de nombreuses chapelles de ce que doit, est ou devrait être une ressource.

Dans ton cas, tu nous montre que ton formulaire est destiné à modifier la ressource updateClient.php
Par contre, je ne sais pas comment s'appelle le fichier qui contient le formulaire : est-ce le même nom de fichier ?

Dans tous les cas, la consultation de ton formulaire est une HTTP GET. Parce que tu demande à consulter la ressource en l'affichant de manière à pouvoir proposer une modification. Il faut donc bien comprendre que, au moment où tu affiche (au moins la première fois) ton formulaire, tu es en HTTP GET.

Les tableaux $_POST et $_GET sont des tableaux fournissant un accès simple à la plupart des paramètres HTTP fournits par le client (ton navigateur web, typiquement).

Dans le cas d'une HTTP GET, $_POST est toujours vide. $_GET contient les paramètres passés dans la search part de ton URI. C'est ce qui se situe après le point d'intérrogation dans ton URL.
Typiquement : updateClient.php?IdClient=1234

Dans le cas qui nous concerne, la requête SQL ne retournera rien, plusque la requête SQL créée sera
SELECT * FROM client WHERE IdClient=''


En général, pour comprendre pourquoi une requête ne retourne rien, tu l'affiche (avec var_dump par exemple), tu vérifie auprès de ton serveur que la requête à bien été exécutée (il faut activer le service de log de MySQL pour celà), et tu essaye la requête dans MySQL si jamais tu ne comprends pas pourquoi elle ne marche pas.

Bref, ça devrait déjà te débloquer un peu.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
imani
le 18/07/2013 à 15:40
imani
Bonjour LupusMic,

Le formulaire se trouve dans un autre fichier html nommé <client.html>, qui me permet d'envoyer (insérer) les données dans ma base. A ce niveau l'envoi se passe correctement !

Merci pour ce résume qui me semble explicite.
Mais, Var_dump, est-elle une commande que dois-je taper dans mysql et aussi comment activer Log MySql. Je ne trouve pas une documentation qui me l'explique clairement sur google l'activer !

Par ailleurs, comme mon problème, si je le comprends bien,c'est HTTP GET et HTTP POST, il y a-t-il pas une manœuvre à faire pour que mes requetes soient HTTP POST au lieu de GET. (Ou je suis entrain de parler les bêtises, excusez-moi si c'est bien le cas !).

Où, il y a-t-il pas un lien que tu peux m'envoyer qui montre facilement comment activer log de mysql ?

Mais,par votre aide, je crois bien que je ne suis pas loin de la solution.

Merci encore une fois et bonne soirée.
j'accepte
LupusMic
le 18/07/2013 à 17:18
LupusMic
Je ne sais pas utiliser WampServer. Mais d'après la description qui en est faite sur le site, il est possible d'accéder directement aux logs depuis le TrayIcon.

var_dump

C'est bien ce que je craignais, la requête initiale vient d'un autre fichier : c'est important ici, puisque ça veut dire qu'effectivement, ton fichier a un HTTP POST qui lui est fournit.

Regardes ce que ton fichier HTML envoie avec var_dump :
<?php
var_dump($_POST);


Ceci dit, tu parles d'insérer. Or, ton script ne permet que la mise à jour d'une entrée existante (update dans MySQL). Il faut faire un insert dans MySQL d'abord.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
imani
le 19/07/2013 à 14:22
imani
Bonjour,

je viens d'activer tous les tous logs dans mysql pour activer enfin var_dump mais ça ne marche pas. En mettant Var_dump dans le code, ça donne une erreur!

Mais, je viens de modifier un peu mon code après quelques constats observés tout de suite. Et cette fois-ci, en voulant modifier la donnée, cette dernière apparait sur le formulaire, donc c'est résolu déjà. Mais malheureusement le problème qui reste à présent est que malgré l’apparition des données sur le formulaire, ces dernières ne sont pas du tout modifier en voulant les modifier!

Voici le code modifier après la retouche que je vienne d’opérer :

<?php
require_once("connectionMYSQL.inc.php");

$id =$_REQUEST['IdClient'];

//---------------------requete de recherche

$requete= "SELECT * FROM client WHERE IdClient='$id'";
$resultat = mysql_query($requete);
$client = mysql_fetch_array($resultat);

//----------------------------- requete pour la modification
if(isset($_POST['modif'])){
$requete2 = ("UPDATE client SET nom = '".$_POST['nom']."',prenom = '".$_POST['prenom']."',etatcivil = '".$_POST['etatcivil']."',nationalite= '".$_POST['nationalite']."',adresse = '".$_POST['adresse']."',telephone = '".$_POST['telephone']."'
,occupation = '".$_POST['occupation']."',sexe = '".$_POST['sexe']."' WHERE IdClient = $id'") or die (mysql_error());

echo "la modification a reussi avec succes!";
}
mysql_close();

?>



P/S : Le formulaire, c'est toujours le même.


Je pense que je ne suis pas, cette foi-ci loin de la solution.

(je m'excuse car le bbcode,je ne sais pas vraiment encore l'utiliser)

Bonne journée.
j'accepte
LupusMic
le 19/07/2013 à 15:26
LupusMic
Si tu ne peux pas utiliser le bbcode, c'est mal barré. Regarde en-dessous du contrôle de saisie de la réponse, il y a un lien qui ouvre l'aide concernant le bbcode.

Pour en revenir à ton problème, var_dump n'a rien à voir avec MySQL. var_dump est une fonction de PHP qui permet d'inscepter le contenu d'une variable. C'est pour comprendre ce qui se passe.

Dire que ça fait une erreur ne sert à rien. Si tu as une erreur, il faut l'utiliser. Quand tu viens demander de l'aide, fournis là.

N'utilise pas $_REQUEST, cette variable confond trois autres variables, ce qui peut rendre le comportement incompréhensible. Reste sur $_GET et $_POST.

C'est normal que les données ne soient pas modifiées, tu n'appliques pas ta requête d'update via mysql_query. Tu as vu enlever le nom de la fonction par inadvertance ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Sujet vérouillé
LoadingChargement en cours