theprogrammeur Posté 19 Mai 2007 Posté 19 Mai 2007 Bonjour J'ai créé une table ne comportant qu'un champ dans ma base et ce code pour le remplir: <?if(isset($_POST['lien'])){$connection = mysql_connect("serveur", "moi", "mot_passe");if (!$connection) { die('Connexion impossible : ' . mysql_error());}mysql_select_db("ma_table");mysql_query("INSERT INTO table VALUES('$_POST['lien']')");mysql_close($connection);echo'information enregistrée';}else{?><form method="post" action="ma_page.php">Information:<br /><input type="text" name="lien" /><br /><input type="submit" value="Envoyer" /></form><?}?> Lorsque je teste ce script, le serveur me dit qu'il y a une erreur à la ligne 17 (mysql_query). J'ai beau regarder, je ne la vois pas. Quelqu'un peut m'aider? Merci d'avance.
captain_torche Posté 19 Mai 2007 Posté 19 Mai 2007 Essaye en enlevant les guillements dans $_POST['lien'] ($_POST[lien]). De manière générale, quand tu as un souci dans une requête SQL, affiche-là, c'est le meilleur moyen de la débugger.
Jerome38 Posté 19 Mai 2007 Posté 19 Mai 2007 Salut, soit c'est la syntaxe, soit c'est la requete Pour verifier remplace mysql_query("INSERT INTO table VALUES('$_POST['lien']')");par : $lien = $_POST['lien'];$testDB = "INSERT INTO table VALUES('$lien')";if($resultDB = mysql_query($testDB)){ } else { echo mysql_error(); } Comme ca la syntaxe est plus lisible meme si au final elle reste la même, et si l'erreur est une erreur SQL il te la renverra grace au mysql_error
TheRec Posté 19 Mai 2007 Posté 19 Mai 2007 Bonjour, Un peu de lecture dans le manuel au sujet du traitement des variables dans les chaînes de caractères s'avère utile. La solution proposée par captain_torche fonctionnera, mais comme le manuel le dit "cela ne fonctionne pas comme si c'était hors d'une chaîne" (ne me demande pas comment cela fonctionne, je n'utilise pas cette syntaxe). Dans tonc as j'utiliserais soit cette syntaxe : mysql_query("INSERT INTO table VALUES('".$_POST['lien']."')"); Ou si tu ne veut pas utiliser la concaténation (.) : mysql_query("INSERT INTO table VALUES('{$_POST['lien']}')"); Après il faut encore que je t'avertisse que d'insérer directement le contenu envoyé par l'utilisateur (sans post-traitement) dans ta base de données est risqué, imagine que ton utilisateur entre quelque chose comme <script>alert('bonjour')</script> Lorsque tu affiches ceci sur ton site (sans autre traitement) le code sera interprété et une fenêtre de message apparaîtra. C'est un exemple, on peut aussi récupérer les cookies de l'utilisateur courant, ce qui est tout de suite moins drôle. C'est ce qu'on appelle une faille XSS (en fin d'article tu as des solutions pour les éviter). Donc fais bien attention à ce que tu enregistre et affiche lorsque cela provient d'un utilisateur (directement ou indirectement). Bonne continuation.
theprogrammeur Posté 19 Mai 2007 Auteur Posté 19 Mai 2007 Le problème est réglé. Il suffisait de transformer $_POST['lien'] en $_POST[lien]. Merci encore pour votre aide.
TheRec Posté 19 Mai 2007 Posté 19 Mai 2007 D'accord Note qu'utiliser un index comme cela indque à PHP de chercher dans le tableau $_POST l'index ayant la valeur de la constante lien, lorsque la constante lien n'existe pas PHP cherche l'index ayant le nom de cette constante. Mais si un jour tu viens à définir cette constante pour une raison ou pour une autre tu n'obtiendras plus le comportement recherché ici.
petit-ourson Posté 20 Mai 2007 Posté 20 Mai 2007 Le problème est réglé. Il suffisait de transformer $_POST['lien'] en $_POST[lien]. Merci encore pour votre aide. Cela peut être problématique sur certaine configuration et ... cela reste incorrecte (même si cela marche aujourd'hui).
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant