Page 1 sur 2

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

Posté : 29 juil. 2005, 12:32
par zitO
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:

Re: Problème d'insertion dans ma table !

Posté : 29 juil. 2005, 12:45
par ouckileou
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 '

Posté : 29 juil. 2005, 12:51
par zitO
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

Posté : 29 juil. 2005, 12:54
par ouckileou
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

Posté : 29 juil. 2005, 13:07
par zitO
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 :?

Posté : 29 juil. 2005, 13:10
par ouckileou
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());

Re: Problème d'insertion dans ma table !

Posté : 29 juil. 2005, 14:39
par Charls
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.'")')

Posté : 29 juil. 2005, 15:41
par zitO
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

Posté : 29 juil. 2005, 15:42
par mere-teresa
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>'; 

Posté : 29 juil. 2005, 15:42
par ouckileou
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 ;)

Posté : 29 juil. 2005, 16:11
par zitO
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?

Posté : 29 juil. 2005, 16:18
par ouckileou
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 ';

Posté : 29 juil. 2005, 16:25
par zitO
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

Posté : 29 juil. 2005, 16:27
par ouckileou
ça roule ;)

=> [Résolu] ?

Posté : 29 juil. 2005, 16:29
par zitO
J'vérifie que ce soit sûr à 100 % avant le [résolu] :)