Aller au contenu

Où est l'erreur?


theprogrammeur

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...