Bonjour à tous
J’ai un titi probs…
Je tente de faire une requête SQL et j’ai un titi prob au niveau de mon INSERT INTO.
Voilà mon code :
$host = ‘localhost’;
$user = ‘root’;
$pass = ‘’;
$db = ‘tpi’;
$link = mysql_connect ($host,$user,$pass);
mysql_select_db($db);
$champ1 = $_POST[‘nom’];
$champ2 = $_POST[‘categorie’];
$champ3 = $_POST[‘photo’];
$select = "INSERT INTO objet (id, nom, caracteristique, photo) VALUES ($champ1, $champ2, $champ3)";
mysql_query($select, $link);
(le champ "photo" est du texte)
Biensur avec celà ça ne marche pas…
J’ai vu d’autre post par rapport à ça mais rien n’a marcher chez moi :S donc si vous pourriez éclairer mon chemin ça m’aiderai bcp.
Merci à tous
Cas typique d’injection SQL.
Premièrement : lire la documentation mySQL, notamment sur la façon de faire des chaînes de caractères (ie: ‘x’)
Deuxièmement: se servir de mysql_real_escape_string pour éviter des failles de sécurité…
$select = 'INSERT INTO objet (id, nom, caracteristique, photo) VALUES (';
$select .= "'" . mysql_real_escape_string($champ1) . "'";
$select .= "'" . mysql_real_escape_string($champ2) . "'";
$select .= "'" . mysql_real_escape_string($champ3) . "')";
Troisièmement, répondre à la question posée
(id, nom, caracteristique, photo)
tu as 4 champs
($champ1, $champ2, $champ3)
tu as 3 champs
forcément il va pas aimer
je pense que ton ID est géré automatiquement, supprime-le de la requete.
Merci déjà de vos réponse alors déjà jai supprimer l’id oui et ensuite jai tenter de mettre :
$select = 'INSERT INTO objet ( nom, caracteristique, photo) VALUES (';
$select .= "'" . mysql_real_escape_string($champ1) . "'";
$select .= "'" . mysql_real_escape_string($champ2) . "'";
$select .= "'" . mysql_real_escape_string($champ3) . "')";
Mais rien ne se passe… aucune inscriptions dans ma bd…
parce que Sans-Nom a oublié de mettre des virgules entre les champs…
$select = 'INSERT INTO objet ( nom, caracteristique, photo) VALUES (';
$select .= "'" . mysql_real_escape_string($champ1) . "',";
$select .= "'" . mysql_real_escape_string($champ2) . "',";
$select .= "'" . mysql_real_escape_string($champ3) . "')";
J’ai mis les virgules et rien ne s’inscrit dans ma bd…
echo $select, ‘<br>’;
mysql_query($select);
echo mysql_error();
Voilà le message affiché…
INSERT INTO objet (nom, categorie, description) VALUES (‘CHaise,’‘CHaise,’‘CHaise’)
Column count doesn’t match value count at row 1
(si jamais j’ai fais un test en mettant seulement $champ1 partout pour les données)
Merci de ton aide
INSERT INTO objet (nom, categorie, description) VALUES ('CHaise,''CHaise,''CHaise')
Il y a un problème avec ', tu n’as pas mis les virgules au bon endroit
tu dois avoir
INSERT INTO objet (nom, categorie, description) VALUES ('CHaise','CHaise','CHaise')