[PHP] Système de vote

Lightguismo -  
 Utilisateur anonyme -
Bonjour, je me suis remis à coder il y a peu et pour m'entrainer je voulais m'amuser à faire un système de vote puis de classement. Pour le classement ce n'est pas dur suffit d'afficher en fonction du nombre de vote mais ce qui me pose problème c'est le système de vote. J'ai essayé differente chose et ça ne fonctionne pas.

Voici mon code :

<?php
include('co.php');
$retour = mysql_query('SELECT id, pseudo, photo, points FROM membres ORDER BY points DESC');
while ($donnees = mysql_fetch_array($retour) or die(mysql_error()))
{
echo '<img src="' . $donnees['photo'] . '" style="width: 200px; height: 200px;"/> <br/>';
echo $donnees['pseudo'] . '<br/>';
echo $donnees['points'] . 'votes <br/>';
echo '<a href="classement.php?id=' . $donnees['id'] . '"> Je vote ! </a> <br/>';

$id = $_GET['id'];

if ($id != NULL)
{
include('co.php');
$points = $donnees['points'] + 1;
mysql_query("UPDATE membres SET  points='" . $points . "' WHERE  id='" . $id . "'");
header('location:classement.php');
}
}

?>



Et je veux que quand on clique sur le lien " je vote " ça rajoute un vote et que ça actualise la page. Voila je vous remercie d'avance pour votre aide :)


5 réponses

Utilisateur anonyme
 
Bonjour,

co.php n'affiche rien n'est-ce pas, c'est juste une librairie de fonctions ?
parce que si ce n'est pas le cas, ça ne peut pas fonctionner.
Vous ne pouvez pas faire de echo avant un header.

Sinon j'écrirais le code dans l'autre sens.

Si $_GET['id'] existe traiter le vote, sinon traiter l'affichage des votes possibles.

Le code ci dessous devrait marcher :

1 - je vérifie l'existance du ID dans le GET
2 - s'il existe j'update et je reviens à la page classement.php
3 - sinon j'affiche la liste des photos avec le lien de vote

include('co.php'); 
// existance du ID 
if (isset($_GET['id']) 
{ 
$id = $_GET['id']; 
$points = $donnees['points'] + 1; 
mysql_query("UPDATE membres SET  points='" . $points . "' WHERE  id='" . $id . "'"); 
header('location:classement.php'); 
} else { 
$retour = mysql_query('SELECT id, pseudo, photo, points FROM membres ORDER BY points DESC'); 
while ($donnees = mysql_fetch_array($retour) or die(mysql_error())) 
{ 
echo '<img src="' . $donnees['photo'] . '" style="width: 200px; height: 200px;"/> <br/>'; 
echo $donnees['pseudo'] . '<br/>'; 
echo $donnees['points'] . 'votes <br/>'; 
echo '<a href="classement.php?id=' . $donnees['id'] . '"> Je vote ! </a> <br/>'; 
} 
} 

Zébulon
1
Super_carotte Messages postés 1420 Date d'inscription   Statut Membre Dernière intervention   127
 
Le php étant un langage interprété coté serveur, il a falloir que vous rappeliez la page grâce a un formulaire.

Je vous conseil vivement de lire ce tutoriel tres bien fait sur le php:
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql

Une partie concerne plus particulièrement les formulaires:(CF: https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913099-transmettez-des-donnees-avec-les-formulaires )

Mais vous devriez vraiment suivre l'ensemble du cours depuis le début.

Bonne lecture ;)
0
Lightguismo
 
Le co.php contient seulement de quoi se connecter à la BDD et je suis désolé mais ton code ne fonctionne pas plus que le mien mais c'est vrai qu'il est mieux :)

Super carotte> Je vois ce que tu veux dire et je vais essayer. J'ai déja lu tout ça ya longtemmps mais tu as raison je devrai peut-être relire. Merci :)
0
Lightguismo
 
<?php
include('co.php'); 
// existance du ID 
if (isset($_POST['id'])) 
{ 
$id = $_POST['id']; 
 mysql_query("UPDATE membres SET  points=points+1 WHERE  id='" . $id . "'"); 
 echo $id;
} 
else { 
$retour = mysql_query('SELECT id, pseudo, photo, points FROM membres ORDER BY points DESC'); 
while ($donnees = mysql_fetch_array($retour) or die(mysql_error())) 
{ 
echo '<img src="' . $donnees['photo'] . '" style="width: 200px; height: 200px;"/> <br/>'; 
echo $donnees['pseudo'] . '<br/>'; 
echo $donnees['points'] . 'votes <br/>'; 
?>
<form action="classement.php" method="post">
<p>
    <input type="hidden" name="id" value="<?php $donnees['id'] ?>" />
    <input type="submit" value="Valider" />
</p>
<?php
} 
} 
?>


Bon voila j'ai tenter quelque chose comme ça mais quand je clique sur le bouton il m'affiche une page blanche et en plus le contenu de la bdd ne change pas. Help ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Bonjour,

A priori ce code fonctionne, sauf si il y a des erreurs dans co.php ou que le tableau $donnees ne soit pas instancié dans co.php fatalement. Après il peut avoir des problèmes avec votre base de données, mais le principe est là. Si ça ne marche pas, donnez-nous au moins vos messages d'erreur.

include('co.php'); 
// existance du ID 
if (isset($_GET['id'])) { 
	$id = $_GET['id']; 
	$points = $donnees['points'] + 1; 
	mysql_query("UPDATE membres SET  points='" . $points . "' WHERE  id='" . $id . "'"); 
	header('location:classement.php'); 
} else { 
	$retour = mysql_query('SELECT id, pseudo, photo, points FROM membres ORDER BY points DESC'); 
	while ($donnees = mysql_fetch_array($retour) or die(mysql_error())) 
	{ 
		echo '<img src="' . $donnees['photo'] . '" style="width: 200px; height: 200px;"/> <br/>'; 
		echo $donnees['pseudo'] . '<br/>'; 
		echo $donnees['points'] . 'votes <br/>'; 
		echo '<a href="classement.php?id=' . $donnees['id'] . '"> Je vote ! </a> <br/>'; 
	} 
} 


Regardez le code ci dessous, fichier nommé test.php, il reprend le principe du code au-dessus sans base de donnée, et il fonctionne :

<?php
// existance du ID 
if (isset($_GET['id'])) { 
	$id = $_GET['id']; 
	// UPDATE
	header('location:test.php'); 
} else { 
	$tab = array('a','b','c');
	foreach($tab as $i=>$e) {
		echo '<a href="test.php?id='.$i.'">'.$e.'<br/>';
	}
} 
?>
0