MySQL + PHP problème d'insertion, renvoi page

Résolu/Fermé
Hip - Modifié par jordane45 le 21/04/2015 à 11:05
 Hip - 21 avril 2015 à 14:03
Bonjour,

Je suis en train de faire une validation de formulaire, cependant, je ne comprends pas les erreurs que j'ai put faire...

 
if($pseudoc=='ok' && $mailc=='ok' && $mailvc=='ok' && $mdpvc=='ok' && $date_naissance=='ok'){
  $insertion = "INSERT INTO membres VALUES(NULL,  '".$pseudo."',
             '".$prenom."',
             '".$nom."',
             '".$mail."',
             '".md5($mdp)."',
             '".$date_naissance."',
             ".time().",". 0 .")";
             
             
  mysqli_query ($base,$insertion) or die ('Erreur SQL !'.$insertion.'<br />'.mysql_error());          
  mysql_close();           
  header('Location: ../index.php');
  exit();
 }
 
 else{
  if($pseudoc=='exists'){
   $message = "Ce pseudo est déjà utilisé, merci d'en choisir un autre <a href=\"./inscription.php\">Retour</a>";
   echo "<script type='text/javascript'>alert('$message');</script>";
  }
 }



Donc la, si les termes du formulaire sont vérifiés, ont devrait les ajouter à la BD, puis renvoyer sur la page index.php.
Et si ce n'est pas le cas, (j'ai fais que pour le pseudo pour le moment), on affiche une alert avec un lien pour retourner sur la page d'inscription.

Cependant, quand je rentre des informations VALIDE sur le formulaire, rien ne se passe...
Et quand j'entre un pseudo déjà dans la base de données, rien ne se passe non plus...

Avant, j'avais tourné mon code d'une autre façon, et l'ajout dans la BDD fonctionnait. Désormais plus rien ne marche alors que ça devrait!

Je commence à désespéré, merci de votre future aide précieuse !

Cordialement

Greg

EDIT : Ajout du langage dans les balises de code.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

A voir également:

3 réponses

Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 71
Modifié par Miimidedel le 21/04/2015 à 10:23
Hello,

As tu regardé les logs de ton serveur ?

As tu fait un
var_dump('QQ chose');
dans chacune des étapes ? (débuggage rapide et sale mais pour ton cas je ne vais pas te faire installer xdebug..)

As tu regardé la console et les erreurs qu'elle retourne ? (FireBug pour Firefox)
0
var_dump va me retourner les types et contenu des variables.. Comment puis-je l'utiliser pour résoudre mon problème?

Pareil, les logs serveur, je peux les trouver où (j'utilise WampServer sour Windows)

Merci
0
Merci d'avoir répondu,

Et bien je n'ai pas fait de logs non ni de var_dump (je ne sais pas ce que c'est). La console du navigateur ne retourne rien, d'où mon interrogation..

Peux tu m'aider pour la procédure pour les logs serveur et/ou var_dump?

Merci
0
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 71
21 avril 2015 à 10:52
D'accord !

Déjà tu dev sur quel environnement ? Un xamp ?

Si c'est un wamp tu auras les erreurs du serveur ici : C:\wamp\logs\apache_error.log

Pour le var_dump c'est très simple, ça affiche qq chose en brut (texte, variable, tableau, etc..). Ca te permet surtout de savoir où l'interprétation passe.

Dans ton code déjà je mettrai
un var_dump('du texte'); 
après chaque if et else. Comme ça on saura si ça passe dans ton 1er if ou dans ton else; puis si ça passe dans le second.

Si tu n'as rien je dirais que ça passe dans ton else puis dans le 2eme else (que tu n'as pas défini).

Ca donnerait quelque chose comme ça :

if($pseudoc=='ok' && $mailc=='ok' && $mailvc=='ok' && $mdpvc=='ok' && $date_naissance=='ok'){
var_dump('Passage dans 1er if');
$insertion = "INSERT INTO membres VALUES(NULL, '".$pseudo."',
'".$prenom."',
'".$nom."',
'".$mail."',
'".md5($mdp)."',
'".$date_naissance."',
".time().",". 0 .")";


mysqli_query ($base,$insertion) or die ('Erreur SQL !'.$insertion.'<br />'.mysql_error());
mysql_close();
header('Location: ../index.php');
exit();
}

