Insertion des éléments du formulaire dans la base de donnée [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
samedi 24 janvier 2015
Statut
Membre
Dernière intervention
20 mai 2015
-
 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.

2 réponses

Messages postés
323
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
49
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
Messages postés
15
Date d'inscription
samedi 24 janvier 2015
Statut
Membre
Dernière intervention
20 mai 2015

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
Messages postés
323
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
49
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']));
>
Messages postés
323
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016

merci CptRomaiin, vos conseils m'ont été d'une grande utilités, merci encore de m'avoir donner la solution.