Page 1 sur 1

Ajout d'information dans une base a partir d'un formulaire

Posté : 11 juin 2005, 19:01
par Nadia
Salut,
Je débute en php et j ai un gros problème la :oops:
voila je dispose d'une table reponse qui contient les champs codeR (auto incremente) et libelleR( chaine de caractere)
je desire ajouté des ligne dans le champs libelleR a partir d un formulaire
voila le code que j ai ecris:

$rep="insert into reponse values('','".$_POST['libeller']."')";
$reponse=mysql_query($rep) or die (mysql_error());
echo <form action="saisie.php" method="post">
Réponse : <input type="text" name="libeller" size="20"><br><br>
<div align="center"><input type="submit" value="Envoyer"></div>
</form>;

et voici l erreur qu il me genere:
parse error, unexpected '<', expecting ',' or ';' in c:\program files\easyphp1-7\www\projet_certification\saisie.php

Svp si quelqu un sait comment m aider je vous en prie :(
Parce que serieux, ça fait 3 jours que je bloque dessus.
Je vous remercie

Posté : 11 juin 2005, 19:05
par ouckileou
il manque déjà des guillemets autour de la chaine envoyée par le echo

et met ton code entre balises php qu'on le voit mieux
$rep="insert into reponse values('','".$_POST['libeller']."')";
$reponse=mysql_query($rep) or die (mysql_error());
echo "<form action=\"saisie.php\" method=\"post\">
Réponse : <input type=\"text\" name=\"libeller\" size=\"20\"><br><br>
<div align=\"center\"><input type=\"submit\" value=\"Envoyer\"></div>
</form>;" 
plutôt que d'linsérer directement il faudrait tester que ta variable $_POST['libeller'] est bien transmise et éventuellement la formater (addslashes() par exemple)

car là tu fais l'insertion quoiqu'il arrive, avant d'afficher ton formulaire et même s'il n'a pas été posté

tu peux nommer ton bouton Envoyer avec name="submit
ce qui te renverra une variable "submit" en cas d'envoi de tonn formulaire

donc tu peux faire
if (isset($_POST['submit'])) {
   // insertion
} else {
   // affichage du formulaire
}

Posté : 11 juin 2005, 19:08
par Nadia
oui je m en sui rendu compte juste apres. merci
$rep="insert into reponse values('','".$_POST['libeller']."')";
$reponse=mysql_query($rep) or die (mysql_error()); 
echo "<form action="saisie.php" method="post"> 
 Réponse : <input type="text" name="libeller" size="20"><br><br>
 <div align="center"><input type="submit" value="Envoyer"></div> 
 </form>";

Posté : 11 juin 2005, 19:10
par ouckileou
dans la correction que tu as faite il te faut échapper les guillemets contenus dans ta chaine sinon tu auras une erreur

ou alors l'entourer de guillemets simples

Posté : 11 juin 2005, 19:25
par Nadia
ok merci
j ai fait ce que tu m as dis. je n ai plus d erreur seulement dans ma table le champs libelleR reste vide?
voila le code:
if (isset($_POST['submit']))  
   {
    $rep="insert into reponse values('','".$_POST['libeller']."')";
    $reponse=mysql_query($rep) or die (mysql_error()); 
	}
else
    echo '<form action="saisie.php" method="post"> 
    Réponse : <input type="text" name="libeller" size="20"><br><br>
    <div align="center"><input type="submit" value="Envoyer"></div> 
    </form>';
Que me conseille - tu?

Posté : 11 juin 2005, 19:28
par Nadia
Au fait est ce que tu sais comment faire lors de la suppression d une ligne pour revenir au numero precedent? C'est a dire que si je sui a la ligne 5 et que je la supprime je veux que le prochain enregistrement soit le 5
Merci :oops:

Posté : 11 juin 2005, 19:35
par Cyrano
Si ce champ est une clé primaire auto_increment, tu ne peux pas: la numérotation est automatique et tu ne peux pas sauf en le forçant manuellelemt, mais à l'usage, ce n,est ni pratique ni vraiment utile. Ce numéro n'est qu'un point de repère et ne devrait en principe pas être utilisé autrement. Si en outre tu as d'autres table qu utilisent cette valeur en clé étrangère, tu risques à terme d'avoir de gros problèmes de liens si tu forces les clés primaires.

Posté : 11 juin 2005, 20:04
par ouckileou
fais un echo de ta variable "libellé" tu verras déjà si tu l'as bien récupérée

tu as aussi des guillemets en trop dans ta requête j'ai l'impression
if (isset($_POST['submit'])) {
   // onvérifie que la variable libellé à été transmise
   // si non on lui affecte la valeur null pour éviter un warning
   $libelle = (isset($_POST['libelle']))?$_POST['libelle']:null;
   // affichage de contrôle
   echo ">>>".$libelle."<<<";

   $rep="INSERT INTO reponse values('','$libelle')";
    $reponse=mysql_query($rep) or die (mysql_error());
    }
tu peux aussi construire ta requête en précisant dans quels champs tu fais tes insertions, cela t'évites de devoir mettre des valauers vides pour les champs auto-incrémenté par exemple

Code : Tout sélectionner

INSERT INTO reponese (champ_libelle) VALUES ('$libelle')

Posté : 11 juin 2005, 22:19
par smarties
Tu peux aussi faire :

Code : Tout sélectionner

echo <<<FIN <form action="saisie.php" method="post"> Réponse : <input type="text" name="libeller" size="20"><br><br> <div align="center"><input type="submit" value="Envoyer"></div> </form> FIN;
Comme ca tu n'as plus de problème avec les apostrophes