Insertion des éléments du formulaire dans la base de donnée
Résolu
KAFCISCO
Messages postés
18
Statut
Membre
-
kafcisco -
kafcisco -
Bonjour, cela fait un moment que je travaille sur un formulaire et je rencontre un blocage. J'ai fait trois types de scripts.
Un script pour le formulaire, deux php pour ajout et connexion.
Problème: après validation des données du formulaire le navigateur affiche l'erreur que voici:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values[(pseudo,adresse)]' at line 1
j'ai essayé d'apporter une correction, mais impossible
le script est:
<?php
include ('connexion.php');
connexion();
$_post['pseudo']="pseudo";
$_post['adresse']="adresse";
$sql="INSERT INTO inscrit(pseudo,adresse)";
$sql="values[(".$_post['pseudo'].",".$_post['adresse'].")]";
mysql_query($sql)or die(mysql_error());
?>
merci de m'aider.
Un script pour le formulaire, deux php pour ajout et connexion.
Problème: après validation des données du formulaire le navigateur affiche l'erreur que voici:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values[(pseudo,adresse)]' at line 1
j'ai essayé d'apporter une correction, mais impossible
le script est:
<?php
include ('connexion.php');
connexion();
$_post['pseudo']="pseudo";
$_post['adresse']="adresse";
$sql="INSERT INTO inscrit(pseudo,adresse)";
$sql="values[(".$_post['pseudo'].",".$_post['adresse'].")]";
mysql_query($sql)or die(mysql_error());
?>
merci de m'aider.
2 réponses
-
Salut,
Ta façon de faire n'est pas correct et présente plusieurs problèmes :
- à l'avant dernière ligne tu attribues "value..." à la variable $sql, ce qui créé évidement une erreur lorsque tu la soumets à mysql_query
- Tu créé une grosse faille de sécurité par injection SQL en insérant directement les variables de ton formulaire dans ta requête
- mysql_query est obsolète et ne doit plus être utilisé (il sera supprimé de PHP sous peu)
Pour résoudre tout ces problèmes tu devrais utiliser PDO de cette manière :
$db = new PDO('mysql:host=localhost;dbname=database', 'user', 'password'); $insert = $db->prepare('INSERT INTO inscrit (pseudo, adresse) VALUES (:pseudo, :adresse)'); $insert->execute(array('pseudo' => $_post['pseudo'], 'adresse' => $_post['adresse']));
PDO échappe automatiquement les valeurs des paramètres, il n'y a donc pas de risque d'injection SQL.
Un peu de lecture :
https://www.php.net/manual/fr/ref.pdo-mysql.php
http://openclassrooms.com/courses/les-transactions-avec-mysql-et-pdo -
Merci, CptRomaiin de vouloir m'aider les éléments que tu m'apportés sont intéressants, mais je l'avais dit j'ai fait trois scripts dont tu connais le premier et les deux autres sont:
- connexion:
<?php
$host = "localhost"; /*127.0.0.1 */;
$login = ""; /*root*/;
$password = "";
$base = ""; /*membre*/;
function connexion()
{
global $host, $login, $password, $base;
$db = mysql_connect($host, $login, $password);
mysql_select_db($base,$db);
}
?>
et celui du formulaire
- formulaire:
<html>
<header>
<title>
FICHE D'INSCRIPTION
</title>
<h1>
<marquee>
FAITES VOTRE INSCRIPTION EN 30 SECONDS
</marquee>
</h1>
</header>
<body>
<form action="ajout.php" method="post">
<input type="text" name="pseudo">
PSEUDO
</input></br></br>
<input type="text" name="adresse">
ADRESSE
</input></br></br>
<input type="submit" value="ENREGISTRER"/>
</form>
</body>
</html>
Alors comment dois-je réussir avec les éléments que tu m'a donné?
MERCI-
Et bien il suffit d'organiser le code de cette manière :
Le formulaire reste inchangé.
La page connexion.php :$host = "localhost"; $login = "root"; $password = ""; $base = "membre"; $db = new PDO('mysql:host=' . $host . ';dbname=' . $base, $login, $password);
La page ajout.php :include('connexion.php'); $insert = $db->prepare('INSERT INTO inscrit (pseudo, adresse) VALUES (:pseudo, :adresse)'); $insert->execute(array('pseudo' => $_post['pseudo'], 'adresse' => $_post['adresse']));
-