Php Variable dans un INSERT INTO - Problème dans ma requête

Bonjour à tous :slight_smile:

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… :frowning:

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 :wink:

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

Ah oui merci ^^

de bête erreure :stuck_out_tongue:

Merci à tous