Afficher le total d'une table

Petit nouveau ! | 6 Messages

21 sept. 2013, 16:18

Bonjour à tous,
ça fait 4 jours que j'essaie tout ce qui se trouve sur le net et au pire j'ai des gros mots de php qui me cassent mon site, au mieux ça passe mais n'affiche aucun resultat.... :mrgreen:
Donc j'ai deux tables suggestions et suggestions_votes et j'aimerais afficher sur le site leur nombre de lignes totales.
Voila le code php :
<?php

require "connect.php";
require "suggestion.class.php";


// Converting the IP to a number. This is a more effective way
// to store it in the database:

$ip	= sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']));


// The following query uses a left join to select
// all the suggestions and in the same time determine
// whether the user has voted on them.




$result = $mysqli->query("
	SELECT s.*, if (v.ip IS NULL,0,1) AS have_voted
	FROM suggestions AS s
	LEFT JOIN suggestions_votes AS v
	ON(
		s.id = v.suggestion_id
		
		AND v.ip = $ip
	)
	ORDER BY s.rating DESC, s.id DESC
");

$str = '';

if(!$mysqli->error)
{
	// Generating the UL
	
	$str = '<ul class="suggestions">';
	
	// Using MySQLi's fetch_object method to create a new
	// object and populate it with the columns of the result query:
	
	while($suggestion = $result->fetch_object('Suggestion')){
		
		$str.= $suggestion;	// Using the __toString() magic method.
		
	}
	
	$str .='</ul>';
}
?>
POur vous montrer ce que j'ai essayé par exemple :

$query = $mysqli->query("SELECT COUNT(*) FROM suggestions";

$rs_query = $mysql_query($query);



list($count) = mysql_fetch_row($rs_query);

echo "La table contient ".$count." enregistrement(s)";
mais ça n'affiche rien...
merci de votre aide :D

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 sept. 2013, 21:08

Bonjour, voici la correction de ton code :
//************************************//
// CALCUL DU NOMBRE DE SUGGESTIONS
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT COUNT(*) AS nb FROM suggestions");
//test du resultat
if ($result){
   $suggestion = $result->fetch_object();
   $nb = $suggestion->nb;
}
else { 
   $nb = 0;
}
//affichage du nombre de suggestions
echo "La table contient ".$nb." enregistrement(s)";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 6 Messages

22 sept. 2013, 01:25

Merci infinimment !
ça marche impec!

Petit nouveau ! | 6 Messages

22 sept. 2013, 17:47

Re,
un petite dernière question sur cette table..
J'aimerais afficher le total d'une colonne de la table suggestions_vote qui se nomme suggestion_id .
Merci de votre aide 8-)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

22 sept. 2013, 20:26

Salut, il faut ajouter un WHERE pour sélectionner le suggestion_id que tu veux tout en groupant la table par suggestion_id en utilisant GROUP BY. Comme ça:
//************************************//
// CALCUL DU NOMBRE DE SUGGESTIONS
//***********************************//
//determiner l'origine de suggestion_id (exemple ici : provient de l'URL GET)
$suggestion_id = isset($_GET['suggestion_id']) ? $_GET['suggestion_id'] : null;

//verif de suggestion_id
if ($suggestion_id == null) { echo "Donner l'ID de la suggestion"; exit(); }

//execution de la requete
$result = $mysqli->query("SELECT suggestion_id, COUNT(*) AS nb FROM suggestions WHERE suggestion_id='".$suggestion_id."'  GROUP BY suggestion_id");
//test du resultat
if ($result){
   $suggestion = $result->fetch_object();
   $nb = $suggestion->nb;
}
else {
   $nb = 0;
}
//affichage du nombre de suggestions par suggestion_id
echo "Le nombre de votes pour la suggestion : ".$suggestion_id." est : ".$nb." vote(s)";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 6 Messages

22 sept. 2013, 20:49

Merci Sadeq mais la requête ne fonctionne pas.
En fait j'ai du me tromper de cible car j'aimerais afficher le nombre de personnes qui ont votés car j'ai leur IP convertit en un nombre.
Le soucis c'est que je n'ai aucune colonne qui m'affiche le nombre d' IP global.
Si j'ai une personne qui vote 5 fois, j'ai 5 fois son IP au lieu d'une fois.
Je ne sais pas si je suis compréhensible mais en gros j'aimerais afficher le nombre de votants par IP en plus de celui des votes que j'ai eu grace à toi.
Là ça me dépasse un peu.
Merci d eme dire si c'est possible. :?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

23 sept. 2013, 21:38

j'aimerais afficher le nombre de personnes qui ont votés car j'ai leur IP convertit en un nombre.
Le soucis c'est que je n'ai aucune colonne qui m'affiche le nombre d' IP global.
Si j'ai une personne qui vote 5 fois, j'ai 5 fois son IP au lieu d'une fois.
C'est possible de regrouper la table suggestions_votes par IP pour compter les doublons des mêmes participants (ip). On utilise pour cela GROUP BY avec un COUNT.
Ce qui donne la même chose que le programme que je t'ai envoyé à la différence prêt que la requête de ce dernier produit un résultat $result qui peut contenir plusieurs enregistrements correspondant à tous les participants aux votes
//************************************//
// CALCUL DU NOMBRE DE VOTES PAR PARTICIPANT (identifié par IP)
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT  ip, COUNT(*) AS nb  FROM suggestions_votes   GROUP BY  ip");

//test du resultat qui peut contenir plusieurs enregistrements
while ($result && $row = $result->fetch_object()){
   $ip = $row->ip;
   $nb = $row->nb;
   //affichage du nombre de votes par ip
   echo "<li>Le nombre de votes pour le participant  : ".long2ip($ip)." est : ".$nb." vote(s)</li>";
}
Globalement voici le programme de test que j'ai programmé pour tes requêtes de stats:
<?php
//debut
$mysqli = new PDO('mysql:dbname=test;host=localhost', 'root', '');
if(!$mysqli){
    echo '<li>Erreur de connection a la base de donnees!</li>'; // On affiche un message d'erreur.
}

//************************************//
// CALCUL DU NOMBRE DE SUGGESTIONS
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT COUNT(*) AS nb FROM suggestions");
//test du resultat
if ($result){
   $suggestion = $result->fetchObject();
   $nb = $suggestion->nb;
}
else { 
   $nb = 0;
}
//affichage du nombre de suggestions
echo "<li>Le nombre de suggestions est : ".$nb."</li>";

echo '<hr>';

//************************************//
// CALCUL DU NOMBRE DE VOTES PAR SUGGESTION
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT  suggestion_id, COUNT(*) AS nb  FROM suggestions_votes   GROUP BY  suggestion_id");

//test du resultat qui peut contenir plusieurs enregistrements
while ($result && $row = $result->fetchObject()){
   $suggestion_id = $row->suggestion_id;
   $nb = $row->nb;
   //affichage du nombre de votes par suggestion
   echo "<li>Le nombre de votes pour la suggestion : ".$suggestion_id." est : ".$nb." vote(s)</li>";
}

echo '<hr>';

//************************************//
// CALCUL DU NOMBRE DE VOTES PAR PARTICIPANT (identifié par IP)
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT  ip, COUNT(*) AS nb  FROM suggestions_votes   GROUP BY  ip");

//test du resultat qui peut contenir plusieurs enregistrements
while ($result && $row = $result->fetchObject()){
   $ip = $row->ip;
   $nb = $row->nb;
   //affichage du nombre de votes par ip
   echo "<li>Le nombre de votes pour le participant  : ".long2ip($ip)." est : ".$nb." vote(s)</li>";
}
//fin
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 6 Messages

24 sept. 2013, 23:49

Bonjour,
merci pour toutes ces explications.
le code ci dessous renvoie : Fatal error: Call to undefined method mysqli_result::fetchObject()
au niveau du while.
//************************************//
// CALCUL DU NOMBRE DE VOTES PAR PARTICIPANT (identifié par IP)
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT ip, COUNT(*) AS nb FROM suggestions_votes GROUP BY ip");

//test du resultat qui peut contenir plusieurs enregistrements
while ($result && $row = $result->fetchObject()){
$ip = $row->ip;
$nb = $row->nb;
//affichage du nombre de votes par ip
echo "<li>Le nombre de votes pour le participant : ".long2ip($ip)." est : ".$nb." vote(s)</li>";
}

et c'est justement le nombre que je cherche : total des votants par IP.
Merci

Petit nouveau ! | 6 Messages

25 sept. 2013, 00:08

Petite autre chose sans vouloir abuser, y at'il une instruction pour numéroter les lignes devant chaque votes ?
Sachant que ca va de 1 à 50 et quelles ne bougent jamais, les votes montent mais on aura toujours le même numero devant.
merci
Je peux vous montrer le site mais pas sans votre autorisation.
merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 sept. 2013, 09:50

Salut,

Ajoute une variable qui sert de compteur.
Avant le while $i=1;
Dans le while tu affiche i, ensuite $i++;

@+
Il en faut peu pour être heureux ......

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 sept. 2013, 11:13

Salut,
L'erreur était sur le mot fetchObject() qu'il faut écrire : fetch_object().

Concernant la numérotation statique il est possible de la réaliser en HTML par les balises <ol> ... </ol> sans devoir utiliser un compteur PHP.

Voici la correction :
//************************************//
// CALCUL DU NOMBRE DE VOTES PAR PARTICIPANT (identifié par IP)
//***********************************//

//execution de la requete
$result = $mysqli->query("SELECT  ip, COUNT(*) AS nb  FROM suggestions_votes   GROUP BY  ip");

//test du resultat qui peut contenir plusieurs enregistrements
echo '<ol>'; //liste numerotee
while ($result && $row = $result->fetch_object()){
   $ip = $row->ip;
   $nb = $row->nb;
   //affichage du nombre de votes par ip
   echo "<li>Le nombre de votes pour le participant  : ".long2ip($ip)." est : ".$nb." vote(s)</li>";
}
echo '</ol>';
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène