SoulGodMedlem sedan aug. 20051 200 inlägg 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 )
Någon som vet hur?
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.
PeddaMedlem sedan juni 20006 032 inlägg Precis som voigtann1 säger:
1. Lägg till ett onclick attribut på din knapp
onclick="return confirm('Är du säker på att radera?\nDu kan inte ångra dig senare!');"
2.
header('Location: sidan.php');
drewMedlem sedan mars 2007845 inlägg Och skicka aldrig POST eller GET direkt till databasen utan att skicka den genom mysql_real_escape_string() eller åtminstone addslashes() innan.
SoulGodMedlem sedan aug. 20051 200 inlägg 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å?
aasahMedlem sedan mars 20034 471 inlägg 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!
SoulGodMedlem sedan aug. 20051 200 inlägg 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?
drewMedlem sedan mars 2007845 inlägg 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.
SoulGodMedlem sedan aug. 20051 200 inlägg 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 )
drewMedlem sedan mars 2007845 inlägg Hur ser html-koden ut där knappen är?
Får du något innehåll till $_GET['id'] och sätts $_GET["do"] första gången?
SoulGodMedlem sedan aug. 20051 200 inlägg 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..
drewMedlem sedan mars 2007845 inlägg $id = mysql_real_escape_string($_GET['id']);
header('Location: samma_sida.php'); skickar tillbaka användaren till samma sida igen.
SoulGodMedlem sedan aug. 20051 200 inlägg Funkar! Tack som tusan till alla.
Ska gå igenom resten av min kod också, och se till att få in mysql_real_escape överallt!
Tack så mycket =)