[Résolu] Problème d'insertion dans ma table !

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 12:32

Bonjour tout le monde :)
C'est de nouveau moi :oops:

Je continu sur la lancer de mon "script" dont j'en avais fait part ici.

J'ai fais une zone d'inscription qui permet, lorsque l'on est inscrit, d'ajouter automatiquement un membre dans la liste.
Je m'inscris pour tester, aucune erreur ne surgit. Et quand je regarde dans la liste des membres elle n'a pas changé. Je regarde dans ma table et aucune information a été transmise !
<?php
if (isset($_POST['pseudo']) AND isset($_POST['prenom']) AND isset($_POST['age']) AND isset($_POST['ville']) AND isset($_POST['msn']))
	{
		if
		($_POST['pseudo'] != NULL 
		AND $_POST['prenom'] != NULL 
		AND $_POST['age'] != NULL 
		AND $_POST['ville'] != NULL
		AND $_POST['msn'] != NULL)
		{
		// Alors on peut enregister dans la table
		// Connexion à la base de données
		mysql_connect('sql.free.fr','******','******');
		mysql_select_db('********');
		
		// On utilise la fonction PHP htmlentities pour ne pas avoir de HTML dans la BDD
        $pseudo = htmlentities ($_POST['pseudo']);
		$prenom = htmlentities ($_POST['prenom']);
		$age = htmlentities ($_POST['age']);
		$ville = htmlentities ($_POST['ville']);
		$msn = htmlentities ($_POST['msn']);
		
		// Suite à ce contrôle on peut enregistrer dans la table
		mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')");
		
		// On se déconnecte de MySQL
		mysql_close();
		}
	echo "Vous êtes maintenant inscrit !!";
	}
?>
J'ai verifié cette ligne plusieurs fois
mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')");
Mais je ne pense pas avoir fait d'erreur à moins qu'elle vient d'autre part?
Merci d'avance :o

:arrow: Je pense élaborer mon script plus tard mais comme il marche pas pour l'moment :cry:
Modifié en dernier par zitO le 29 juil. 2005, 17:08, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 12:45

J'ai verifié cette ligne plusieurs fois
mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')");
Mais je ne pense pas avoir fait d'erreur à moins qu'elle vient d'autre part?
et oui, si tu as fais gaffe coté PHP, il reste le coté MySQL... ;)
mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')") or die (mysql_error());
ceci t'affichera l'erreur SQL qui pourrait survenir

conseils :
- sortir les variables de la chaine avec l'opérateur de concaténation
$variable2 = "voici une variable : ".$variable1;
- appliquer addSlashes en plus de htmlEntities pour échapper les caractères qui peuvent poser problème, comme l'apostrophe '

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 12:51

En effet c'est une erreur de SQL.
Column count doesn't match value count at row 1
conseils :
- sortir les variables de la chaine avec l'opérateur de concaténation
$variable2 = "voici une variable : ".$variable1;
- appliquer addSlashes en plus de htmlEntities pour échapper les caractères qui peuvent poser problème, comme l'apostrophe '
:arrow: Ok j'ai pris note

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 12:54

En effet c'est une erreur de SQL.
Column count doesn't match value count at row 1
tu insères 5 valeurs, ta table possède plus ou moins de colonnes : il ne sait pas où mettre les valeurs.

solution :
- lister les colonnes concernées

Code : Tout sélectionner

