Page 1 sur 2

classement par point

Posté : 12 oct. 2009, 21:54
par patapin
Boinsoir,
je suis en train de créer un site de "questions" en ligne pour moi, ma famille et des amis.
Mais j'ai un problème, quand j'ajoute 10 point pour réponse juste et bien ma page affiche un noir.

Voici mon code source:
<?
require("../conf.php3");

// CONNEXION MYSQL
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}

// SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link) or die(mysql_error());

// SI L'ID N'EXISTE PAS
if(mysql_num_rows($requete)==0)
	{
	// REDIRECTION PAGE ERREUR
	header("Location:$url_erreur");
	exit;
	}

// LIGNE FACULTATIVE : RECUPERATION DU PSEUDO
$pseudo_membre=mysql_result($requete,0,"pseudo");
	
// DECONNEXION MYSQL	
mysql_close($db_link);
?>
  <link href="CSS.css" type="text/css" rel="stylesheet">
<?php
// Reponse > "Paris"
if (isset($_POST['reponse'])) // Si la variable existe
{
    // On se crée une variable $reponse 
    $reponse = $_POST['reponse'];
}
else // La variable n'existe pas encore
{
    $reponse = ""; // On crée une variable $reponse vide
}
 
if ($reponse == "paris") // Si la reponse est bonne
{
// On affiche la page cachée.
?>
<?php
$reponse = mysql_query("SELECT * FROM point_membre")or die(mysql_error()); //selection de la table et des champs
//on retourne tout ça avec une boucle

mysql_query("UPDATE point_membre = point_membre + 10");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<fieldset>
<legend>Réponse</legend>
<p>Vous avez répondu: <?php echo $_POST['reponse']; ?> <br />
Vous avez <span style="color:red">
<?php 
if ($reponse = "paris");
	{
	echo"Juste";
	}
?>
</span>
<br /><br />
Points gagné : 10
<br />Ton total de points : <?php echo $donnees['point_membre']; ?> 
<br /><br /> 
<a href="question2.php?id=<? echo "$id"; ?>">Question suivante</a>
</fieldset>
<?php
}
?>
<?php
}
else // la reponse n'est pas bonne
{
// On affiche la zone de texte.
?>
Session de <span style="color:red;"><?php echo $pseudo_membre; ?></span> : | <a href="deconnexion.php">Se déconnecté</a>  |  <a href="">Info</a> |<br />
La 1ere question est simple. Quel est la Capitale de la FRANCE?
<form action="" method="post">
<input type="texte" name="reponse"><br /><input type="submit" value="Valider">
</form>
<p>Réponse: <?php echo $_POST['reponse']; ?> <br />
Vous avez <span style="color:red">
<?php 
if ($_POST['reponse'] != "paris");
	{
	echo"faux";
	}
?>
<?php
} // Fin du else
// Fin du code :)
?>

Re: classement par point

Posté : 14 oct. 2009, 15:43
par patapin
Petit up amical

Re: classement par point

Posté : 14 oct. 2009, 17:19
par dunbar
Bonjour,
Montre nous la structure de ta table stp.

Ah oui et aussi $id il vient d'ou :?: ou d'ou est t'il senser venir

Re: classement par point

Posté : 16 oct. 2009, 17:11
par patapin
$id est in id attribuer au membres pour accéder au pages réservé a ces dernier

Re: classement par point

Posté : 16 oct. 2009, 17:15
par dunbar
$id est in id attribuer au membres pour accéder au pages réservé a ces dernier
Oui j'avais compris, mais ou l'initialise tu ??

Re: classement par point

Posté : 16 oct. 2009, 17:20
par patapin
Ben voici la table
Image


Et pour $id c'est l'id perso des membre afficher dans la barre de lien. c'est un id perso pour chaque membres générer automatiquement.initialiser dans la bdd dans la table membre

Re: classement par point

Posté : 16 oct. 2009, 17:27
par dunbar
Ben voici la table
Image


