Jag kör följande kod för att ta bort rader ur min databas:
<?
if ($_GET["do"] == "del") {
$id = $_POST['id'];
$delete = "DELETE FROM rec WHERE id='$id'";
mysql_query($delete) or die("Det gick inte att ta bort information!");
} ?>
Och allting funkar, men däremot skulle jag vilja göra om 2 saker:
1. Att komma upp någon form av "är du säker-ruta"
2. När man tagit bort det ( efter bekräftan ), vill jag kunna skicka användaren till en viss sida ( redirect )
Du bör nog kolla igenom din databas struktur, ett id som en sträng är inget jag rekommendera alls.
1. Ja, javascript popup går på länken/formuläret för att ta bort, ha en javascripts confirm, om den retunera true, skicka vidare och posten tas bort.
2. redirect gå med header() om du placera koden innan någon annan data har renderats ut.
Jag har en kolumn som heter ID, och använder den som identifierare när jag hämtar enstaka rader ( och i detta fall skall ta bort en viss rad )
Vad är det för negativt med att ha den som sträng ( som jag har nu? )
* EDIT *
Kör nu följande kod för att ta bort recensioner
<?
if ($_GET["do"] == "del") {
//$id = $_GET['id'];
$delete = "DELETE FROM rec WHERE id=".$_GET['id'];
mysql_query($delete) or die("Det gick inte att ta bort information!");
} ....
Det roliga är att jag måste klicka först en gång, ( så laddas sidan om ) och sen klicka igen..
DÅ tas raden bort.. Varför är det så?
Vad tror du händer om $_GET['id'] (som hämtas från querysträngen och som användarna mycket enkelt kan ändra i själva) innehåller
1 OR 1=1
? Följ drews råd ovan!
Kan förstå det du menar nu ang ID .. Grejen är såhär, varje annat fält ( band, låt ) o.s.v. kan det finnas flera som har samma innehåll.. kan vara att 5 / 6 har samma innehåll..
Hur gör jag då? Och även om jag t.ex gör en egen kolumn som är "cid" eller "valfritt" och kör = 1 på dom.. så kan användaren ändå ändra koden själv?
Om du kör det genom mysql_real_escape_string() eller addslashes() innan du skickar det till databasen så gör det inget om användaren ändrat koden. Det läggs in som en del i strängen. Men om du skickar den direkt till databasen så raderas allt.
Har du id't som en int så kör du intval() istället.
Men skicka aldrig GET eller POST direkt till databasen.
Okej - aldrig tänkt så långt..
är inget proffs på det här, jag pillar och GOOGLAR + WF'ar mig till alla svar *ler*
Ska ordna till det ..
Men min fråga kvarstår på ett problem.. nu klickar jag på delete-knappen,
och ändå händer inget .. men klickar jag åp SAMMA knapp igen , så tas den bort.. varför?
( klickar jag på en annan knapp så måste jag ändå klicka igen på den )
HIttade felet själv.. felet är inte att man måste klicka 2 gånger,
utan felet är att DEL-funktionen körs nedanför listan jag har ( i en div längre ner )..
Jag har en lista på recensioner .. och när man kör delete så körs den lite längre ner,
vilket då gör att sidan inte uppdateras...
Kan man lägga in någon form av "refresh page" efter man har kört delete?
Min kod ser ut såhär:
<?
if ($_GET["do"] == "del") {
//$id = $_GET['id'];
$delete = "DELETE FROM rec WHERE id=".$_GET['id'];
// mysql_real_escape_string($delete) or die("Det gick inte att ta bort information!");
mysql_query($delete) or die("Det gick inte att ta bort information!");
}
och som ni ser på den raden jag har kommenterat bort.. kör man inte real_escape så?
Eller har jag förstått den fel? För när jag kör den, så tar den inte bort något..