INSERT INTO table (colonne1, colonne2) VALUES ('valeur1', valeur2');
=> conseillé : ta requête est à l'abris de futures modifications de la table
- insérer une valeur pour chaque colonne, même une valeur vide, ou NULL

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 13:07

solution :
- lister les colonnes concernées

Code : Tout sélectionner

INSERT INTO table (colonne1, colonne2) VALUES ('valeur1', valeur2');
=> conseillé : ta requête est à l'abris de futures modifications de la table
- insérer une valeur pour chaque colonne, même une valeur vide, ou NULL[/quote]

Je viens de le faire et en effet j'avais oublié "une colonne" => '$pays'
Je n'ai plus d'erreur mais il n'insert toujours rien dans ma table :?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 13:10

plus d'erreur MySQL ?

affiche le code SQL qui est exécuté, peut-être que quelquchose t'interpellera
$insert = "INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')";
echo 'Voici la requête qui est exécutée <br>:'.$insert.'<br>';

mysql_query($insert) or die (mysql_error());

Petit nouveau ! | 5 Messages

29 juil. 2005, 14:39

J'ai verifié cette ligne plusieurs fois
mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')");
Mais je ne pense pas avoir fait d'erreur à moins qu'elle vient d'autre part?
et oui, si tu as fais gaffe coté PHP, il reste le coté MySQL... ;)
mysql_query("INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')") or die (mysql_error());
ceci t'affichera l'erreur SQL qui pourrait survenir

conseils :
- sortir les variables de la chaine avec l'opérateur de concaténation
$variable2 = "voici une variable : ".$variable1;
- appliquer addSlashes en plus de htmlEntities pour échapper les caractères qui peuvent poser problème, comme l'apostrophe '
Les données que tu entres sont des variables, ce n'est pas du texte alors c'est ca

Code : Tout sélectionner

$insert = mysql_query('INSERT INTO membres VALUES("'.$pseudo.'", "'.$prenom.'", "'.$age.'", "'.$ville.'", "'.$msn.'")')
@@@ Charls @@@

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 15:41

plus d'erreur MySQL ?

affiche le code SQL qui est exécuté, peut-être que quelquchose t'interpellera
$insert = "INSERT INTO membres VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')";
echo 'Voici la requête qui est exécutée <br>:'.$insert.'<br>';

mysql_query($insert) or die (mysql_error());
J'ai fais comme tu as dis et voici ce qu'il me chante :o
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/free.fr/4/4/teampowa/traitement.php on line 26
mysql_query("INSERT INTO membres VALUES ("'.$pseudo.'", "'.$prenom.'", "'.$age.'", "'.$ville.'", "'.$pays.'", "'.$msn.'")");
Voici la ligne en question avec l'aide de Charls

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

29 juil. 2005, 15:42

Petit malin !
Dans le code que tu nous montre la variable $pseudo n'est pas bien concaténée.
"INSERT INTO membres VALUES ('".$pseudo."', '$prenom', '$age', '$ville', '$msn')";
echo 'Voici la requête qui est exécutée <br>:'.$insert.'<br>'; 
Modifié en dernier par mere-teresa le 29 juil. 2005, 15:43, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 15:42

tu t'es embrouillée entre quotes et guillemets

ici, tu commences ta chaine par des guillemets, ensuite arrivé à la première variable tu la fermes, puis tu mets une quote

ça ne peut pas marcher, inverse ;)

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 16:11

Voilà maintenant ca enregistre dans la BDD :)
Voici la requête qui est exécutée
:INSERT INTO membres VALUES ('', 'sNP', '132', '123', '123', '123')
Voici la fin de mon code :
		// Suite à ce contrôle on peut enregistrer dans la table
		mysql_query("INSERT INTO membres VALUES ('".$pseudo."', '".$prenom."', '".$age."', '".$ville."', '".$msn."')");
		}
		mysql_connect('sql.free.fr','****','*****');
		mysql_select_db('******');
		
		$insert = "INSERT INTO membres VALUES ('', '$pseudo', '$prenom', '$age', '$ville', '$msn')";
		echo 'Voici la requête qui est exécutée <br>:'.$insert.'<br>';
		mysql_query($insert) or die (mysql_error());
	
	}
?>
J'ai essayer de changer la fin pour qu'il marque ' Merci de vous être inscrit "Le pseudo de la personne" ! @ bientot '
Mais à chaque fois je retombe sur une erreur. J'arrive pas à le réecrire comme il faut.
Pourriez-vous m'aider?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 16:18

pourquoi exécuter la requête directement dans mysql_query, puis stocker le code (différent !!!) dans une variable pour l'afficher ?

stocke le code dans la variable, exécute et affiche ;)

édition : en fait j'ai mal vu, à quoi sert la première requête ? :shock:

dommage que tu n'ais pas suivi la méthode que je t'avais pourtant marquée comme "conseillée"
à savoir lister les colonnes :
$insert = "INSERT INTO membres (pseudo, prenom, age, ville, msn) VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')";
avec ta méthode si tu décides un jour de rajouter une colonne "sexe" avant age, ta requête est moisie

pour qu'on t'aide sur ton problème, il faudrait voir le code que tu exécutes, et l'erreur que tu as en retour... m'enfin quelque chose comme ça devrait marcher :
echo 'Merci de vous être inscrit '.pseudo.' ! @ bientot ';

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 16:25

dommage que tu n'ais pas suivi la méthode que je t'avais pourtant marquée comme "conseillée"
à savoir lister les colonnes :
$insert = "INSERT INTO membres (pseudo, prenom, age, ville, msn) VALUES ('$pseudo', '$prenom', '$age', '$ville', '$msn')";
avec ta méthode si tu décides un jour de rajouter une colonne "sexe" avant age, ta requête est moisie
Oui ca je vais le faire :) Je me suis pencher d'abord sur mon probleme.
m'enfin quelque chose comme ça devrait marcher :
echo 'Merci de vous être inscrit '.$pseudo.' ! @ bientot ';
C'est bon ca marche 8)
Merci pour tout encore

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juil. 2005, 16:27

ça roule ;)

=> [Résolu] ?

Eléphanteau du PHP | 12 Messages

29 juil. 2005, 16:29

J'vérifie que ce soit sûr à 100 % avant le [résolu] :)