else{
var_dump('Passage dans 1er else');
if($pseudoc=='exists'){
var_dump('Passage dans 2eme if');
$message = "Ce pseudo est déjà utilisé, merci d'en choisir un autre <a href=\"./inscription.php\">Retour</a>";
echo "<script type='text/javascript'>alert('$message');</script>";
}

var_dump('Passage dans 2eme else');
}
0
Yeah! Merci j'ai trouvé mon erreur grâce à ca!, j'avais en fait une variable date_naissance et une variable date_naissancec, il fallait que j'utilise la premiere et j'utilisais la seconde.. d'où l'erreur..

J'aurais une autre question.

J'ai une fonction checkpseudo($pseudo) et checkmail($mail)
et je voudrais qu'elle verifie que le mail ou le pseudo n'existe pas deja dans la BDD.

Comment vais-je passer une requete SQL dans la fonction?

Merci!!
0
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 71
Modifié par Miimidedel le 21/04/2015 à 11:35
Super.

"Passer une requête SQL dans la fonction" ? Je ne comprends pas vraiment..

Pour ta méthode checkPseudo($pseudo) tu y fais simplement une requête
SELECT pseudo FROM users WHERE pseudo LIKE '$pseudo'
(à adapter correctement avec la concaténation).

Si le résultat, avec https://www.php.net/manual/fr/mysqli-result.fetch-assoc.php n'est pas un tableau vide alors il y a déjà un pseudo qui existe. Donc checkPseudo renverra false.

Un
count($result) 
suffira.

EDIT :
Tu peux même faire plus simple un
SELECT count(*)...
!

Et pas de fetch assoc par contre

(Désolée, je suis passée au Framework et aux ORM, le PHP pur est loin)
0
Je suis d'accord avec la méthode pour compter le nombre de résultat, c'est ce que j'avais en tête pour faire cette fonction, ce que j'aimerai savoir, c'est comment appeler la requête, je veux dire.. je ne vais pas écrire directement "Select ....", quelle est la syntaxe?
0
Miimidedel Messages postés 345 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 5 juin 2019 71 > Hip
Modifié par Miimidedel le 21/04/2015 à 11:44
Un petit tour sur la doc et :

/* Requête "Select" retourne un jeu de résultats */
if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
    printf("Select a retourné %d lignes.\n", mysqli_num_rows($result));

    /* Libération du jeu de résultats */
    mysqli_free_result($result);
}


Ici on a "s'il y a un résultat dans $result alors tu comptes les lignes" donc fais attention au if.

En gros tu aurais :
if ($result = mysqli_query($link, "SELECT pseudo FROM Users WHERE pseudo LIKE '".$pseudo."'")) {
mysqli_free_result($result);
    return false;

else{
return true; // Pas de correspondance : verif OK
}



Et tu arranges pour retourner true ou false en fonction de
mysqli_num_rows($result)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
21 avril 2015 à 11:09
Bonjour,

Premier PB ... tu utilises mysql_close(); .... alors que tu sembles utiliser l'extension mysqli_*

Ensuite... Fais donc un ECHO de ta requête d'insertion et testes la directement dans la BDD pour voir si elle fonctionne.

NB : Il est conseillé de nommer les champs qu'on insert ...
INSERT INTO table ( champ1,champ2,...) VALUES ('valeur1','valeur2')


Par contre tu nous dis : Rien ne se passe... j'en déduis donc qu'aucun message n'apparait .... Le souci se trouve donc peut être ailleurs que dans le code montré....
Dans le formulaire peut être ... ou dans tes codes de vérification...
L'idéal serait de nous montrer l'ensemble de ton code !


PS: Penses à mettre le langage dans les balises de code. ça rend sa lecture plus facile.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
Merci d('avoir répondu, le problème 'insertion est resolu, il etait du a une erreur de frappe dans une variable -__-.

J'aurais une autre question.

J'ai une fonction checkpseudo($pseudo) et checkmail($mail)
et je voudrais qu'elle verifie que le mail ou le pseudo n'existe pas deja dans la BDD.

Comment vais-je passer une requete SQL dans la fonction?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Hip
21 avril 2015 à 12:43
Même remarque que précédemment... sans voir le code... impossible de t'aider

Par contre.... nouvelle question = NOUVELLE DISCUSSION !
Cela permet à d'autres de trouver leur réponses dans le cas où ils auraient le même souci.
Donc .. mets cette question en résolu .. et ouvre en une autre.
0