Insertion des éléments du formulaire dans la base de donnée

Résolu/Fermé
KAFCISCO Messages postés 15 Date d'inscription samedi 24 janvier 2015 Statut Membre Dernière intervention 20 mai 2015 - 20 mai 2015 à 11:51
 kafcisco - 5 juin 2015 à 09:23
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.
A voir également:

2 réponses

CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
Modifié par CptRomaiin le 20/05/2015 à 12:59
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
0
KAFCISCO Messages postés 15 Date d'inscription samedi 24 janvier 2015 Statut Membre Dernière intervention 20 mai 2015
20 mai 2015 à 19:02
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
0
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
26 mai 2015 à 14:34
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']));
0
kafcisco > CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016
5 juin 2015 à 09:23
merci CptRomaiin, vos conseils m'ont été d'une grande utilités, merci encore de m'avoir donner la solution.
0