Et pour $id c'est l'id perso des membre afficher dans la barre de lien. c'est un id perso pour chaque membres générer automatiquement.initialiser dans la bdd dans la table membre
Ou j'ai compris mais ma question étais ou l'initialise tu la variable $id, et a mon avis nul part :|
Tu devrais avoir quelqe chose du genre en début de page
$id = (isset($_GET['id']) ? $_GET['id'] : null );
Le $_GET['id'] récupère l'id courante

Re: classement par point

Posté : 16 oct. 2009, 17:35
par patapin
je comprend se que tu dit, mai cela marche sans :/ et mon problème vient pas de là, puisque c'est depuis que j'ai essayer de faire un classement part points que sa m'affiche une page noir dès que l'on rentre la réponse.

Re: classement par point

Posté : 16 oct. 2009, 18:26
par Kran
Hello,

Tu as plein de problèmes dans ton code...
  • des if mal structurées (";" juste après la condition, donc tu ne passes probablement jamais dans la partie traitement...)
  • des balises ?> suivies immédiatement de <?php (pourquoi sortir du langage côté serveur pour y réentrer immédiatement après ?)
  • des structures if imbriquées qui ont la même condition if($reponse == "paris") (si tu est rentré dans la première, tu sais déja que la condition est vérifiée, pas la peine de tester une deuxième fois...)
  • des if avec un opérateur d'affectation = au lieu de l'opérateur de comparaison == (erreur très fréquente en ce moment je trouve...)
  • ...
Un petit effort d'indentation ne ferait pas de mal non plus pour la lisibilité...

Et j'ai aussi un gros doute sur le respect des normes minimalistes en ce qui concerne le HTML résultant...

Fais déja une première passe la dessus et avec un peu d'chance tu trouveras de toi même ce qui ne va pas !

Re: classement par point

Posté : 16 oct. 2009, 18:42
par patapin
Maintenant que j'ai changer tout ça C'est la ligne
while ($donnees = mysql_fetch_array($reponse) )
qui bug

Portion de code :
<?php
// Reponse > "Paris"
if (isset($_POST['reponse'])) // Si la variable existe
{
    // On se crée une variable $reponse 
    $reponse = $_POST['reponse'];
}
else // La variable n'existe pas encore
{
    $reponse = ""; // On crée une variable $reponse vide
}
 
if ($reponse == "paris") // Si la reponse est bonne
{
// On affiche la page cachée.

$reponse = mysql_query("SELECT * FROM point_membre")or die(mysql_error()); //selection de la table et des champs
//on retourne tout ça avec une boucle

mysql_query("UPDATE point_membre = point_membre + 10");
while ($donnees = mysql_fetch_array($reponse) )
{
?>

Re: classement par point

Posté : 16 oct. 2009, 19:26
par fab
Oui si tu regardes bien tu as un mysql_close() plus haut, alors que tu tentes d'exécuter des requêtes SQL

Re: classement par point

Posté : 16 oct. 2009, 19:38
par Kran
Et je ne sais pas si c'est encor le cas, mais dans le code que tu nous a donné en premier lieu, tu testes la variable $response comme si elle contenait encore du texte alors que tu la remplis juste au dessus avec le retour d'un mysql_query ... pas très propre !

Re: classement par point

Posté : 16 oct. 2009, 19:44
par fab
Y a aussi un if foireux

Code : Tout sélectionner

if ($reponse = "paris");
Déjà tu dois pas avoir de ; a la fin mais aussi et surtout le = c'est l'affection et non la comparaison qui est == !

Re: classement par point

Posté : 16 oct. 2009, 19:55
par dunbar
A mon avis il serait plus simple de refaire tout le code

Re: classement par point

Posté : 16 oct. 2009, 19:59
par patapin
je suis entrain de refaire le code, mais, une chose me turlupine...
mysql_query("UPDATE point_membre SET point_membre + '10'");
while ($donnees = mysql_fetch_array($reponse) )
est faux n'est ce pas?
en revanche
mysql_query("UPDATE point_membre SET point_membre='10'");
while ($donnees = mysql_fetch_array($reponse) )
est plus juste?