Nimra Posté 11 Décembre 2013 Partager Posté 11 Décembre 2013 Bonjour, je me trouve face à un problème depuis le début de la journée et je ne sais pas comment y remédier. J'ai un formulaire dont je dois récupérer les données pour les stocker dans un base de données puis les afficher dans une page admin où l'administrateur pourra gérer ses clients. J'ai essayé en simplifiant au maximum le formulaire pour voir où était l'erreur... ça marche, mais dès que je repasse sur le code de sépart, rien ne se passe. Je ne comprends plus et j'ai la tête comme une cocotte à force d'écumer les forums qui ne répondent pas réellement à mon problème. (j'ai volontairement mis les selecteurs à choix unique en commentaire, d'abord parce que je ne sais pas les traiter, et surtout parce que je voulais tenter sans trop de données à inserer). Et désolée le code n'est pas indenté. Quelqu'un pour me secourir ??? S'il vous plait... voila le code de la page 1 : form_commande.php <?phprequire_once('inc/connexion.php');//--------------------------------------------------$action=isset($_REQUEST['action'])?$_REQUEST['action']:'';$id_commande=isset($_REQUEST['id_commande'])?$_REQUEST['id_commande']:0;$PcNom=isset($_REQUEST['PcNom'])?$_REQUEST['PcNom']:'';$PcPrenom=isset($_REQUEST['PcPrenom'])?$_REQUEST['PcPrenom']:'';$PcTel=isset($_REQUEST['PcTel'])?$_REQUEST['PcTel']:'';$PcMail=isset($_REQUEST['PcMail'])?$_REQUEST['PcMail']:'';$couleur=isset($_REQUEST['couleur'])?$_REQUEST['couleur']:'';$type=isset($_REQUEST['type'])?$_REQUEST['type']:'';$sonorite=isset($_REQUEST['sonorite'])?$_REQUEST['sonorite']:'';$marque=isset($_REQUEST['marque'])?$_REQUEST['marque']:'';//--------------------------------------------------if($action=="valider"){ // Update if($id_commande){ $req="UPDATE ana_commande SET PcNom='{$PcNom}', PcPrenom={'$PcPrenom}', PcTel={$PcTel}, PcMail='{$PcMail}' WHERE id_commande={$id_commande}"; mysqli_query($connex,$req); } // Insert else{ $req="INSERT INTO ana_commande VALUES(NULL,'{$PcNom}',{$PcPrenom}, {$PcTel}, '{$PcMail}')"; mysqli_query($connex,$req); } // Redirection header("Location:commandeP.php"); exit;}//--------------------------------------------------?><!doctype html><html><head><meta charset="utf-8"><title>Commande de piano d'exception</title><link href="css/formu_style.css" rel="stylesheet" type="text/css"></head><body><form id="commandeP" method="post" action="commandeP.php?action=valider" enctype="multipart/form-data"> <fieldset><legend id="legend2">Bon de commande : Votre piano d'exception</legend><input type="hidden" name="id_commande" value="<?php echo $id_commande ?>"><div class="myName"><label>Votre nom</label><input type="text" name="PcNom" class="textfield" value="<?php echo $PcNom ?>" required/></div><div class="myFirstname"><label>Votre prénom</label><input type="text" name="PcPrenom" class="textfield" value="<?php echo $PcPrenom ?>" required/></div><div class="myEmail"><label>Votre E-mail</label><p class="hint">Rentrez une adresse e-mail valide</p><input type="email" name="PcMail" class="textfield" value="<?php echo $PcMail ?>" /></div><!--<div class="Couleur"><label>Couleur</label><select class="dropdown" name="couleur" ><option value="">Choisissez une couleur</option><option value="Noir">Noir</option><option value="Blanc">Blanc</option><option value ="Marron">Marron</option></select></div><div class="type"><label>Type de piano</label><select class="dropdown" name="type" ><option value="">Choisissez le type de piano</option><option value="Quart de queue">Quart de queue</option><option value="Demi queue">Demi queue</option><option value ="Queue">Queue</option></select></div><div class="type"><label>Sonorité et timbre</label><select class="dropdown" name="sonorite"><option value="">Choisissez une Sonorité</option><option value="Grave">Grave</option><option value="Médium">Médium</option><option value ="Métallique">Métallique</option></select></div><div class="type"><label>Marque</label><select class="dropdown" name="marque" ><option value="">Choisissez la marque</option><option value="Bechstein">Bechstein</option><option value="Bösendorfer">Bösendorfer</option><option value="Petrof">Petrof</option><option value="Pleyel">Pleyel</option><option value="Steinway">Steinway</option><option value="Yamaha">Yamaha</option></select></div><!--<div class="myFirstname"><label>Date de fabrication</label><input type="date" max="2013-01-01" min="1700-01-01" name="date" required></div><div class="myComments"><label>Votre message</label><p class="hint">Soyez le plus clair possible pour que nous puissions répondre à votre demande</p><textarea cols="60" rows="10" class="textarea"></textarea></div>--><div class="sendTip"><input type="submit" name="valider" value="Valider" class="btn" /></div></fieldset></form></body></html> Voila la deuxième page : commandeP.php <?phprequire_once('inc/connexion.php');//--------------------------------------------------$action=isset($_REQUEST['action'])?$_REQUEST['action']:'';$id_commande=isset($_REQUEST['id_commande'])?$_REQUEST['id_commande']:0;$PcNom=isset($_REQUEST['PcNom'])?$_REQUEST['PcNom']:'';$PcPrenom=isset($_REQUEST['PcPrenom'])?$_REQUEST['PcPrenom']:'';$PcTel=isset($_REQUEST['PcTel'])?$_REQUEST['PcTel']:'';$PcMail=isset($_REQUEST['PcMail'])?$_REQUEST['PcMail']:'';$couleur=isset($_REQUEST['couleur'])?$_REQUEST['couleur']:'';$type=isset($_REQUEST['type'])?$_REQUEST['type']:'';$sonorite=isset($_REQUEST['sonorite'])?$_REQUEST['sonorite']:'';$marque=isset($_REQUEST['marque'])?$_REQUEST['marque']:'';//--------------------------------------------------?><!doctype html><html><head><meta charset="utf-8"><title>Document sans titre</title></head><body><p>Votre commande a bien été enregistrée, vous recevrez par mail le document en pdf</p><?phpecho '<p>'.$PcNom.','.$PcPrenom.','.$PcTel.','.$PcMail.','.$couleur.','.$type.','.$sonorite.','.$marque.'</p>'; ?></body></html> sur cette deuxième page j'ai bien les variables qui s'affichent telles que choisies grace à l'echo mais rien ne s'insère dans la base de données... pourquoi ?base de données structure de la table ana_commande : Colonne Type Interclassement Attributs Null Défaut Extra Actionid_commande int(10) Non Aucun AUTO_INCREMENTPcNom varchar(20) utf8_unicode_ci Oui NULLPcPrenom varchar(20) utf8_unicode_ci Oui NULLPcTel int(10) Oui NULLPcMail varchar(20) utf8_unicode_ci Oui NULLcouleur varchar(20) utf8_unicode_ci Oui NULLtype varchar(20) utf8_unicode_ci Oui NULLsonorite varchar(20) utf8_unicode_ci Oui NULLmarque varchar(20) utf8_unicode_ci Oui NULL MERCI D'AVANCE à celui ou celle qui voudra bien prendre un peu de son temps pour me répondre. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BlackPage Posté 11 Décembre 2013 Partager Posté 11 Décembre 2013 Salut, Tout est loin d'être clair dans ton code... <form id="commandeP" method="post" action="commandeP.php?action=valider" enctype="multipart/form-data"> Ici tu indiques que ton formulaire passe en POST ( method="post" ) mais tu passes un action=valider en GET donc déjà pas très propre... Si vraiment tu veux passer ta variable action, mieux vaut la mettre en <input type="hidden" name="action" value="valider"> Ensuite, on utilise plutot : if (isset($_POST['variable']) $mavar = $_POST['variable']; Enfin, cette partie : if($id_commande){ $req="UPDATE ana_commande SET PcNom='{$PcNom}', PcPrenom={'$PcPrenom}', PcTel={$PcTel}, PcMail='{$PcMail}' WHERE id_commande={$id_commande}"; mysqli_query($connex,$req); } // Insert else{ $req="INSERT INTO ana_commande VALUES(NULL,'{$PcNom}',{$PcPrenom}, {$PcTel}, '{$PcMail}')"; mysqli_query($connex,$req); } C'est valable si tu as déjà un $id_commande qui est non nul parce que si ta variable existe ( même si elle vaut zéro ), alors tu vas faire une mise à jour d'un enregistrement, et si l'enregistrement en question n'existe pas, alors la requete va foirer... Le INSERT INTO doit suffire dans ton cas. Avec ces modifs, ca devrait aller mieux. Bon courage ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nimra Posté 11 Décembre 2013 Auteur Partager Posté 11 Décembre 2013 tout d'abord merci, par contre j'ai un autre soucis depuis tout à l'heure, tout marchait très bien pour le login et maintenant impossible d'avoir accès au backoffice... Le code que j'ai écrit vient du prof qui m'avait donné les cours, c'est lui qui nous avait montré comme ça, mais je prends en compte tes remarques pour que mon code soit plus propre. Voila le code de la page admin : <?php require_once('inc/connexion.php'); session_start(); //-------------------------------------------------- $action=isset($_REQUEST['action'])?$_REQUEST['action']:''; $identifiant=isset($_REQUEST['identifiant'])?$_REQUEST['identifiant']:''; $motDePasse=isset($_REQUEST['motDePasse'])?$_REQUEST['motDePasse']:''; //-------------------------------------------------- if($action=='valider'){ $identifiant=mysqli_real_escape_string($connex,$identifiant); $motDePasse=mysqli_real_escape_string($connex,$motDePasse); $req="SELECT * FROM utilisateur WHERE identifiant='{$identifiant}' AND motDePasse='{$motDePasse}'"; $jeu=mysqli_query($connex,$req); if(mysqli_num_rows($jeu)){ // Générer un idSession $idSession=md5(uniqid('',true)); // Placer idSession dans la session $_SESSION['idSession']=$idSession; // Stocker idSession dans la table $req="UPDATE utilisateur SET idSession='{$idSession}' WHERE identifiant='{$identifiant}'"; mysqli_query($connex,$req); // Rediriger vers /admin header("Location:admin/index.php"); exit; } } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Connexion</title> </head> <body> <form name="form1" action="admin.php?action=valider" method="post"> <p align="center">Connexion</p> <?php if($action=='valider'){ ?> <p align="center">Identifiant ou mot de passe incorrects !</p> <?php } ?> <table align="center"> <tr> <th>Identifiant</th> <td><input name="identifiant" type="text" value="<?php echo htmlspecialchars($identifiant) ?>" size="10" maxlength="10" required></td> </tr> <tr> <th>Mot de passe</th> <td><input name="motDePasse" type="password" size="10" maxlength="10" required></td> </tr> <tr> <th> </th> <td><input type="submit" value="Connexion"></td> </tr> </table> </form> </body> </html> Et voila l'erreur générée par php : Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\Lepianoenchantesite\admin.php on line 15 Plus ça va, plus je me dit que ce prof nous a fait faire n'importe quoi. Ce code marchait très bien jusqu'à tout à l'heure, je ne comprends pas pourquoi il bugue maintenant. Je suis allée voir plein de tuto mais je n'en trouve pas de simple où il explique la connexion à la base de données pour les sessions, ils prennent tous des exemples où les variables identifiant et mot de passe sont déclarée sur la page. Un petit indice ? Merci encore Blackpage Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 12 Décembre 2013 Partager Posté 12 Décembre 2013 $jeu=mysqli_query($connex,$req); Ton code est correct, par contre $jeu = false (boolean) en cas d’echec, ce qui semble être le cas d'après le message d'erreur que tu as. En clair c'est qq chose qui plante au niveau SQL. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dadou Posté 12 Décembre 2013 Partager Posté 12 Décembre 2013 Que viennent faire les accolades dans tes requêtes ?? A mon avis, elles n'ont absolument rien à faire la Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 12 Décembre 2013 Partager Posté 12 Décembre 2013 Les accolades c'est correct dans une string complexe (double quote) en php. http://www.php.net/manual/fr/language.types.string.php#language.types.string.parsing.complex Y'a d'autres trucs discutables dans ce code, mais ils ne concernent pas sa question Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dadou Posté 12 Décembre 2013 Partager Posté 12 Décembre 2013 Je ne connaissais pas cette syntaxe Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant