Gå til innhold

[Løst] Vise forskjellig php data ved hjelp av select list


Anbefalte innlegg

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 av haawkon
Lenke til kommentar
Videoannonse
Annonse

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 av greygenic
Lenke til kommentar

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

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 :p

 

 

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 av haawkon
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...