13. juni 2006 - 14:27Der er
19 kommentarer og 1 løsning
Hjælp til sortering
Hej, jeg er igang med et community og har fået lavet en venneliste...Den virker fint nok,Men jeg vil gerne have at den udskriver "vennernes status" i række følgen Online,Optaget,Ikke til stede,Offline..Jeg har prøvet med order by..Men det viker ikke.. kode: <?php include("connect.php");
$pr_side = "12"; // Antal overskrifter pr side if (!isset($s)) $s = "0"; $rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error()); if(mysql_num_rows($rew_venneliste) < "1") { echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>"; } else { while($row_venneliste = mysql_fetch_array($rew_venneliste)){ $status_venneliste = mysql_query("SELECT * FROM login WHERE brugernavn = '$row_venneliste[ven]'") or die(mysql_error()); while($s_venneliste = mysql_fetch_array($status_venneliste)){ if($s_venneliste['status'] == "Online") echo "<tr><td><img src=\"/grafik/online.gif\" border=\"0\" alt=\"Online\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Optaget") print"<tr><td><img src=\"/grafik/optaget.gif\" border=\"0\" alt=\"Optaget\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Ikke til stede!") print"<tr><td><img src=\"/grafik/ikke.gif\" border=\"0\" alt=\"Ikke til stede!\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Offline") print"<tr><td><img src=\"/grafik/offline.gif\" border=\"0\" alt=\"Offline\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";?>
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side AND status = 'Online' UNION ALL SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side AND status = 'Optaget' UNION ALL SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side AND status = 'Ikke til stede' UNION ALL //...... // OSV :-)
Men det er lidt af en quick 'n' dirty måde at gøre det på.
Du burde i virkelighed tilføje en ny tabel som eksempelvis hedder "vennestatus" som indeholder status_id, status_navn og status_sort, som du fylder med data:
Online, 1 Offline, 2 Ikke til stede, 3 osv...
Derefter kan du gøre følgende:
SELECT *, vennestatus.status_navn FROM venneliste inner join vennestatus on venneliste.status_id = vennestatus.status_id
WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side AND status = 'Ikke til stede' ORDER BY vennestatus.status_sort
Men hvis du ikke gider ændre på din datamodel må du bare benytte UNION - der kan bare få hen og blive meget tungt i længden, altså såfremt vennelisten er lang.
Ja ok - så kan du vel joine ud til login-tabellen og fiske status ud? Eller har jeg overset noget?
SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.ven AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Online' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.ven AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Offline' LIMIT $s, $pr_side ...osv...
Nu ser min sql sån ud : <?php include("connect.php");
$pr_side = "12"; // Antal overskrifter pr side if (!isset($s)) $s = "0"; $rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error()); if(mysql_num_rows($rew_venneliste) < "1") { echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>"; } else { while($row_venneliste = mysql_fetch_array($rew_venneliste)){ $status_venneliste = mysql_query("SELECT * FROM venneliste inner join login on venneliste.ven = login.brugernavn AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Online' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.ven = login.brugernavn AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Optaget' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.ven = login.brugernavn AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Ikke til stede!' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.ven = login.brugernavn AND brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Offline' LIMIT $s, $pr_side ") or die(mysql_error()); while($s_venneliste = mysql_fetch_array($status_venneliste)){ if($s_venneliste['status'] == "Online") echo "<tr><td><img src=\"/grafik/online.gif\" border=\"0\" alt=\"Online\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Optaget") print"<tr><td><img src=\"/grafik/optaget.gif\" border=\"0\" alt=\"Optaget\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Ikke til stede!") print"<tr><td><img src=\"/grafik/ikke.gif\" border=\"0\" alt=\"Ikke til stede!\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>"; if($s_venneliste['status'] == "Offline") print"<tr><td><img src=\"/grafik/offline.gif\" border=\"0\" alt=\"Offline\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>";?>
<? } } } ?> Men den siger : Column: 'brugernavn' in on clause is ambiguous
Okay..Så ser den sån ud SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Online' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Optaget' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Ikke til stede!' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Offline' LIMIT $s, $pr_side Men stadig fejl : Column: 'brugernavn' in where clause is ambiguous
Jojo - men der står stadig "brugernavn = '$brugernavn'" - den skal præfikses...
SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Online' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Optaget' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Ikke til stede!' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Offline' LIMIT $s, $pr_side
Grunden til at det ellers vil fejle er at brugernavn findes i 2 tabeller og databaseserven skal vide hvilken tabel du henviser til.
Det skal lige siges at jeg har ændret denne linje while($s_venneliste = mysql_fetch_array($status_venneliste)){ til denne : $s_venneliste = mysql_fetch_array($status_venneliste);
Du får et dataset ud som indeholder alle brugere, du skal derfor indsætte s_venneliste['status'] alle de steder hvor der du har hårdkodet online, offline osv.
Jeg havde dog overset dine gif's, så prøv med følgende:
Altså det sker når du klikker på et af brugerne fra den liste ovenstående genererer?
For så ligger jo problemet i den side du åbner (profil.php) og ikke den kode der står ovenover - og jeg kan af gode grunde ikke hjælpe dig, da jeg hverken kan se din kode eller GUI.
ALtså mig(jens) og den anden profil(kraller_man) er venner men da jeg går ind på den anden profil så genere den alle som online selvom jeg er online...Jeg tror der er noget gjaldt med sql sætningen..
Sql-sætningen er nu ikke specielt kompleks... jeg har svært ved at se hvorfor den på en eller anden mystisk måde skulle ændre alle personer til at have status = online.
Kig hellere efter din php-kode og stamdata igennem - mon ikke det i virkeligheden er der skoen trykker...
Det kan jeg ikke rigtig hjælpe dig med når jeg hverken kan se siden eller koden.
Undskyld,at jeg ikke har fået svaret dig endnu beef12...Men nej jeg har ikke fundet problemmet... Hvis du vil have hele koden så er den her:(venner.php) <? session_start(); ?> <html> <head> <title>Untitled Document</title> <link rel="stylesheet" href="/style/style.css" type="text/css"> <style type="text/css"> <!-- body { background-color: #FFFFFF; } --> </style></head>
</div></td> </tr><?php include("connect.php"); $brugernavn = $_GET['brugernavn']; $pr_side = "12"; // Antal overskrifter pr side if (!isset($s)) $s = "0"; $rew_venneliste = mysql_query("SELECT * FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1' LIMIT $s, $pr_side") or die(mysql_error()); if(mysql_num_rows($rew_venneliste) < "1") { echo "<tr><td><div align=\"center\"><b>Denne bruger har ingen venner!</b></div></td></tr>"; } else { while($row_venneliste = mysql_fetch_array($rew_venneliste)){ $status_venneliste = mysql_query("SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Online' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Optaget' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Ikke til stede!' LIMIT $s, $pr_side UNION ALL SELECT * FROM venneliste inner join login on venneliste.brugernavn = login.brugernavn WHERE venneliste.brugernavn = '$brugernavn' AND godkendt = '1' AND status = 'Offline' LIMIT $s, $pr_side ") or die(mysql_error()); while($s_venneliste = mysql_fetch_array($status_venneliste)){ echo '<tr><td><img src=\"/grafik/'.s_venneliste['status'].'.gif\" border=\"0\" alt=\"'.s_venneliste['status'].'\"> - <a href=\"/community/profil.php?brugernavn=$row_venneliste[ven]\" target=\"main\">$row_venneliste[ven]</a></td></tr>'; ?>
<? } } } ?>
<tr> <td> <?
include("connect.php"); $brugernavn = $_GET['brugernavn']; $count_total = mysql_query("SELECT count(id) AS total FROM venneliste WHERE brugernavn = '$brugernavn' AND godkendt = '1'"); $total = mysql_result($count_total,0); if ($s >= $pr_side) { $previous = $s-$pr_side; echo " <a href=\"venner.php?s=$previous&brugernavn=$brugernavn\">Forrige side</a> "; } else { echo ""; } echo ""; if ($total > $s+$pr_side) { $next = $s+$pr_side; echo " <a href=\"venner.php?s=$next&brugernavn=$brugernavn\">Næste side</a> "; } else { echo ""; } echo ""; ?></td> </tr>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.