JeuWeb - Crée ton jeu par navigateur
problème de requête - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : problème de requête (/showthread.php?tid=1935)

Pages : 1 2 3


problème de requête - Reaven - 29-10-2007

Slt j'ai un problème dans ma page inscription2.php c'est elle qui a tout le code php pour enregistrer les infos dans la bdd.

voilà le code php:

Code PHP :
<?php


//------------------------------------------------
/*FORMULAIRE D'INSCRIPTION
Envoi des donnés dans la table "comptes_provisoirs" si les conditions sont remplies.
*/
//------------------------------------------------

//variable initialisée à zéro pour tester les conditions.
$nb_faux= 0;

if(isset(
$_POST['nom_empire']) && isset($_POST['nom_seigneur']) && isset($_POST['nom_mage']) && isset($_POST['mot_de_passe']) && isset($_POST['confirm_passe']) && isset($_POST['email'])
&& isset(
$_POST['race']) && isset($_POST['background']))
{
$login= $_POST['nom_seigneur'];
$empire= $_POST['nom_empire'];
$mage= $_POST['nom_mage'];
$mot_de_passe= $_POST['mot_de_passe'];
$confirm_passe= $_POST['confirm_passe'];
$email= $_POST['email'];
$race= $_POST['race'];
$background= $_POST['background'];

$background= stripslashes($_POST['background']);
$background= nl2br($_POST['background']);

//incrémenter la variable $nb_faux si les champs du formulaire sont vides
if(empty($_POST['nom_seigneur']) || empty($_POST['nom_empire']) || empty($_POST['nom_mage']) || empty($_POST['mot_de_passe']) || empty($_POST['confirm_passe']) || empty($_POST['email'])
|| empty(
$_POST['race']) || empty($_POST['background']))
{
$reponse= '<p>Il reste des champs non remplis</p><br/>';
$nb_faux ++;
}

//incrémenter la variable $nb_faux si des caractères ne sont pas autorisés pour le login
if (!preg_match('#^(\w{4,15})$#', $login))
{
$reponse= '<p>Il y a des caractères non autorisés dans le nom de votre seigneur ou celui-ci est trop court</p><br/>';
$nb_faux ++;
}

if (!
preg_match('#^(\w{4,15})$#', $empire))
{
$reponse= '<p>Il y a des caractères non autorisés dans le nom de votre empire ou celui-ci est trop court</p><br/>';
$nb_faux ++;
}

if (!
preg_match('#^(\w{4,15})$#', $mage))
{
$reponse= '<p>Il y a des caractères non autorisés dans le nom de votre mage ou celui-ci est trop court</p><br/>';
$nb_faux ++;
}

//incrémenter la variable $nb_faux si des caractères ne sont pas autorisés pour le mot de passe et sa confirmation
if (!preg_match('#(\w{4,10})$#', $mot_de_passe) or !preg_match('#(\w{4,10})$#', $confirm_passe))
{
$reponse= '<p>Il y a des caractères non autorisés dans votre mot de passe ou celui-ci est trop court</p><br/>';
$nb_faux ++;
}

//incrémenter la variable $nb_faux si le mot de passe et sa confirmation ne sont pas identiques
if($mot_de_passe != $confirm_passe)
{
$reponse= '<p>Vos mot de passe ne sont pas identiques</p><br/>';
$nb_faux ++;
}

//incrémenter la variable $nb_faux si le login existe déjà dans la base de donnée
if($nb_faux >= 0)
{
include(
"config.php");
$connexion= mysql_connect($hote,$utilisateur,$mdp) or die('<br/>Connexion au serveur impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$choix_db= mysql_select_db($data_base) or die('<br/>seléction de la base de donnée echouée.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$requete= "SELECT nom_seigneur FROM $table_cd WHERE login='$login'";
$resultat= mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$ligne= mysql_fetch_array($resultat);

if(
$login == $ligne['nom_seigneur'])
{
$reponse= '<p>Ce login est déjà utilisé par un autre membre</p><br/>';
$nb_faux ++;
}
}

//incrémenter la variable $nb_faux si la case à cocher "conditions" est null
if(isset($_POST['conditions'])== null)
{
$reponse= '<p>Vous n\'avez pas accepté les conditions</p><br/>';
$nb_faux ++;
}

//connexion à la base de donnée s'il n'y a pas d'erreurs (champs oubliés, expressions régulières, vérification du mot de passe, vérification du login)
if($nb_faux == 0)
{
include(
"config.php");

$clef= "0123456789";
$clef= rand();

$connexion= mysql_connect($hote,$utilisateur,$mdp) or die('<br/>Connexion au serveur impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$choix_db= mysql_select_db($data_base) or die('<br/>seléction de la base de donnée echouée.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$requete= "INSERT INTO $table_cp VALUES('','$login','$mage','$empire','$mot_de_passe','$email','$race','$background','$clef')";
$resultat= mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');

mysql_close($connexion);

//envoyer le mail si la requête à fonctionnée
if($resultat == true)
{
$reponse= '<p>Vous allez recevoir d\'ici quelques minutes un mail contenant le lien de validation<br/>
afin de finaliser votre inscription</p><br/>'
;


$mail_destinataire= $_POST['email'];
$sujet= "Endaël, validation de votre inscription";
$message= "Voici un rappel de vos identifiants:<br/>
Seigneur:
$login<br/>
Empire:
$empire<br/>
Mage:
$mage<br/>
Mot de passe:
$mot_de_passe<br/>
<br/>
Vous de encore valider votre inscription avant de jouer. Cliquez sur le lien de validation ci-dessous:<br/>
http://www.endael.ovh.org?&amp;login=
$login&amp;clef=$clef<br/>
<br/>
Le Webmaster.<br/>
http://www.endael.ovh.org."
;
$head= "Bonjour, $login";
mail($mail_destinataire,$sujet,$message,$head);
}
}
}

//--------------------------------------------------------------------
// VALIDATION DU COMPTE APRES INSCRIPTION
//
// Verification du lien de validation via mail :
// 1 - connexion si la clef et le login existe dans la table "comptes_provisoirs"
// 2 - transfert des données dans la table "comptes_definitifs"
// 3 - suppression des données dans la table "comptes_provisoirs"
//--------------------------------------------------------------------

if(isset($_GET['nom_seigneur']) && isset($_GET['clef']))
{
$login= $_GET['nom_seigneur'];
$clef= $_GET['clef'];

include(
"config.php");

// requete chercher les données lorsque le champs login et le champs clef existent dans la table "comptes_provisoirs"
$connexion= mysql_connect($hote,$utilisateur,$mdp) or die('<br/>Connexion au serveur impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$choix_db= mysql_select_db($data_base) or die('<br/>seléction de la base de donnée echouée.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$requete= "SELECT nom_seigneur, nom_empire, nom_mage, mot_de_passe, email, race, background FROM $table_cp WHERE login='$login' AND clef='$clef'";
$resultat= mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');

// affecter les infos utilisateurs si la clef et le pseudo existent dans la table "comptes_provisoirs"
if ($donnees = mysql_fetch_array($resultat))
{
$login= $donnees['nom_seigneur'];
$empire= $donnees['nom_empire'];
$mage= $donnees['nom_mage'];
$mot_de_passe= $donnees['mot_de_passe'];
$email= $donnees['email'];
$race= $donnees['race'];
$background= $donnees['background'];

// requette transferer les données de la table "comptes_provisoirs" à la table "comptes_definitifs"
$requete= "INSERT INTO $table_cd VALUES('','$login','$mage','$empire''$mot_de_passe','$email','$race','$background')";
$resultat= mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/><a href="contact.php">Contactez</a> le Webmaster si l\'erreur n\'est pas résolue.<br/>');
// requette suppression des données provisoir de la table "comptes_definitifs"
$requete= "DELETE FROM $table_cp WHERE clef='$clef' AND login='$login'";
$resultat= mysql_query($requete) or die('<br/>Exécution de la requête impossible.<br/><a href="contact.php">Contactez</a> le Webmaster si l\'erreur n\'est pas résolue.<br/>');
mysql_close($connexion);

$reponse= '<p>Votre inscription a été validée. Vous pouvez désormais jouer en vous loggant avec<br/>
vos iddentifiants</p><br/>'
;
}
else
{
$reponse= '<p>Votre inscription est déjà validée ou le lien de validation est incorrect</p><br/>';
}
}

?>


le problème survient à cette ligne:

Code PHP :
<?php 
$requete
= "INSERT INTO $table_cp VALUES('','$login','$mage','$empire','$mot_de_passe','$email','$race','$background','$clef')";

Pourriez-vous m'aider svp?

Merci


RE: problème de requête - LittleQI - 29-10-2007

Il nous faudrait aussi le message d'erreur affiché par PHP


RE: problème de requête - jo_link_noir - 29-10-2007

obliger de faire une recherche pour trouver la ligne -_-

personne pourras t'aider sans un minimum d'info, genre, qu'indique mysql comme erreur, le minimum... ?

et aussi j'ai trouver un autre problème (par hasard) dans la requête qui se trouve une dizaine de lignes avant la fin du code :
Citation :$requete= "INSERT INTO $table_cd VALUES('','$login','$mage','$empire''$mot_de_passe','$email','$race','$background')";
oubli de virgule entre '$empire''$mot_de_passe'


RE: problème de requête - Reaven - 29-10-2007

le problème qui est afficher est le texte après le or die c'est "Exécution de la requête impossible".


RE: problème de requête - Reaven - 29-10-2007

Ah voilà je vais vous donner la ligne qui pose problème et l'erreur affichée

morceau de code qui pose probleme

Code PHP :
<?php 
if($nb_faux >= 0)
{
include(
"config.php");
$connexion= mysql_connect($hote,$utilisateur,$mdp) or die('<br/>Connexion au serveur impossible.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$choix_db= mysql_select_db($data_base) or die('<br/>seléction de la base de donnée echouée.<br/> Contactez le Webmaster si l\'erreur n\'est pas résolue.<br/>');
$requete= "SELECT nom_seigneur FROM $table_cd WHERE login='$login'";
$resultat= mysql_query($requete);
$ligne= mysql_fetch_array($resultat);

if(
$login == $ligne['nom_seigneur'])
{
$reponse= '<p>Ce login est déjà utilisé par un autre membre</p><br/>';
$nb_faux ++;
}
}


erreur affichée:
Code PHP :
<?php 
Warning
: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in H:\wamp\www\siteweb\inscription2.php on line 77

ligne77:
Code PHP :
<?php 
$ligne
= mysql_fetch_array($resultat);


Merci


RE: problème de requête - pascal - 29-10-2007

tu peux essaye de débugguer en appliquant les conseils de ce tutorial :
http://www.jeuweb.org/board/showthread.php?tid=1853

A+

Pascal


RE: problème de requête - Reaven - 29-10-2007

Dsl mais je vois pas ou trouver la solution a mon problème dans ton tutorial


RE: problème de requête - pascal - 29-10-2007

Dark Angels a écrit :Dsl mais je vois pas ou trouver la solution a mon problème dans ton tutorial


4. vérifier le succès de l'éxécution

mysql_query renvoie FALSE en cas d'erreur, ou une ressource en cas de succès. on teste donc sa valeur de retour : ( ...)

et on affiche la requete qui pose problème.

A+

Pascal


RE: problème de requête - Kheldar - 29-10-2007

En fait, ton problème, ne se trouve pas à la ligne 77, mais un peu avant.

En effet, ligne77, il te dit simplement que cela n'est pas une ressource valide (donc certainement requete valide).

Pour corriger cela :
ta requete :
Citation :SELECT nom_seigneur FROM $table_cd WHERE login='$login'

Je pense déja, que ce n'est pas $table_cd mais table_cd .

Ensuite pour avoir l'erreur mysql retourné :

$requete = mysql_query('select * from matable') or die('erreur mysql'.mysql_error());
$data = mysql_fetch_array($requete); .....

Dans ce cas, soit ta requete sera normalement éxécuté, soit il passera dans la seconde instruction (die(...)), et le mysql_error te retournera l'erreur mysql rencontré (champ machin inexistant, tel caractère pose un problème).

En esperant que cela t'aide.


RE: problème de requête - Galaan - 29-10-2007

Pour debugger ca facilement fait un echo de ta requete et lance la dans phpmyadmin l'erreur devrait te sauter aux yeux.

Personellement je pense que tu as un probleme avec tes variables $table_cd et $login

Galaan