Arcus Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 (endret) Har et gammelt telefonliste system på jobben laget i PHP og MYsql. Jeg ønsker å forberde denne litt, men mangler elementær kunnskap. Nesten alle spørringer er bygd opp på følgende måte : if (!empty($_POST['depSearch'])) { $depId = $_POST['departments']; $sql = "SELECT * FROM people WHERE avdeling = ".$depId; $result = $db->query($sql); if (is_array($result)) { echo "<table width=\"99%\">"; echo "<tr class=\"topRow\">"; echo "<td>Brukerident</td>"; echo "<td>Fornavn</td>"; echo "<td>Etternavn</td>"; echo "<td>Kontortelefon</td>"; echo "<td>Enhet</td>"; echo "<td>Avdeling</td>"; echo "<td>Detaljer</td>"; echo "</tr>"; foreach ($result as $r) { echo "<tr>"; echo "<td>"; if (!empty($r['brukerident'])) { echo $r['brukerident']; } echo "</td>"; echo "<td>"; if (!empty($r['fornavn'])) { echo $r['fornavn']; } echo "</td>"; echo "<td>"; if (!empty($r['etternavn'])) { echo $r['etternavn']; } echo "</td>"; echo "<td>"; if (!empty($r['telefonKontor'])) { echo $r['telefonKontor']; } echo "</td>"; echo "<td>"; if (!empty($units[$r['enhet']]['unitName'])) { echo $units[$r['enhet']]['unitName']; } echo "</td>"; echo "<td>"; if (!empty($deps[$r['avdeling']]['depName'])) { echo $deps[$r['avdeling']]['depName']; } echo "</td>"; echo "<td><a href=\"".$self."?viewDetails=".$r['brukerident']."\">Klikk for detaljer</a></td>"; echo "</tr>"; } echo "</table>"; } else { echo "<p>Fant ingen personer i ".$deps[$depId]['depName'].".</p>"; } } Det jeg ønsker er å få lagt inn en sorteringsmulighet. Ideelt slik at jeg kan trykke på en av overskriftene og sortere etter valgt overskrift , alternativt sortere default etter etternavn. Har lekt meg litt selv med den siste muligheten, men uten suksess Klarer ikke å få noe resultat med ORDER BY , Dette er nok pga ".$depId; $sql = "SELECT * FROM people WHERE avdeling = ".$depId; Noen som kan peke meg i riktig vei ? Endret 15. mars 2010 av Arcus Lenke til kommentar
medlem-68510 Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 (endret) Sanitise your inputs! Se på mysql_real_escape_string(). Du vil sikkert har en query ala: "SELECT * FROM people WHERE avdeling=' . mysql_real_escape_string($_POST['departments']) . "'" Du kan legge på "ORDER BY felt" for å sortere etter innholdet i "felt". Videre kan du legge på ASC eller DESC for å reversere sorteringen. Endret 15. mars 2010 av Jckf Lenke til kommentar
MikkelRev Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 Gjør overskriftene om til lenker. Feks Brukerident blir <a href="?order=Brukerident">Brukerident</a> Så $sql = "SELECT * FROM people WHERE avdeling = $depId ORDER BY ".$_GET["order"]; Lenke til kommentar
medlem-68510 Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 Mikkel sin kode er også veldig skummel da den er sårbar for SQL injection. Lenke til kommentar
Arcus Skrevet 15. mars 2010 Forfatter Del Skrevet 15. mars 2010 Takk for tipsene.. Skal forske litt på det i morgen. Lenke til kommentar
MikkelRev Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 Mikkel sin kode er også veldig skummel da den er sårbar for SQL injection. Er klar over det. Pointet var bare å vise en fremgangsmåte til det han spør om, ikke å gi han en komplett løsning med masse fornuftige tilleggsfunksjoner. Lenke til kommentar
Crowly Skrevet 19. mars 2010 Del Skrevet 19. mars 2010 (endret) "SELECT * FROM people WHERE avdeling='" . mysql_real_escape_string($_POST['departments']) . "'" Du hadde glemt en " Noen alternative måter å bygge opp sql'en på. // kontroller $_GET og $_POST (etter hva som er brukt) her for gyldig verdier og annen sikkerhet $order_by=mysql_real_escape_string($_GET['order']); $departments=mysql_real_escape_string($_GET['departments']); // alt. 1 $sql="SELECT * FROM people WHERE avdeling='" . $departments . "' ORDER BY ".$order_by); // alt. 2 $sql=sprintf("SELECT * FROM people WHERE avdeling='%s' ORDER BY %s", $departments,$order_by); // alt. 3 $sql="SELECT * FROM people WHERE avdeling='".$departments."'"; $sql.=" ORDER BY ".$order_by; Endret 19. mars 2010 av Crowly Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå