Les tableaux superglobaux et récupération des variables
Bonjour.Comme vous le savez, je débute en PHP et je demand doncl'indulgence.
Après des heures de travail, je ne parvenais pas à récupérer les variables d'un simple formulaire sur une 2è page à travers GET ou POST. J'ai ensuite appris que cela était dû au register_globals configuré à off. Au lieu de $variable, il faut écrire $_POST['variable']. C'est ainsi que je j'ai pu faire un pas dans mon apprentissage. Aujourd'hui, je suis à la phase PHP/MySQL, où je dois mettre à jour la base MySQL avec un formulaire PHP. Rien de compliqué, la source est fourni sur le CD du (vieux) livre d'apprentissage. Mais voilà, j'ai des erreurs de type "Undefined variable" Le formulaire donne //// et stock.php3 donne //$requete="INSERT INTO livres(isbn,titre,auteur,collec,paru,image)VALUES('$isbn','$titre','$auteur','$collec','$paru','$ima ge')";// suivi d'une condition avec //echo "Titre:".$titre." de:".$auteur." collection:".$collec." paru le:".$paru."image:".$image." code: ".$isbn;//
Alors j'ai décidé de mettre ma nouvelle compétence en jeu en changent les variables, exemple : //$requete="INSERT INTO livres2(isbn,titre,auteur,collec,paru,image) VALUES('$_POST['isbn']','$_POST['titre']','$_POST['auteur']','$_POST['collec']','$_POST['paru']','$_POST['image']')";// et //echo "Titre:" $_POST['titre'] etc
Et ô déception, j'ai un nouveau message : Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
Le bon point : echo $_POST['titre']; renvoit bien la donnée du formulaire. Le mauvais point, je ne sais pas de quelle manière envoyer la variable sur la base MySQL
Note: La base et la table sont bien crées. Je suis attentivement les consignes du (vieux) livre.
Help !
Réponses apportées à cette discussion
Salut mctarek,
un détail : lorsque tu mets du code, utilise donc la barre d'outil, il y a un petit logo « » qui est fait spécialement pour ça, tu sélectionnes alors le langage, tu colles ton code et tu cliques sur [Insertion], l'affichage en sera notablement amélioré.
Pour ton message d'erreur, il y a neuf chances sur dix pour que ce soit à cause d'un « ; » de fin d'instruction manquant sur la ligne précédente.
Enfin, pour te familiariser avec l'utilisation d'une base de données, je te recommande la collection de tutos sur PhpDebutant.org, regarde la colonne de droite et tu auras pas mal de matière sur les bases essentielles.
Merci Cyrano. J'ai suivi ton conseil, et je suis tombé sur la solution...un peu déroutante :
De '$variable' je suis passé à '$_POST['collec']', puis finalement par '$_POST[collec]' (sans ls guillemets simples entre les crochets). Et la requête SQL a bien lue dans phpMyAdmin. Tout fonctionne ! Des heures perdues pour ça !
Attention, sans les guillemets ou apostrophes, tu risques d'avoir des problèmes : PHP interprète alors l'index comme une constante qui n,existe pas,ou alors il se trouve qu'enne existe et tu va avoir des résultats pour le moins étrange.
Observe ta requête avant correction :
$requete = "INSERT INTO livres2(isbn,titre,auteur,collec,paru,image) VALUES(
'$_POST['isbn']',
'$_POST['titre']',
'$_POST['auteur']',
'$_POST['collec']',
'$_POST['paru']',
'$_POST['image']'
)";
Là il y a un problème parce qu'il y a conflit entre les apostrophes qui délimitent les champs et ceux qui entourent les index.
En faisant des concaténations propres, tu n,aurais eu aucun soucis de ce genre :
$requete = "INSERT INTO livres2(isbn,titre,auteur,collec,paru,image) VALUES(
'". $_POST['isbn'] ."',
'". $_POST['titre'] ."',
'". $_POST['auteur'] ."',
'". $_POST['collec'] ."',
'". $_POST['paru'] ."',
'". $_POST['image'] ."'
)";
Et observe la différence entre les deux au niveau de la coloration syntaxique : l'erreur devient visuellement repérable.