Problème avec une variable.

Résolu
Signaler
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008
-
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006
-
Bonjour,

J'ai un soucis avec mon code (pas étonant sur ce forum ^^).
J'ai créé un code pour enregistrer 4 valeurs dans 4 variables d'une table... La première est une variable "id", la valeur s'enregistre donc automatiquement.
2 autres(pseudo, et texte) s'enregistrent via un formulaire.
la dernière (celle qui pose problème) s'enregistre avec une variable noté comme celà : $id2="$id2";
(quand je fais un echo de $id2, la valeur s'affiche...)

Par contre après l'enregistrement, dans la table, la valeur de la variable id2 ne s'affiche pas...

Donc je suppose que c'est là que ça pose problème :

$sql = "INSERT INTO comment2_hxc VALUES('','$id2','$pseudo','$texte')";

(Je ne me suis pas planté dans l'odre des variables)

Merci d'avance.

Nico.

21 réponses

Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Je viens de résoudre le problème en le contournant !

Plutôt que de vouloir enregistrer directement la valeur dans la table, j'ai ajouter ca dans la balise form :

<?
echo "";
?>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
heu, on peut en avoir un peu plus ?
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

voilà :

<?
$id2="$id2";
?>
<?
if(empty($texte))
{
echo 'Attention, tous les champs sont obligatoire !';
}


// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// connexion à la base
$db = mysql_connect('sql6', '****', '*****') or die('Erreur de connexion '.mysql_error());
// sélection de la base


mysql_select_db('*****',$db) or die('Erreur de selection '.mysql_error());

// on ecris la requete sql
$sql = "INSERT INTO comment2_hxc VALUES('','".$id2."','$pseudo','$texte')";
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());


// on affiche le résultat pour le visiteur
echo 'Vos infos on été ajoutées.';


mysql_close(); // on ferme la connexion
}
?>
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

voilà :

<?
$id2="$id2";
?>
<?
if(empty($texte))
{
echo 'Attention, tous les champs sont obligatoire !';
}


// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// connexion à la base
$db = mysql_connect('sql6', '****', '*****') or die('Erreur de connexion '.mysql_error());
// sélection de la base


mysql_select_db('*****',$db) or die('Erreur de selection '.mysql_error());

// on ecris la requete sql
$sql = "INSERT INTO comment2_hxc VALUES('','".$id2."','$pseudo','$texte')";
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());


// on affiche le résultat pour le visiteur
echo 'Vos infos on été ajoutées.';


mysql_close(); // on ferme la connexion
}
?>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Tout m'a l'air bon.... sauf un truc qui me choque :

$id2 = "$id2";

La faut que tu m'expliquer pourquoi tu assignes sa propre valeur à une variable :)



Sinon... vérifie que ton champ correspondant à id2 soit bien du bon type (INT c'est s'es un nombre entier en l'occurence)

Pas d'autres idées ;)
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Bah en fait je récupère la valeur d'une adresse ("comment.php?id2=blabla" par exemple) et en effet ca sert à rien ^^
pour ce qui est du type varchar(255) ce qui est donc correct il me semble dans mon cas...
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Si tu récupère la variable d'une url il faut utiliser $_GET["id"]
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

$_GET["id2"] dans ton cas (erf je suis pas réveillé =_= )
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

J'ai donc mis ça :

$sql = "INSERT INTO comment2_hxc VALUES('','".$_GET["id2"]."','$pseudo','$texte')";

Mais ca ne marche tjrs pas...
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Si ça génère vraiment aucune erreur, et que c'est juste un champ qui ne
se remplis pas.... Affiche la structure de ta base pour voir...
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Ca fait comme un champ qui ne se remplis pas...


Voici la structure.


CREATE TABLE `bio_hxc` (
`id` int(11) NOT NULL auto_increment,
`id2` varchar(255) NOT NULL default '',
`pseudo` varchar(255) NOT NULL default '',
`texte` varchar (255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id_2` (`id`),
KEY `id` (`id`)
) TYPE=MyISAM
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

$sql = "INSERT INTO comment2_hxc ......
CREATE TABLE `bio_hxc` .......
C'est normal que les tables aient pas le même nom?
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

ah zut !

erreur de frappe mais si le code est bien rentré avec comment2_hxc
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Plus personnes n'a d'idée ?
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Montre toujours la dernière version de ton code et la structure de la bonne table
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

La structure :

CREATE TABLE `comment2_hxc` (
`id` int(11) NOT NULL auto_increment,
`id2` varchar(255) NOT NULL default '',
`pseudo` varchar(255) NOT NULL default '',
`texte` varchar (255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id_2` (`id`),
KEY `id` (`id`)
) TYPE=MyISAM

Le code :

<?
if(empty($texte))
{
echo 'Attention, tous les champs sont obligatoire !';
}


// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// connexion à la base
$db = mysql_connect('sql6', '****', '****') or die('Erreur de connexion '.mysql_error());
// sélection de la base


mysql_select_db('****',$db) or die('Erreur de selection '.mysql_error());

// on ecris la requete sql
$sql = "INSERT INTO comment2_hxc VALUES('','".$_GET["id2"]."','$pseudo','$texte')";
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error());


// on affiche le résultat pour le visiteur
echo 'Vos infos on été ajoutées.';


mysql_close(); // on ferme la connexion
}
?>
Voilà

