Php et INSERT INTO - avec variables

Bonsoir à tous,

dans une page avec formulaire, j’introduis des données.

sur la page suivant (après le bouton valider), je les récupère et je les affiche, pas de problèmes.

Voici l’instruction:

mysql_query("INSERT INTO bdonnees VALUES (…)…

Mon problème, c’est après “VALUES” car je ne sais pas que mettre comme variable car si je mets mes variables, rien ne s’insère dans ma bd alors que si j’y mets manuellement des données, ça rentre dedans.

Ma ligne originale est :

mysql_query("INSERT INTO bdmessages VALUES (mess,alpha,chiffre,pub)");

Et quand j’affiche les variables (simple texte), ça fonctionne parfaitement.

Comment puis-je faire que le contenu de mes variables rentrent dans ma bdd.

merci d’avance !!

Montre nous le bout de code où tu effectues cette insertion ?

<?

$mess=$_POST[‘mess’];
$alpha=$_POST[‘alpha’];
$chiffre=$_POST[‘chiffre’];
$pub=$_POST[‘pub’];

mysql_connect("localhost","root","");
mysql_select_db("mabdd");

mysql_query("INSERT INTO bdmessages (mess, alpha, chiffre, pub) VALUES (mess,alpha,chiffre,pub)");

mysql_close();
?>

savez-vous m’aider ??

essaye plutot:


mysql_connect("localhost","root","");
mysql_select_db("mabdd");
$requete= "INSERT INTO bdmessages (mess, alpha, chiffre, pub) VALUES (\'"+ $_POST['mess'] + "\',\'" + $_POST['alpha'] + "\',\'"+$_POST['chiffre']+"\',\'"+$_POST['pub']+"\')";
mysql_query($requete);

mysql_close();



Avec une verification si la requete s’est bien passé

idem, il n’y a pas de messages d’erreures, mais pas d’inscription dans la bdd alors que ça m’affiche correctement le résultat sur une page web !!


mysql_connect("localhost","root","");
mysql_select_db("mabdd");
$requete= "INSERT INTO bdmessages (mess, alpha, chiffre, pub) VALUES (\'"+ $_POST['mess'] + "\',\'" + $_POST['alpha'] + "\',\'"+$_POST['chiffre']+"\',\'"+$_POST['pub']+"\')";
$result = mysql_query($requete);
if (!$result) {
   die('Requête invalide : ' . mysql_error());
}

mysql_close();

et avec ça: vois si tu n’as pas un message qui s’affiche ?

voila ce qu’il m’affiche :

Requête invalide : Erreur de syntaxe près de ‘2’ à la ligne 1

JG > -1, on utilise JAMAIS des données input (post, get, etc …) dans une requète :o (sécurité) …
(même si, dans le cas présent, vu qu’on effectue aucun traitement, on s’en fout un peu :D)


$mess=$_POST['mess'];
$alpha=$_POST['alpha'];
$chiffre=$_POST['chiffre'];
$pub=$_POST['pub'];


mysql_connect("localhost","root","");
mysql_select_db("mabdd");
$requete= "INSERT INTO bdmessages (mess, alpha, chiffre, pub) VALUES ('".mysql_real_escape_string($mess)."','".mysql_real_escape_string($alpha)."','".mysql_real_escape_string($chiffre)."','".mysql_real_escape_string($pub)."')";
echo $requete."<br />";
$result = mysql_query($requete);
if (!$result) {
  die('Requête invalide : ' . mysql_error());
}

mysql_close();

si tjrs problème, poste nous ici la requète afficher par le echo :oui:

Tes sécus contre les injections de sql ne servent à rien si ça ne fonctionne pas pour l’instant :o

Apparement il y a un champ de type numérique, donc il n’y a pas de ’ ’ à mettre autour de sa valeur

salut! est ce que tu peux nous montrer la structure de la table dans laquelle tu inseres tes données? si la requete ne marche pas, ça doit etre parce que ya non respect de types de données. Ok?


$sql="insert into matable values ($entier,\"$unchaine\",$unautrentier");

voila ce que tu demandes :

                &lt;TR VALIGN=TOP ALIGN=LEFT&gt;
                    &lt;TD COLSPAN=4 HEIGHT=47&gt;&lt;p align=&quot;center&quot; class=&quot;style6&quot;&gt;&lt;span class=&quot;style2&quot;&gt;&lt;strong&gt;&lt;u&gt;Composer le message .&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
                      &lt;p align=&quot;center&quot;&gt;&amp;nbsp;&lt;/p&gt;
					  &lt;table width=&quot;500&quot; border=&quot;1&quot;&gt;
                        &lt;tr&gt;
                          &lt;th scope=&quot;col&quot;&gt;Le message est : &lt;/th&gt;
                          &lt;th scope=&quot;col&quot;&gt;&lt;div align=&quot;left&quot;&gt;&lt;? echo &#036;_POST['mess']; ?&gt;&lt;/div&gt;&lt;/th&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
