PHP-fråga

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
mysql_select_db('vb99mac'); 
$query = "select user.username,sum(quiz_results.totalcorrect) as kalle,count(resultid),quiz_results.userid from quiz_results, user where user.userid=quiz_results.userid  group by userid order by kalle desc";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
$rownumber = 1;

echo '<h2>Topplista - 99mac kunskapsprov</h2><br>';
echo 'Totalt antal deltagare: ';
echo $num_results ;
echo '</br></br>';

echo '<table width=500 border=0 cellspacing=1 cellpadding=3 bgcolor="#000000" class=lista>';
echo '<tr bgcolor="#FFFFFF"><td>Plats</td><td>Medlem</td><td>Totalpoäng</td><td>Antal prov:</td></tr>';

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
{
$row = mysql_fetch_array($result);
echo '<tr bgcolor="#FFFFFF"><td>';
echo $rownumber++; 
echo '</td><td>';
echo '<a href=http://www.99mac.com/forum/member.php?action=getinfo&userid=';
echo ($row['userid']);
echo ' target="_blank">';
echo htmlspecialchars(stripslashes($row['username']));
echo '</a></td><td>';
echo htmlspecialchars(stripslashes($row['kalle']));
echo '</td><td>';
echo htmlspecialchars(stripslashes($row['count(resultid)']));
echo '</td></tr>';
}
echo '</table></center>';

mysql_free_result($result);

Resultatet hittar du här:
http://99mac.com/sql/topplista.php

Ser ni att exakt hälften av alla medlemmar finns i listan? (du ser totala antalet medlemmar som utfört provet längst upp)

Jag vill att ALLA ska vara med i listan!

hoho?

  • Medlem
  • 2003-05-11 01:03

Hur är databaserna uppbyggda?

Som jag ser det nu (efter för mycket vin) hämtar du användarnamn från databasen där "user.userid=quiz_results.userid", dvs finns det inga resultat för en användare hämtar du inte heller dennes namn...

Jag kan kolla på det där imorgon lite nogare när jag inte känner mig så förfriskad

Citat:

while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$row = mysql_fetch_array($result);

Kort svar:
Du assignar $row en gång för mycket i while-loopen.

Långt svar:
För varje steg i while-loopen ger du $row värdet från mysql_fetch_array(). Därefter går du in i loopen på nytt och börjar exekvera kommandon där inne. Det första som händer är att gamla $row slängs för att ersättas av en ny tilldelning m.h.a. mysql_fetch_array(). Det innebär att utgångsvärdet du började loopen med hämtas utan att användas och det är det andra hämtade värdet som skrivs ut längre ned i loopen.
Därefter börjar loopen om med att hämta en ny $row, slänga denna och ersätta den med ännu en rad från databasen.

Test:
Skriv
{
// $row = mysql_fetch_array($result);
istället (kommentera bort första raden i loopen) för att se om jag har rätt eller ej.

Reservation:
Jag har inte läst koden jättenoga, och har ingen phpinstallation att testa på själv, så jag kanske är ute och cyklar här. Om det här inte funkar så skulle jag felsöka SQL-syntaxen innan jag går vidare och försöker hitta fel i PHP-koden: ser databasens sökresultat ut som du förväntar dig?

Nu ska här sovas. God natt.

  • Medlem
  • 2003-05-11 01:39

Jag kunde inte hitta mig själv i listan. Har gjort 4-5 prov varav ett med 11p.

Citat:

Skrevs ursprungligen av odin
Hur är databaserna uppbyggda?

Som jag ser det nu (efter för mycket vin) hämtar du användarnamn från databasen där "user.userid=quiz_results.userid", dvs finns det inga resultat för en användare hämtar du inte heller dennes namn...

Jag kan kolla på det där imorgon lite nogare när jag inte känner mig så förfriskad

Jag tar användarnamnet därifrån (det är ju så svårt att veta vem medlem 2342 är) och alla har ju ett användarnamn...

Citat:

Skrevs ursprungligen av Anders Liljeqvist
Kort svar:
Du assignar $row en gång för mycket i while-loopen.

Långt svar:
För varje steg i while-loopen ger du $row värdet från mysql_fetch_array(). Därefter går du in i loopen på nytt och börjar exekvera kommandon där inne. Det första som händer är att gamla $row slängs för att ersättas av en ny tilldelning m.h.a. mysql_fetch_array(). Det innebär att utgångsvärdet du började loopen med hämtas utan att användas och det är det andra hämtade värdet som skrivs ut längre ned i loopen.
Därefter börjar loopen om med att hämta en ny $row, slänga denna och ersätta den med ännu en rad från databasen.

Test:
Skriv
{
// $row = mysql_fetch_array($result);
istället (kommentera bort första raden i loopen) för att se om jag har rätt eller ej.

Reservation:
Jag har inte läst koden jättenoga, och har ingen phpinstallation att testa på själv, så jag kanske är ute och cyklar här. Om det här inte funkar så skulle jag felsöka SQL-syntaxen innan jag går vidare och försöker hitta fel i PHP-koden: ser databasens sökresultat ut som du förväntar dig?

Nu ska här sovas. God natt.

Hej! om jag lägger två stycken //framför "while" raden så visas bara en medlem.

SQL-syntaxen fungerar fint om man kör den lokalt på servern i dess MySQL GUI. Det är bara när jag kör den via PHP som den är dum mot mig.

Jag löste det själv!

//$row = mysql_fetch_array($result, MYSQL_NUM)
while ($rownumber<($num_results+1)) 
{
  • Oregistrerad
  • 2003-05-12 20:34
Citat:

Skrevs ursprungligen av Martin Björnström

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
{
//$row = mysql_fetch_array($result); <--- ** TA BORT DEN HÄR RADEN **

Bra att det löste sig, men jag tror du missuppfattade tipset du fick av Anders Liljeqvist här ovan.. du skulle tagit bort en rad, eller markerat den med "//".

Hälsningar
/Fredrik

  • Medlem
  • 2003-05-13 21:15

Det var det jag gjorde och det fungerade inte. (skriver detta på flickvännens dator)

Skriv på din egen så fungerar det nog.
Tjejburkar är inte lika bra.

1
Bevaka tråden