Cerandin Skrevet 18. august 2011 Del Skrevet 18. august 2011 (endret) Hei! Jeg sliter med å få til å lage en select list som viser forskjellig php data etter hva jeg velger. Det jeg vil er at hvis man trykker på en kunstner i select listen, så kommer infoen om den kunstneren opp, og ingen andre. Endrer man kunstner på select listen så kommer det info om den nye kunstneren osv. her er koden jeg har foreløpig <form action="kunstnerprint.php" method="post" name="kunstnerliste" enctype="text/plain"> <select name="kunstnervisning"> <?php while($rad2 = mysql_fetch_array($list,MYSQL_ASSOC)) { $navn = $rad2['fornavn']; $etternavn1 = $rad2['etternavn']; $kid2 = $rad2['k_ID']; ?> <option value="<?php echo $kid2; ?>"><?php echo $navn; echo " "; echo $etternavn1;?></option> <?php }?> </select> </form> <?php while($rad1 = mysql_fetch_array($list2,MYSQL_ASSOC)) { $kid = $rad1['k_ID']; $fnavn = $rad1['fornavn']; $enavn = $rad1['etternavn']; $telefon = $rad1['telefon']; $adresse = $rad1['bosted']; $email = $rad1['email']; $kontonr = $rad1['kontonr']; echo "<table style='border:1px solid black;'>"; echo "<tr><td style='border-bottom:1px solid black;'>Kunstner:</td>"; echo "<td style='border-bottom:1px solid black;'>$fnavn $enavn</td></tr>"; echo "<br />"; echo "<tr><td style='border-bottom:1px solid black;'>Adresse:</td>"; echo "<td style='border-bottom:1px solid black;'>$adresse</td></tr>"; echo "<br />"; echo "<tr><td style='border-bottom:1px solid black;'>Telefon:</td>"; echo "<td style='border-bottom:1px solid black;'>$telefon</td></tr>"; echo "<tr><td style='border-bottom:1px solid black;'>E-mail:</td>"; echo "<td style='border-bottom:1px solid black;'>$email</td></tr>"; echo "<tr><td>Kontonummer:</td>"; echo "<td>$kontonr</td></tr>"; echo "<br />"; echo "<br />"; echo "</table>"; } ?> Mvh. edit: jeg får frem kunstnerene på dropdown listen, så det fungerer. Men jeg kommer meg ikke videre derfra. Endret 18. august 2011 av haawkon Lenke til kommentar
greygenic Skrevet 19. august 2011 Del Skrevet 19. august 2011 (endret) Uten å ha sjekket det (da måtte jeg selv ha satt opp en database først), blir det noe sånt: <form action="kunstnerprint.php" method="post" name="kunstnerliste" enctype="text/plain"> <select name="kunstnervisning"> <?php while ($rad2 = mysql_fetch_array($list, MYSQL_ASSOC)) { $navn = $rad2['fornavn']; $etternavn1 = $rad2['etternavn']; $kid2 = $rad2['k_ID']; echo "<option value='".$kid2."'>".$navn." ".$etternavn1."</option>"; } ?> </select> <input type="submit" name="ListeOK" value="OK"> </form> <?php if (isset($_POST['ListeOK'])) { $valgtID = $_POST['kunstnervisning']; // $list2 = mysql_query("SELECT k_ID, fornavn, etternavn, telefon, bosted, email, kontonr FROM Tabell WHERE k_ID = '".$valgtID."'"); while ($rad1 = mysql_fetch_array($list2, MYSQL_ASSOC)) { $kid = $rad1['k_ID']; $fnavn = $rad1['fornavn']; $enavn = $rad1['etternavn']; $telefon = $rad1['telefon']; $adresse = $rad1['bosted']; $email = $rad1['email']; $kontonr = $rad1['kontonr']; // ... } } else { echo "<p>Ingen valgt!</p>"; } ?> edit: Du må "renske" $valgtID, før du benytter den til å databasespørringen din! Bruk f.eks. mysql_real_escape_string(). Endret 19. august 2011 av greygenic Lenke til kommentar
Cerandin Skrevet 19. august 2011 Forfatter Del Skrevet 19. august 2011 Takker for svar! Hva mener du med å "renske" $valgtID? og såvidt jeg har forstått så er mysql_real_escape_string() en kodestreng som skal øke sikkerheten? Jeg er fersk i dette gemet, så beklager min uvitenhet! Lenke til kommentar
Milktea Skrevet 19. august 2011 Del Skrevet 19. august 2011 mysql_real_escape_string uskadeliggjør stort sett inndataen, ja. Hvis vi går ut fra spørringen i posten til greygenic: "SELECT k_ID, fornavn, etternavn, telefon, bosted, email, kontonr FROM Tabell WHERE k_ID = '".$valgtID."'" Sett at noen luringer har endret $valgtID til "0';DROP TABLE Tabell --", så blir spørringen til databasen seende slik ut: "SELECT k_ID, fornavn, etternavn, telefon, bosted, email, kontonr FROM Tabell WHERE k_ID = '0';DROP TABLE Tabell --'" Litt dårlig eksempel siden dette ikke hadde fungert uten videre på en server med PHP, men hadde det ikke vært tilfelle at PHP har en innbygd sperre slik at kun en spørring kan utføres av gangen hadde databasen din i dette tilfellet forsvunnet. Denne måten å angripe kalles en "SQL injection", og er en av de vanligste sikkerhetsfeilene. Kjører man derimot mysql_real_escape_string blir den ondsinnede strengen "0';DROP TABLE Tabell --" til noe slikt som "0\';DROP TABLE Tabell --" når du setter den inn i spørringen din, og dermed er faren over. Jeg mistenker at k_ID er et tall, så da er det kanskje likegreit å bare gjøre noe slikt: "SELECT * FROM `Tabell` WHERE `k_ID` = " . intval($k_ID) Hvis du er opptatt av sikkerhet kan jeg forøvrig anbefale deg å lese litt opp på hvordan man utfører SQL injections. Lenke til kommentar
Cerandin Skrevet 19. august 2011 Forfatter Del Skrevet 19. august 2011 (endret) Takker Det jeg sliter med er at den ikke klarer å finne ut om ListeOK blir postet. <form action="kunstnerprint.php" method="post" name="kunstnerliste" enctype="text/plain"> <select name="kunstnervisning"> <?php while($rad2 = mysql_fetch_array($list,MYSQL_ASSOC)) { $navn = $rad2['fornavn']; $etternavn1 = $rad2['etternavn']; $kid2 = $rad2['k_ID']; echo "<option value='".$kid2."'>".$navn." " .$etternavn1."</option>"; }?> </select> <input type="submit" name="ListeOK" value="OK" /> </form> <?php if (isset($_POST['ListeOK'])){ $valgtID = $_POST['kunstnervisning']; $list2 = mysql_query("SELECT * FROM 'verk' WHERE 'k_ID'= " . intval($k_ID), mysql_real_escape_string($databasetilkobling)); while($rad1 = mysql_fetch_array($list2,MYSQL_ASSOC)) { $kid = $rad1['k_ID']; $fnavn = $rad1['fornavn']; $enavn = $rad1['etternavn']; $telefon = $rad1['telefon']; $adresse = $rad1['bosted']; $email = $rad1['email']; $kontonr = $rad1['kontonr']; echo "<table style='border:1px solid black;'>"; echo "<tr><td style='border-bottom:1px solid black;'>Kunstner:</td>"; echo "<td style='border-bottom:1px solid black;'>$fnavn $enavn</td></tr>"; echo "<br />"; echo "<tr><td style='border-bottom:1px solid black;'>Adresse:</td>"; echo "<td style='border-bottom:1px solid black;'>$adresse</td></tr>"; echo "<br />"; echo "<tr><td style='border-bottom:1px solid black;'>Telefon:</td>"; echo "<td style='border-bottom:1px solid black;'>$telefon</td></tr>"; echo "<tr><td style='border-bottom:1px solid black;'>E-mail:</td>"; echo "<td style='border-bottom:1px solid black;'>$email</td></tr>"; echo "<tr><td>Kontonummer:</td>"; echo "<td>$kontonr</td></tr>"; echo "<br />"; echo "<br />"; echo "</table>"; } } else { echo "<p>Ingen valgt!</p>"; } ?> Skriver jeg for eksempel echo "listeok ikke funnet" etter "if (isset($_POST['ListeOK'])){" får jeg ikke opp noe som helst, og den hopper rett til else'n som er "ingen valgt". Er det noen krusseduller jeg har glemt? Takker så meget for svarene så langt PS. Har dere noen eksempler på hvordan mysql_real_escape_string kan fungere i forhold til min kode? jeg prøvde men jeg vet ikke om det fungerte eller hva det gjorde edit: Etter litt nøyere testing så vet jeg med sikkerhet at ListeOK ikke blir postet, men den kjører Post funksjonen. bruker jeg if ($_SERVER['REQUEST_METHOD'] == 'POST'){ klarer den å få den frem, men jeg får undefined index på kunstnervisning. bruker jeg if (isset($_POST['ListeOK'])) { skjer det ingenting. Endret 19. august 2011 av haawkon Lenke til kommentar
Milktea Skrevet 19. august 2011 Del Skrevet 19. august 2011 Gjetter på at problemet er at du har satt enctype til text/plain. text/plain er et litt spesielt tilfelle. Den ble brukt før i tiden, men jeg tror ikke at den noen sinne har vært en standard fra W3C sin side. Dermed blir det bare sirkus og vilkårlig oppførsel fra de ulike nettleserne og web-serverne. Lenke til kommentar
Cerandin Skrevet 19. august 2011 Forfatter Del Skrevet 19. august 2011 Tusen hjertelig, det var det som var problemet gitt! 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å