Gå til innhold

markere rader som skal slettes


Anbefalte innlegg

Hei...

 

Jeg trodde ikke at dette skulle bli noe problem, men akk..

 

Jeg ønsker å ha en liten checkbox til høyre for hver rad i en tabell. Alle markerte rader skal kunne slettes med en knapp nederst på siden.

 

Problemet mitt kom da jeg skal submitte formen. Hvis jeg da har krysset av for 3 'slettinger' kommer jo disse slik i url'en:

 

...index.php?del=6&del=37&del=156

 

Hvordan kan jeg få sendt alle over slik at jeg kan hente veridene på vanlig måte? Kan jeg evt. få lagt dem inn i en enkel variabel som array før jeg sender?

Lenke til kommentar
Videoannonse
Annonse
Om jeg ikke tar helt feil, kan du kalle checkboxene for del[1], del[2], del[3], osv, for å få dem som et array i targetfila. Så bruker du bare en foreach() eller while() for å generere de ulike checkboxene.

5860246[/snapback]

 

Det går også greit å kalle alle sammen del[] osv.

 

Er ikke sikker på om dette går når du sender dem som GET, men med POST virker det

Lenke til kommentar

ikke noe problem det:

<input type="checkbox" name="slett[]" value="1"><br>
<input type="checkbox" name="slett[]" value="2"><br>
<input type="checkbox" name="slett[]" value="3"><br>
osv...

Du kan jo her bruke php til å generere riktige value-verdier.

 

foreach($_POST['slett'] as $element)
{
mysql_query("spørring for å slette.");

 

Sånn jeg ville gjort det tror jeg, men har aldri laget dette før

Endret av hockey500
Lenke til kommentar

Jeg har gjort det sånn:

 

 

form.php

<form action="slett.php">
<input type="checkbox" name="slett[]" value="1"><br>
<input type="checkbox" name="slett[]" value="2"><br>
<input type="checkbox" name="slett[]" value="3"><br>
<input type="submit" name="submit" value="Slett valgte elementer">
</form>

 

slett.php

<?php

// Mysql kobling her. Legg til!

$query = "DELETE FROM innlegg WHERE ";

if(sizeof($_POST['slett']) < 1) {

echo "
Du har ikke valgt en ID!
<br /><br /><a href=\"javascript:history.back(-1)\">Tilbake</a>
";
}
else
{

foreach ($_POST['slett'] as $id) {

$sjekker_id = mysql_query("SELECT * FROM innlegg WHERE id = '".$id."'") or die(mysql_error());
if(mysql_num_rows($sjekker_id) == 0) {

echo "
Denne ID'en <strong><u>".$id."</u></strong> finnes ikke!
<br /><br /><a href=\"javascript:history.back(-1)\">Tilbake</a>
";
exit;

}

$query .= " `id` = '$id' OR";
}

$query = substr($query, 0, -3);
$result = mysql_query($query) or die(mysql_error());

if(sizeof($_POST['slett']) == 1) {

$print = "Innlegget";

}
else
{

$print = "Innleggene";

}

echo "
".$print." ble slettet!
<br /><br /><a href=\"javascript:history.back(-1)\">Tilbake</a>
";

}

?>

 

Her har du noe å starte med.

Endret av ThaMezzy
Lenke til kommentar

Ser du ikke hva jeg gjør. Jeg starter query'en før foreach() og ender den etter foreach().

 

Selve queryen består kun av: `id` = '$id' OR

 

Det vil si at den går gjennom alle i foreach(), i dette tilfelle.

Når foreach er slutt så tar jeg å minuser tegn slik at OR ikke står tomhendt på slutten. Got it?

Lenke til kommentar

ThaMezzy: Noen tips til koden din her:

Først og fremst er du meget utsatt for sql-injection. Personlig ville jeg løst det med følgende funksjon

function is_numeric_array($array)
{
if (is_array($array))
{
 $count = count($array);
 for ($i = 0; $i < $count; $i++)
 	if (!is_numeric($array[$i]))
   return false;
 return true;
}
else 
 return is_numeric($array);
}

 

Det andre er at arrayen du får inn er sammenhengende numerisk indeksert. Derfor bør du bruke for og ikke foreach siden foreach er en del treigere enn for.

 

Edit: I tillegg er det særdeles unødvendig å sjekke om de IDene finnes. Det genereres ikke noen feilmelding hvis det ikke finnes noen rad med den bestemte IDen i en DELETE-spørring.

Endret av Ernie
Lenke til kommentar

Jeg skrev den koden nå rett inn i nettleseren. Jeg la ikke til slike valideringer nå siden jeg ville bare gi han en god start. Jeg validerer alltid input til vanlig så vær så snill.

 

Og den som sjekker om id'en finnes funker garantert. Prøvde den ut selv.

Lenke til kommentar
Og den som sjekker om id'en finnes funker garantert. Prøvde den ut selv.

5867858[/snapback]

Klart den fungerer, men kvifor køyre den når MySQL ikkje sender ei feilmelding i DELETE-spørringer?

Det er berre dårlig ressursbruk, om du spør meg. :)

Endret av Henrik Lied
Lenke til kommentar
Og den som sjekker om id'en finnes funker garantert. Prøvde den ut selv.

5867858[/snapback]

Klart den fungerer, men kvifor køyre den når MySQL ikkje sender ei feilmelding i DELETE-spørringer?

Det er berre dårlig ressursbruk, om du spør meg. :)

5868543[/snapback]

Nettopp :) Finnes de ikke så er de jo slettet, noe som jo også er poenget med scriptet.

Lenke til kommentar
Og den som sjekker om id'en finnes funker garantert. Prøvde den ut selv.

5867858[/snapback]

Klart den fungerer, men kvifor køyre den når MySQL ikkje sender ei feilmelding i DELETE-spørringer?

Det er berre dårlig ressursbruk, om du spør meg. :)

5868543[/snapback]

Nettopp :) Finnes de ikke så er de jo slettet, noe som jo også er poenget med scriptet.

5868691[/snapback]

 

Jeg sjekker jo før den sletter. Ser du ikke det?

Hvis den ikke finnes så bruker jeg exit; til å avslutte resten.

Lenke til kommentar
Og den som sjekker om id'en finnes funker garantert. Prøvde den ut selv.

5867858[/snapback]

Klart den fungerer, men kvifor køyre den når MySQL ikkje sender ei feilmelding i DELETE-spørringer?

Det er berre dårlig ressursbruk, om du spør meg. :)

5868543[/snapback]

Nettopp :) Finnes de ikke så er de jo slettet, noe som jo også er poenget med scriptet.

5868691[/snapback]

 

Jeg sjekker jo før den sletter. Ser du ikke det?

Hvis den ikke finnes så bruker jeg exit; til å avslutte resten.

5869621[/snapback]

Jamen, hvorfor bruker du tid på det? Om du kjører en DELETE-spørring med bare en masse verdier som ikke eksisterer så får du aldri noen warning e.l uannsett! Poenget mitt er at det er totalt unødvendig å sjekke det på forhånd.

Lenke til kommentar
På den måten ja. Jeg trodde du mente at det ikke ville fungere.

At det er unødvendig er jo en annen ting.

 

Men nå får man hvertfall en feilmelding og da vet man hva som er feil.

5869703[/snapback]

Ja, også kjører du ørten unødvendige SELECT-spørringer. Slikt tar tid, mer tid enn en unødvendig DELETE-spørring, men for all del :)

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...