&lt;td&gt;&lt;div align=&quot;center&quot;&gt;&lt;strong&gt;Les 2 lettres
                            alphabetiques sont : &lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;
                          &lt;td&gt;&lt;? echo &#036;_POST['alpha']; ?&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;div align=&quot;center&quot;&gt;&lt;strong&gt;Le chiffre est : &lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;
                          &lt;td&gt;&lt;? echo &#036;_POST['chiffre']; ?&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;div align=&quot;center&quot;&gt;&lt;strong&gt;Public : &lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;
                          &lt;td&gt;&lt;? echo &#036;_POST['pub']; ?&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                      &lt;/table&gt;						  &lt;p&gt;&lt;br&gt;

Et là, ça m’affiche parfaitement ce que je demande !

Est-ce cela que tu demandes ??

http://rapidshare.de/files/11858339/sql.JPG.html

en fait, mon premier champs est "ID" qui est "sencé incrémenté de 1 en 1" mais quand je fais auto-increment, ça ne fonctionne pas.

"concat" est le mélange de 2 chaines "alpha" et "chiffre".

non c’est pas tout a fait ce dont je parle. en fait je parle de la structure de la table de ta base de données. la table dans laquelle tu insères. en fait un resumé des colonnes de ta table:
exple
id: integer;
mess varchar(50);

un truc comm ça.

Et bien, c’est ça qui est noté, regarde bien :

id (int 11)
mess (text)
apha (text)
chiffre (int1)
concat (text)
pub(text)

essaie ça et fait moi part du resultat


$mess=$_POST['mess'];
$chiffre=$_POST['chiffre'];
$alpha=$_POST['alpha'];
$concat=$_POST['alpha'].$_POST['chiffre'];
$pub=$_POST['pub'];
$sql="insert into matable(mess,apha,chiffre,concat,pub) values(\"$mess\",\"$alpha\",$chiffre,\"$concat\",\"$pub\")";
mysql_query($sql);

Pas de messages d’erreur mais pas de résulat non plus.

le premier champ est “id” mais est fait “automatiquement” si j’ai bien compris

en effet oui j’ai considerer l’id comm auto increment.
mais dit moi tu as bien remplacé “matable” le par le vrai nom de ta table?
essai ça. on va essayer d’inserer en donnant une valeur a id par exple 200
question de voir si ça va marcher

[CODE]
$mess=$_POST[‘mess’];
$chiffre=$_POST[‘chiffre’];
$alpha=$_POST[‘alpha’];
$concat=$_POST[‘alpha’].$_POST[‘chiffre’];
$pub=$_POST[‘pub’];
$sql=“insert into matable(id,mess,apha,chiffre,concat,pub) values(200\”$mess\",\"$alpha\",$chiffre,\"$concat\",\"$pub\")";
mysql_query($sql);

en effet oui j’ai considerer l’id comm auto increment.
mais dit moi tu as bien remplacé “matable” le par le vrai nom de ta table?
essai ça. on va essayer d’inserer en donnant une valeur a id par exple 200
question de voir si ça va marcher


$mess=$_POST['mess'];
$chiffre=$_POST['chiffre'];
$alpha=$_POST['alpha'];
$concat=$_POST['alpha'].$_POST['chiffre'];
$pub=$_POST['pub'];
$sql="insert into matable(id,mess,apha,chiffre,concat,pub) values(200\"$mess\",\"$alpha\",$chiffre,\"$concat\",\"$pub\")";
mysql_query($sql);

Tu as oublié une virgule après 200. Au fait, pourquoi tu utilises des double quotes ? Les simples quotes marchent bien et tu n’aurais pas à mettre tous ces antislashes.

bon, bon

ça fonctionne mais j’ai un message :

Duplicata du champ ‘200’ pour la clef 1

on dirait que maintenant, il me marque 2X le nombre dans l’id…

mais de toute façon, pour l’id, il ne fait pas l’auto-increment… comment ça se fait ? Comment est-ce que je dois faire pour que je ne dois pas mettre de valeur pour ID ?

verifie au niveau de ta table que


`id` int(11) NOT NULL auto_increment,