Hallo allemaal.

Ik ben bezig met een multi-poll systeem te maken, maar een WHERE clausule, die het aantal stemmen op een bepaalde keuze zou moeten tellen, geeft altijd maar 1 record terug, terwijl er toch meerdere zijn.

Hier is het stukje code:


$sql_get_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i]." AND vote_number = ".$poll_choices['id'];;
$sql_get_total_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i];
										
if($query_count = mysql_query($sql_get_voted) && $query_total = mysql_query($sql_get_total_voted))
{
        //dit is de regel waar het om gaat:
        $count = mysql_num_rows($query_count); 
        $total = mysql_num_rows($query_total);

	$percent = $count/$total;
	echo $poll_choices['poll_choice'];
	?>
	<div class="count_bar" style="width: <?= $percent*100 ?>px">
		<?= round($percent*100) ?>%
	</div>
	<?php
}


Ik krijg bij de code hierboven op de regel die ik heb aangegeven een foutmelding, dat $query_count geen geldige "result resource" is.

Toed had ik i.p.v een variabele te gebruiken, mysql_query() in mysql_num_rows() gezet, zoals hieronder te zien is


$sql_get_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i]." AND vote_number = ".$poll_choices['id'];;
$sql_get_total_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i];
						
//de regel waar het om gaat is de eerste test in de if: "$count ..."				
if($count = mysql_num_rows(mysql_query($sql_get_voted)) && $total = mysql_num_rows(mysql_query($sql_get_total_voted)))
{
	$percent = $count/$total;
	echo $poll_choices['poll_choice'];
	?>
	<div class="count_bar" style="width: <?= $percent*100 ?>px">
		<?= round($percent*100) ?>%
	</div>
	<?php
}


Met de code hierboven krijg ik niet de foutmelding over de "result resource", maar mysql_num_rows() geeft altijd maar 1 record terug, terwijl er toch meerdere records (stemmen) op 1 keuze zijn.

ziet iemand wat ik fout doe?
Waarom pak je het op zo'n omslachtige manier aan en laat je niet gewoon de database het werk voor je doen? Deze is ook prima in staat om aantallen te berekenen...

Verder controleer je nergens of je queries wel gelukt zijn. Als dat namelijk niet het geval is, zal de foutmelding die jij nu krijgt het logische gevolg zijn. Ga dat dus ook eerst eens controleren.
hoezo doe ik dat nergens, ze staan in een if, lijkt mij controle:S

en ik ben niet echt zo begaafd met MYSQL, dus zeg me dan hoe dat moet alstjeblieft.
Maarten schreef op 22.03.2008 09:27
hoezo doe ik dat nergens, ze staan in een if, lijkt mij controle:S
Tja, ze staan in een if. Maar als er iets fout gaat weet je ten eerste niet in welke query er iets fout gaat en bovendien niet wat er dan fout gaat. En dat zijn nu juist dingen die je wel wilt weten...

Het tellen van het aantal votes voor een bepaalde poll kun je eenvoudig op deze manier doen:
<?php
$sQuery = "
SELECT
COUNT(*) AS aantal
FROM
poll_votes
WHERE
poll_id = ".$voted_ids[$i];

if(!$rResult = mysql_query($sQuery))
{
trigger_error(mysql_error().'<br />In query: '.$sQuery);
}
else
{
$aRow = mysql_fetch_assoc($rResult);
echo $aRow['aantal'];
}
?>
Als je de query een beetje handig opstelt, zal het waarschijnlijk wel mogelijk zijn om zelfs het gemiddelde al direct met die query uit de database te halen. Dan komt er dus helemaal geen PHP meer aan te pas om dat uit te rekenen.

het werkt nog steeds niet.

Ik heb de query wel iets veranderd:


$sql_get_voted = "SELECT COUNT(id) AS aantal								                   FROM poll_votes 
			   WHERE vote_number = ".$poll_choices['id'];

//query ingevuld, gekopieerd uit echo:

$sql_get_voted = "SELECT COUNT(id) AS aantal								                   FROM poll_votes 
			   WHERE vote_number = 2";


ik heb eens even rondgezocht en nu ben ik er zeker van dat het bij deze query fout gaat.

Als ik deze query uitvoer krijg ik (in php) een foutmelding over de "result resource".

Als ik deze query echter uitvoer in de database (phpMyAdmin -> SQL), geeft hij gewoon de rijen terug (of in dit geval het aantal).

Weet iemand waarom deze query het niet zou doen in php, ik snap er echt niets van
Laat eens zien hoe je de query uitvoert. Heb je daar net als in mijn voorbeeld een degelijke foutafhandeling bij toegepast?
if($count = mysql_num_rows(mysql_query($sql_get_voted)) && $total = mysql_num_rows(mysql_query($sql_get_total_voted)))

Hoe denk jij in hemelsnaam dit soort regels code te kunnen debuggen? Jij smeekt op je blootjes knietjes om de grootste en meest onduidelijke problemen waar je geen touw aan vast kunt knopen. Die heb je nu dan ook gekregen, wat is dan nog het probleem?

Zie het voorbeeld van Blanche hoe je wél overzichtelijk kunt schrijven.

Ps. Dit heeft niks met SQL te maken, maar alles met ongeorganiseerd werken.
zo handel ik de error af

if($query_count = mysql_query($sql_get_voted) && $query_total = mysql_query($sql_get_total_voted))
{
	//rest van de code 	
}
else
{
        echo 'Er is een fout opgetreden enz';
}


EDIT: @frank: ik heb de 2 even apart gezet en gekeken welke er fout ging?

hoe moet ik ze anders apart gaan zetten, een variabele aanmaken en die op true zetten als hij door moet?
Kijk nou eens naar het voorbeeld dat ik je gaf, als je je queries allemaal in die structuur giet, weet je zeker dat je foutmeldingen krijgt als er iets fout gaat...

Als je de tweede query pas uit wilt voeren als de eerste geslaagd is, kun je dat prima doen in het else statement van de eerste query...
Je voert eerst query 1 uit, gaat controleren of deze is gelukt, gaat controleren of deze resultaten heeft opgeleverd en dán pas ga je dit truukje uithalen met query 2.

Spagetti ligt in een onmogelijke knoop op je bord, met code wil je dat absoluut niet hebben. Ga logisch en zorgvuldig de diverse stappen uitvoeren, dan gaat het een heel stuk beter.

<?php
$sql_get_voted = "SELECT COUNT(id) AS aantal 
				  FROM poll_votes 
				  WHERE vote_number = ".$poll_choices['id'];
				  
$sql_get_total_voted = "SELECT COUNT(id) AS aantal
						FROM poll_votes 
						WHERE poll_id = ".$voted_ids[$i];

if($query_count = mysql_query($sql_get_voted))
{
 	if($query_total = mysql_query($sql_get_total_voted))
 	{
	 	echo $sql_get_voted.'<br />'.$sql_get_total_voted.'<br />';
	 	$result_count = mysql_fetch_array($query_count);
	 	$result_total = mysql_fetch_array($query_total);
	 	
	 	$percent = $result_count['aantal']/$result_total['aantal'];
	 	
	 	echo $poll_choices['poll_choice'];
	 	?>
		<div class="count_bar" style="width: <?= $percent*100 ?>px">
			<?= round($percent*100) ?>%
		</div>
	 	<?php
	}
	else
	{
		echo '<span class="error">Er is een fout opgetreden met het tellen van het totaal aantal stemmen. Excuses voor het ongemak </span>';
	}
}
else
{
	echo '<span class="error">Er is een fout opgetreden met het tellen van het aantal stemmen. Excuses voor het ongemak</span>';
}						
?>


dit is dan alles, met aparte error afhandeling.

helpt dit?

Reageren