Mysqli & insert into
Fermé
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
-
7 nov. 2015 à 16:44
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 13 nov. 2015 à 20:49
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 13 nov. 2015 à 20:49
19 réponses
Utilisateur anonyme
Modifié par le père. le 7/11/2015 à 20:55
Modifié par le père. le 7/11/2015 à 20:55
Bonjour
(?, ?, ,? ,? ,? ,? ,?)
Tu as une virgule en trop (deux virgules qui se suivent)
De plus, le nombre de ? devrait correspondre au nombre de champs.
Et «distribution periode» avec un espace n'est pas un bon nom de champ. Tu peux l'utiliser, mais à condition de le mettre entre accents graves (Alt Gr 7)
(?, ?, ,? ,? ,? ,? ,?)
Tu as une virgule en trop (deux virgules qui se suivent)
De plus, le nombre de ? devrait correspondre au nombre de champs.
Et «distribution periode» avec un espace n'est pas un bon nom de champ. Tu peux l'utiliser, mais à condition de le mettre entre accents graves (Alt Gr 7)
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
7 nov. 2015 à 22:51
7 nov. 2015 à 22:51
J'ai corrigé, mais cela ne change rien le message d'erreur demeure...
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
7 nov. 2015 à 23:52
7 nov. 2015 à 23:52
'lut, comme dit le message d'erreur,
La syntaxe de ta requête n'étant pas erronée, l'erreur vient de la connexion à la BDD, regarde du coté de mysqli_connect_error() pour savoir ce qui cloche.
mysqli_stmt_bind_params'attend a un objet de requête préparée en tant que 1er paramètre or elle a reçu un booléen, or le seul cas dans lequel
mysqli_preparerenvoie un booléen est quand elle échoue!
La syntaxe de ta requête n'étant pas erronée, l'erreur vient de la connexion à la BDD, regarde du coté de mysqli_connect_error() pour savoir ce qui cloche.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
8 nov. 2015 à 00:28
8 nov. 2015 à 00:28
Waouh ! les choses se compliquent...
Voila mon script en intro de page :
Et ma (modeste) classe de connection :
Voila mon script en intro de page :
<?php ini_set('display_errors', true); error_reporting(E_ALL); require_once('../../koneksyon/konfig.php'); ?>
Et ma (modeste) classe de connection :
<?php //On demarre les sessions session_start(); $bdd = mysqli_connect('localhost', '*****', '*****', '*****'); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
8 nov. 2015 à 01:26
8 nov. 2015 à 01:26
On peut revoir la requête corrigée avant de dire qu'elle n'est pas erronée ?
D'ailleurs, même si la syntaxe est correcte, il peut y avoir une erreur dans un nom de table ou de champ.
mysqli et / ou mysqli_connect sont-ils à l'intérieur de fonctions ? Si oui, il faudrait déclarer global $bdd pour que la variable soit bien la même dans les deux cas.
D'ailleurs, même si la syntaxe est correcte, il peut y avoir une erreur dans un nom de table ou de champ.
mysqli et / ou mysqli_connect sont-ils à l'intérieur de fonctions ? Si oui, il faudrait déclarer global $bdd pour que la variable soit bien la même dans les deux cas.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Modifié par maxireussite le 8/11/2015 à 04:31
Modifié par maxireussite le 8/11/2015 à 04:31
Requête corrigée :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
Utilisateur anonyme
8 nov. 2015 à 07:45
8 nov. 2015 à 07:45
Le message d'erreur est-il toujours le même qu'avant ?
Car tu as une erreur dans ton mysqli_stmt_bind_param.
extrait de la doc :
« Le nombre de variables et la longueur de la chaîne de caractères types doivent correspondre aux paramètres de la requête. »
Toi, ta chaîne types ("sis") n'a que 3 caractères, alors que tu as 7 paramètres.
Car tu as une erreur dans ton mysqli_stmt_bind_param.
extrait de la doc :
« Le nombre de variables et la longueur de la chaîne de caractères types doivent correspondre aux paramètres de la requête. »
Toi, ta chaîne types ("sis") n'a que 3 caractères, alors que tu as 7 paramètres.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Modifié par maxireussite le 8/11/2015 à 18:13
Modifié par maxireussite le 8/11/2015 à 18:13
Désolé, v'là la bonne requête :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
Utilisateur anonyme
8 nov. 2015 à 22:20
8 nov. 2015 à 22:20
1 - je ne vois pas la différence entre cette dernière requête et la précédente
2 - je t'avais demandé si tu avais toujours le même message d'erreur, peux-tu répondre à cette question ?
3 - je t'ai fait remarquer une erreur sur le paramètre type, tu n'en parles pas et ne l'as pas corrigé. Est-ce que tu as lu ce que j'avais écrit ?
2 - je t'avais demandé si tu avais toujours le même message d'erreur, peux-tu répondre à cette question ?
3 - je t'ai fait remarquer une erreur sur le paramètre type, tu n'en parles pas et ne l'as pas corrigé. Est-ce que tu as lu ce que j'avais écrit ?
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
8 nov. 2015 à 22:54
8 nov. 2015 à 22:54
Bjr "le père", je te remercie de m'aider, mais saches que tu t'adresses à un Nul, un vrai.
Même pas foutu de te donner la bonne requête :) qui est la suivante :
Le message d'erreur est la suivante :
Même pas foutu de te donner la bonne requête :) qui est la suivante :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)'); mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email); mysqli_stmt_execute($req_pre);
Le message d'erreur est la suivante :
Utilisateur anonyme
8 nov. 2015 à 23:59
8 nov. 2015 à 23:59
C'est incroyable comme tu ne tiens pas compte de ce que j'écris. Tu as toujours la même erreur sur le paramètre types, tu n'en parles toujours pas plus, c'est encore comme si je n'avais rien écrit.
Un progrès quand même : tu as copié le message d'erreur, et c'est toujours le même qu'au départ.
Ce qui m'étonne c'est qu'il n'y a pas de message d'erreur avant celui-ci, il devrait y en avoir un sur le mysqli_prepare. Peux-tu ajouter
après la ligne du mysqli_prepare et voir si un message d'erreur s'affiche ?
Un progrès quand même : tu as copié le message d'erreur, et c'est toujours le même qu'au départ.
Ce qui m'étonne c'est qu'il n'y a pas de message d'erreur avant celui-ci, il devrait y en avoir un sur le mysqli_prepare. Peux-tu ajouter
echo mysqli_error($bdd);
après la ligne du mysqli_prepare et voir si un message d'erreur s'affiche ?
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
9 nov. 2015 à 01:28
9 nov. 2015 à 01:28
Vraiment désolé, mais "paramètres type" je ne sais pas ce que c'est...
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page :
Voir le script d'intro dans le message n° 4 ci-dessus.
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? ,? ,? ,?)' at line 2
Voir le script d'intro dans le message n° 4 ci-dessus.
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 nov. 2015 à 02:02
9 nov. 2015 à 02:02
Bonjour,
<blocik>
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page
</block>
Non.. le message d'erreur parle d'un souci de ligne dans une syntaxe SQL (donc dans une requête) et non du numéro de ligne dans ton code source...
Le souci se situerait donc dans cette ligne de code :
As tu remarqué, par exemple... que tu avais deux virgules qui se suivent sans "?" à l'intérieur ??
<blocik>
Voici le message d'erreur qui s'affiche, et me renvoie à la ligne 2 de connexion en intro de page
</block>
Non.. le message d'erreur parle d'un souci de ligne dans une syntaxe SQL (donc dans une requête) et non du numéro de ligne dans ton code source...
Le souci se situerait donc dans cette ligne de code :
$req_pre = mysqli_prepare($bdd, 'INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?, ?, ?, ,? ,? ,? ,?)');
As tu remarqué, par exemple... que tu avais deux virgules qui se suivent sans "?" à l'intérieur ??
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
9 nov. 2015 à 02:22
9 nov. 2015 à 02:22
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
Modifié par jordane45 le 9/11/2015 à 02:37
Modifié par jordane45 le 9/11/2015 à 02:37
Il faut absolument que tu ajoutes du "debug" à tes instructions pour déterminer d'où vient le souci..
Essayes donc ceci :
Au passage... la première variable de l'array ( "sis" ) .. est sensée correspondre aux types de valeurs que tu vas passer dans ta requête.
Hors... je vois 8 variables... et seulement 3 lettres.....
Je pense que tu devrais refaire un tour ici pour comprendre : https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
Cordialement,
Jordane
Essayes donc ceci :
$sql = "INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?,?,?,?,?,?,?,?)"; $array_params = array( "sis" , $action , $genre , $age , $ville_id , $distribution , $periode , $email ); $req_pre = mysqli_prepare($bdd,$sql) or die(mysqli_error($bdd)); mysqli_stmt_bind_param($req_pre, join(',',$array_params)) or die(mysqli_error($bdd)); mysqli_stmt_execute($req_pre)or die(mysqli_error($bdd));
Au passage... la première variable de l'array ( "sis" ) .. est sensée correspondre aux types de valeurs que tu vas passer dans ta requête.
Hors... je vois 8 variables... et seulement 3 lettres.....
Je pense que tu devrais refaire un tour ici pour comprendre : https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
Cordialement,
Jordane
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Modifié par maxireussite le 9/11/2015 à 03:32
Modifié par maxireussite le 9/11/2015 à 03:32
@Jordane 45
Avec ton script, je n'ai plus les tableaux d'erreur, mais ce message :
Unknown column 'ville_id' in 'field list'
MAIS : le reste de ma page ne s'affiche pas...
ET la base de données et la table eg_anonyme n'enregistre RIEN...
A propos de "SIS"
Dois mettre : SSIISSS pour
Caractères - champs - réponse possible
s - action -agir
s - genre - h
i - age - 59
i - ville_id - 12
s - distribution - oui
s - période - mai-juin
s - email - omrce@agir.com
Avec ton script, je n'ai plus les tableaux d'erreur, mais ce message :
Unknown column 'ville_id' in 'field list'
MAIS : le reste de ma page ne s'affiche pas...
ET la base de données et la table eg_anonyme n'enregistre RIEN...
A propos de "SIS"
Dois mettre : SSIISSS pour
Caractères - champs - réponse possible
s - action -agir
s - genre - h
i - age - 59
i - ville_id - 12
s - distribution - oui
s - période - mai-juin
s - email - omrce@agir.com
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 nov. 2015 à 10:42
9 nov. 2015 à 10:42
Normal que rien ne s'affiche après le message d'erreur. .. je t'ai fait mettre des DIE....
et pour ce qui est du message d'erreur. .il est assez clair non ??!!.. tu n'as aucune colonne dans ta table qui se nomme ville_id.
et pour ce qui est du message d'erreur. .il est assez clair non ??!!.. tu n'as aucune colonne dans ta table qui se nomme ville_id.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
9 nov. 2015 à 12:31
9 nov. 2015 à 12:31
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 nov. 2015 à 12:51
9 nov. 2015 à 12:51
Tu peux poster ton code ?
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
9 nov. 2015 à 16:58
9 nov. 2015 à 16:58
$sql = "INSERT INTO eg_anonyme (action, genre, age, ville_id, distribution, periode, email) VALUES (?,?,?,?,?,?,?)"; $array_params = array("ssiisss" , $action , $genre , $age , $ville_id , $distribution , $periode , $email); $req_pre = mysqli_prepare($bdd,$sql) or die(mysqli_error($bdd)); mysqli_stmt_bind_param($req_pre, $array_params) or die(mysqli_error($bdd)); mysqli_stmt_execute($req_pre)or die(mysqli_error($bdd));
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 nov. 2015 à 17:49
9 nov. 2015 à 17:49
C'est bien ce qui me semblait. ...
compare ton code avec celui quie j'ai posté sur le forum...
je n'ai pas laissé l'Array tel quel.
compare ton code avec celui quie j'ai posté sur le forum...
je n'ai pas laissé l'Array tel quel.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Modifié par maxireussite le 9/11/2015 à 18:18
Modifié par maxireussite le 9/11/2015 à 18:18
J'imagine que tu veux parler de "sis" ?
Si je le remet tel quel, cela ne change pas, j'ai tjrs le message d'erreur...
Si je le remet tel quel, cela ne change pas, j'ai tjrs le message d'erreur...
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 nov. 2015 à 18:26
9 nov. 2015 à 18:26
J'imagine que tu veux parler de "sis" ?
Non
Regardes ce que tu as écris à la ligne :
mysqli_stmt_bind_param($req_pre, $array_params) or die(mysqli_error($bdd));
Et moi :
mysqli_stmt_bind_param($req_pre, join(',',$array_params)) or die(mysqli_error($bdd));
Utilisateur anonyme
>
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
9 nov. 2015 à 18:31
9 nov. 2015 à 18:31
Bonjour
join(',',$array_params) ne fait pas la même chose que d'écrire n paramètres séparés par des virgules. join génère une seule chaîne.
En fait, l'écriture originale
join(',',$array_params) ne fait pas la même chose que d'écrire n paramètres séparés par des virgules. join génère une seule chaîne.
En fait, l'écriture originale
mysqli_stmt_bind_param($req_pre, "sis", $action, $genre, $age, $ville_id, $distribution, $periode, $email);, après correction du "sis", était la bonne.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
9 nov. 2015 à 18:59
9 nov. 2015 à 18:59
Le dénouement approche et j'espère que le héros ne meurt pas à la fin du film...
@Jordane45, en procédant à la correction le message d'erreur demeure...
@le père, en faisant correction, c-à-d en revenant à l'original j'ai les messages ci-dessous...
Corriger le SIS est-ce que cela veut dire le remplacer par "ssiisss" ?
@Jordane45, en procédant à la correction le message d'erreur demeure...
@le père, en faisant correction, c-à-d en revenant à l'original j'ai les messages ci-dessous...
Corriger le SIS est-ce que cela veut dire le remplacer par "ssiisss" ?
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
13 nov. 2015 à 20:49
13 nov. 2015 à 20:49
Eh ben, on dirait bien que le héros meurt à la fin du film.
je vais être obligé de revenir à MysQl, au moins là, mes script fonctionnent...
Jusqu'ici tout va bien ...
je vais être obligé de revenir à MysQl, au moins là, mes script fonctionnent...
Jusqu'ici tout va bien ...