Version complète: sur le forum Webmaster Hub : Où est l'erreur?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
theprogrammeur
Bonjour

J'ai créé une table ne comportant qu'un champ dans ma base et ce code pour le remplir:
CODE
<?
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
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
Salut,

soit c'est la syntaxe, soit c'est la requete

Pour verifier remplace
CODE
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
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 :
CODE
mysql_query("INSERT INTO table VALUES('".$_POST['lien']."')");

Ou si tu ne veut pas utiliser la concaténation (.) :
CODE
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
CODE
<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
Le problème est réglé. Il suffisait de transformer $_POST['lien'] en $_POST[lien].

Merci encore pour votre aide.
TheRec
D'accord smile.gif

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
CITATION(theprogrammeur @ samedi 19 mai 2007, 19h26) *
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).
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.