Aller au contenu

Recup données formulaire dans bdd insert into ne fonctionne pas


Nimra

Sujets conseillés

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

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

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

$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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...