Sinon, se aucune erreur n'est trouvé... Se serait possible d'avoir un petit exemple de code pr ce que j'éssaie de faire (enregistrer la valeur de l'url dans SQL) que je puisse tester ?
Merci.
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Première chose que je remarque et qui a l'air faux

UNIQUE KEY `id_2` (`id`),

devrait être

UNIQUE KEY `id_2` (`id2`),



Je ne sais pas si ça a une influence sur le bug que tu décrit, mais en
tout cas, si tu veux changer ça, va dans l'interface phpmyadmin,
supprime l'index en question et recrée le en cliquant sur l'icone
"unique" sur la ligne correspondant à ce champ



Mise à part ça je ne note aucune erreur de syntaxe, d'ailleurs ton script ne renvoi aucune erreur.



Donc procédons par élimination :

Si php ne renvoi pas d'erreur, il n'y a pas d'erreur de syntaxe

Si mysql ne renvoi pas d'erreur, la requête est correcte et executée

Regardons donc cette requête de plus près

$sql = "INSERT INTO comment2_hxc VALUES('','".$_GET["id2"]."','$pseudo','$texte')";



D'après les symptomes décrits, tout s'enregistre sauf le champ id2. Or la valeure du champ id2 devrait être celle de $_GET["id2"].

D'où proviens $_GET["id2"] ? De ce que l'on appelle la QUERY_STRING, qui se trouve être tout ce qu'il y a derrière un ? dans une url.

Dans ce cas, la valeur de $_GET["id2"] devrais être ce qu'il y a après ?id2=

S'il n'y a rien, alors $_GET["id2"] undefined, et php retournera une erreur s'il est configurer pour retourner toutes les erreurs (dans php.ini, error_reporting = E_ALL)



Bilan :

1/ Régle le problème d'index dans la base de donnée

2/ Vérifie bien que $_GET["id2"] soit défini

3/ Vérifie bien que php renvois tous les types d'erreurs



Remarque : normalement, le fait d'indexer id2 en UNIQUE devrait générer une erreur si tu entre deux enregistrement avec la même valeur de id2. Or comme tu dis qu'il n'enregistre jamais cette valeur, il crée donc des enregistrement avec les mêmes valeurs de id2 (c'est-à-dire rien). Ça prouverait que ton index est mal fait =)
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Bon alors j'ai testé... j'ai modifié l'index et j'ai eu en effet un petit message d'erreur comme quoi j'avais les mêmes valeurs pour ID2.

Du coup j'ai refais la table comment2_hxc comme ça :

CREATE TABLE comment2_hxc (id INT not null AUTO_INCREMENT, valeur VARCHAR (50) not null , pseudo VARCHAR (50) not null , texte VARCHAR (255) not null , PRIMARY KEY (id))

Seulement j'ai toujours le même problème... Personne ne pourrai créer un exemple pour voir si ça marche et me l'envoyer que je teste si ca prend pas trop de temps ?
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

t'as vérifié, le 2/ et le 3/ ?
Messages postés
17
Date d'inscription
dimanche 2 janvier 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Oui...