webForumDet fria alternativet

Problem med att radera i lista

3 svar · 454 visningar · startad av Blockqoute

BlockqouteMedlem sedan dec. 200380 inlägg
#1

Hej,

Nu har jag dykt på ett skumt problem (iaf enligt mig själv). Det är så att jag har en lista med butiker där varje varje butiker har en knapp "Ta bort" för att ta bort butiken. Problemet jag dykt på är att när jag väljer att radera en butik så raderas alltid den som är sorterad sist. Butikerna är sorterade i bokstavsordning medan det som sidan kontrollerar (eller iaf ska kontrollera) är vilket butiks-id det är man vill radera.

Koden ser ut som följer just nu:

...                                                         //tagit bort lite kod
if(isset($_POST['tabort'])){
    $id=$_POST['id'];                                        //här kollar den vilket butik-id som ska tas bort
		mysql_query("DELETE FROM butiker WHERE id='$id'");           //här tar den bort en butik
}

?>
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
...                                                                        //tagit bort lite kod
							<tr><td colspan='2'><b>Välj en butik du vill redigera:</b></td>
                            <td width="150">&nbsp;</td><td><a href="butik_add.php">Klicka här för att skapa en ny butik</a></td></tr><tr><td>
							<form name="butik" id="butik" action="butik_adm.php" method="post">
							<?
							$sql2="SELECT id, butik FROM butiker ORDER BY butik ASC";             //här hämtar den information som behövs för att skapa listan från tabellen butiker och sorterar dessa i bokstavsordning efter butiksnamn
							$result2=mysql_query($sql2);
							// uses a while loop to display our categories into a dropdown list.
						    while($rad2 = mysql_fetch_array($result2)) 
   						    { 
							  $butik=$rad2['butik'];
							  echo "<input type='hidden' name='id' value='" .$rad2["id"]. "'>";     //här har jag ett dolt fält med namnet id som tas med upp till själv ta bort-satsen från början
							  echo "<tr><td>".$rad2["id"]."</td>";                         //detta är bara för att skriva ut id-numret i listan
							  echo "<td><a href='butik_red.php?id=".$rad2["id"]."'>".$butik."</a></td>                                                          //detta är för att lista namnet på butikerna i listan samt gör namnet klickbart så man kan komma vidare in till butiken
							  <td><input type='submit' name='tabort' value='Ta bort' style='font-family: Verdana; color: #000000; font-size: 9px; background-color: #E1E1E1; border: 3px outset #8B8B8B'></td></tr>";
   						    }?>
                            </form></td></tr>
...                                                                     //tagit bort lite kod

Min spontana tanke är att den raderar i bokstavsordning och tar från slutet istället för att titta vilket butiks-id det är som ska raderas. Men jag kan inte hitta var felet är. Är felet att jag sorterar butikerna efter bokstavsordning när jag hämtar de från databasen? Men om så är fallet, vad i koden är det som säger att den ska göra det?

Tacksam för allt hjälp!

GunnarDMedlem sedan juni 20014 290 inlägg
#2

Först, tänk på "SQL injection" du tar ett formulär fät direkt till ett SQL uttryck.

Några kollar du kan göra är att kontrollera att delete uttrycket verkligen blir rätt. Ett enkelt test är att skriva ut det och se om det ser rätt ut.

Kolla också på den genererade html koden att id sätts rätt i formuläret.

Är id unikt?

Den raderar inte i bokstavsordning, uttrycket "DELETE FROM butiker WHERE id='$id'" raderar bara dom raderna där uttrycket id='$id' uppfylls.

ShakorMedlem sedan aug. 201035 inlägg
#3

Nu kanske jag misstar mig, men borde det inte vara en _GET på "id" i och med att du skickar den med URL:en?

gällande inmatningen så borde du köra lite säkerhetskontroller på det..

t.ex.
trim(stripslashes($id));
sen kolla med ctype_digit($id) så att det verkligen (bara) är en int.. :)
och använda dig av mysql_real_escape_string när du kör SQL-frågan.

BlockqouteMedlem sedan dec. 200380 inlägg
#4

Löste problemet nu, det var att jag av någon anledning placerat FORM-taggarna utanför WHILE-satsen. Flyttade jag in de innanför så fungerade det utmärkt.

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)