Requête INSERT INTO avec variables

Muta
Invité n'ayant pas de compte PHPfrance

04 avr. 2011, 22:36

Bonjour à tous!

Voilà, j'ai fais ce code, qui a pour but de simplement faire une insertion dans une BDD.
Les données saisies par l'utilisateur sont correctement transmises depuis le formulaire, mais impossible de les transmettre dans la requête.

Voilà mon code:

<?php
//Initialisation des principales variables
$Bdd="norvegien";
$Password="Cu9buXnMAYzc6CVs";
$User="root";
$Connect="";
$Requetenum="SELECT * FROM theorie";
$Requete="INSERT INTO theorie (id ,theme,regle ,exemple ,lecon) VALUES ('".$Id."', '".$Theme."', '".$Regle."', '".$Exemple."', '".$Lecon."');";

//Ouverture de la BDD
$Connect=mysqli_connect("", "$User", "$Password", "$Bdd") or die ("Impossible de se connecter &agrave; la Bdd. <br>");

//Récupération des données
If($_POST[theme] != "") {$Theme=$_POST[theme];} Else {die("Le champs \"Titre\" est vide");};
If ($_POST[regle] != "") {$Regle=$_POST[regle];} Else {die("Le champs \"R&egrave;gle\" est vide");};
If ($_POST[exemple] != "") {$Exemple=$_POST[exemple];} ELSE {$Exemple=NULL;};
If ($_POST[lecon] != "") {$Lecon=$_POST[lecon];} ELSE {$Lecon=NULL;};


//Détermination du numéros à attribuer à l'ID
$Ok=mysqli_query($Connect, $Requetenum) or die ("Erreur dans l'envoi de la requ&ecirc;te de d&eacute;termination du nombre &agrave; attribuer &agrave; l'ID.<br>");
If (mysqli_num_rows($Ok))
	{$Num=mysqli_num_rows($Ok) or die ("Erreur dans la d&ecute;termination du nombre de lignes retourn&ecute;es! <br>");
	}
Else ($Num=0);
$Id=$Num+1;

//Affichage du tableau récapitulatif des données enregistrées
echo("<center>");
echo ("<table border=1>");
echo ("<tr><td><b>ID</b></td><td><b>Titre</b></td><td><b>R&egrave;gle</b></td><td><b>Exemple</b></td><td><b>Le&ccedil;on</b></td></tr>");
echo ("<tr><td>".$Id."</td><td>".$Theme."</td><td>".$Regle."</td><td>".$Exemple."</td><td>".$Lecon."</td></tr>");
echo ("</table></center>");

//Affichage de la requête
echo ("".$Requete."<br>");

//Préparation de la requête préparée
$Ok=mysqli_query($Connect, $Requete) or die ("Impossible d'ex&eacute;cuter la requ&ecirc;te d'insertion.<br>");
//Récupération du nombre de ligne créées.
$Num=mysqli_stmt_affected_rows($Init) or die ("Erreur dans la r&eacute;cup&eacute;ration du nombre de lignes affect&eacute;es.<br>");

//Affichage du nombre de ligne créées.
Echo("<br>L'insertion a g&eacute;n&eacute;r&eacute; {$Num} ligne(s).<br>");

//Fermeture de la BDD
$Ok=mysql_close($Connect);

?>
Et voilà le résultat, qui affiche le contenu des variables et la requête juste avant qu'elle soit transmise à la bdd.
ID Titre Règle Exemple Leçon
3 title contenue voilà l\'exemple 12
INSERT INTO theorie (id ,theme,regle ,exemple ,lecon) VALUES ('', '', '', '', '');
Impossible d'exécuter la requête d'insertion.
Je ne comprend pas pourquoi je n'arrive pas à faire passer le contenue des variables à la requête? Pourriez vous m'aider?

ViPHP
xTG
ViPHP | 7331 Messages

05 avr. 2011, 08:00

Rien ne me choque, essayes de rajouter ceci pour le debug : mysqli_error()

Mammouth du PHP | 672 Messages

05 avr. 2011, 09:24

Bonjour.

Comme affiché, la requête n'est pas correcte :

Code : Tout sélectionner

INSERT INTO theorie (id ,theme,regle ,exemple ,lecon) VALUES ('', '', '', '', '');
En même temps, c'est un peu logique... Ton code :
// Tu créés la chaine $requete avec les valeurs actuelles de $id etc.
$Requete="INSERT INTO theorie (id ,theme,regle ,exemple ,lecon) VALUES ('".$Id."', '".$Theme."', '".$Regle."', '".$Exemple."', '".$Lecon."');";
//Récupération des données $id etc.
If($_POST[theme] != "") {$Theme=$_POST[theme];} Else {die("Le champs \"Titre\" est vide");};
Sinon, tu pourrais améliorer ta table, en lui indiquant que le ID est un champ auto-incrémenté. Du coup, c'est la BDD qui va gérer la numérotation. C'est plus sympa comme ça, non ? 8-)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 avr. 2011, 09:33

Salut,

j'ajouterais un peu de lecture sur le sujet qui te pose soucis Les variables auto déclarées pourquoi c'est mal (vu la requete je dirais que ton register globals est à off, c'est vérifiable dans un phpinfo()).
dernière chose, pour la correction => Comment récupérer les valeurs d'un formulaire et pour compléter Comment valider un formulaire complexe avec php

bonne lecture ;)

@+
Il en faut peu pour être heureux ......

Muta
Invité n'ayant pas de compte PHPfrance

05 avr. 2011, 22:27

Merci pour vos réponses et pour la lecture!
Tout marche bien!
Merci!

Bonne continuation...