[php] verwijderen meerdere geselecteerde items

Pagina: 1
Acties:
  • 195 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Hallo,

Voor een site heb ik een foto-upload script gemaakt. Die fotos zet ik in een map en de bestandsnaam in de database.

Dan krijg ik eens lijstje met de foto's met daarvoor een selectie knopje. Waarvan de name="id" en de value de bijbehorende id van die foto.

Als ik nu meerdere fotos wil verwijderen lukt dat niet aangezien ik dan in de url bijv. krijg.

delete.php?id=1&id=4&id=8

Weet iemand hoe ik dit kan aanpassen zodat ik wel meerdere fotos tegelijk kan deleten?

dit is trouwens de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
                      <?
                $pagID = $_REQUEST["id"];
                
    $qry = "SELECT id, url, date, size FROM images  ORDER BY date";
        $result3 = mysql_query($qry) or die("Verbinding mislukt.");
    while ($row3 = mysql_fetch_array($result3)) {
      $id = $row3["id"];
      $url = $row3["url"];
       $size = $row3["size"];
      $date = stripslashes($row3["date"]);

      ?>
      
                  <tr bgcolor="#ffffff">
                    <td class="site_sub_page_name"><input type="checkbox" name="id" value="<?=$id?>"></td>
                    <td><span class="site_sub_page_name"><a href="images.php?id=<?=$id?>"><?=$url?></a></span></td>
                    <td><span class="site_sub_page_name"><?=$date?></span></td>
                    <td><span class="site_sub_page_name"><?=$size?></span></td>
                  
                  </tr>
               
               
               
                  
                    <?
    }
  ?>


avast bedankt,

groetjes!

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Met checkboxes een array doorgeven via POST :)

[ Voor 11% gewijzigd door AtleX op 04-08-2004 14:15 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Indeed. Geef je form-elementen de naam "id[]" in plaats van "id", en lo and behold!, $_REQUEST["id"] is nu een array die de IDs van elke foto bevat.

Bovendien is het voor deze actie inderdaad netter een POST te gebruiken ipv. een GET. Referentie:
If the processing of a form is idempotent (i.e. it has no lasting observable effect on the state of the world), then the form method should be GET. Many database searches have no visible side-effects and make ideal applications of query forms.

- -
If the service associated with the processing of a form has side effects (for example, modification of a database or subscription to a service), the method should be POST.

bron
officiële bron

[ Voor 73% gewijzigd door Verwijderd op 04-08-2004 14:20 ]


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Ik heb nu "id[]" dervan gemaakt.

Maar wat bedoel je precies met

lo and behold! ??

Ik heb nu even dit bestand gemaakt om te testen:

code:
1
2
3
4
5
6
7
8
9
10
<?php



$ID = ($_REQUEST['id']);


echo $ID ;

?>


alleen dan geeft hij array weer.....hoe krijg ik dan nu mijn id's??

sorry ben nog maar n leek en moet nog veel leren ;)

Acties:
  • 0 Henk 'm!

Verwijderd

als je je array doorloopt in een lusje en de waarde echoed krijg je je id's te zien van de geselecteerde foto's

simpel voorbeeldje

PHP:
1
2
3
4
foreach ($_POST["id"] as $value)
{
  echo "id: " . $value . "<br />";
}

[ Voor 37% gewijzigd door Verwijderd op 04-08-2004 14:35 ]


Acties:
  • 0 Henk 'm!

Verwijderd

of nog sneller:
PHP:
1
2
3
<?
print_r($_POST);
?>

tenminste, als je het alleen wil zien; handig voor debuggen.

[ Voor 60% gewijzigd door Verwijderd op 04-08-2004 14:43 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dat is alleen maar om te visualiseren wat er gepost is, daarmee kan je niets doen met de waardes die in de array $_POST["id"] staan...

[edit]
hmmm, moet je niet je bericht snel editten he :)

[ Voor 23% gewijzigd door Verwijderd op 04-08-2004 14:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hehe, ja, sorry. Had beter even mijn post over kunnen lezen voor ik op Verstuur drukte.

Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
heb t werkend :) bedankt allen!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?

  include("../include/php/db.inc.php");
  
  
foreach ($_REQUEST['id'] as $value) 


{ 
  
$sql_statement = "DELETE FROM images WHERE id = $value";

$resultset = mysql_query($sql_statement);


if($resultset == 1) echo "<META HTTP-EQUIV='refresh' CONTENT='0; URL=images.php?id=1'>";
if($resultset <> 1) echo "<script language=javascript>window.alert('Er is een fout opgetreden')</script>";
  
  
}
?>



dit is het geworden.

Nu nog kijken hoe ik dan ook de fotos uit de desbetreffende map krijg gedelete 8)7

hehe...is me niet niks php leren :)

Acties:
  • 0 Henk 'm!

Verwijderd

Dan zou ik toch deze manier van opzetten gebruiken...

PHP:
1
2
3
4
5
6
7
8
9
10
$string= "";

foreach ($_REQUEST['id'] as $key => $value)
{
  $string .= ($key == 0) ? $value : " OR " . $value
}

$sql_statement = "DELETE FROM images WHERE " . $string;

// dan hier de rest van de uitvoer, zo connect je netjes voor je deletes 1x met de db...

Acties:
  • 0 Henk 'm!

Verwijderd

He, je was me voor. Dit had ik er namelijk van gemaakt (komt op hetzelfde neer):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
    include("../include/php/db.inc.php");
  
    foreach ($_REQUEST['id'] as $value) { 
        $ids = $value . ", ";
    }
    $ids = substr($ids, 0, strlen($ids)-2);
    
    $sql_statement = "DELETE FROM images WHERE id IN (" . $ids . ")";

    $resultset = mysql_query($sql_statement);

    if($resultset == 1) echo "<META HTTP-EQUIV='refresh' CONTENT='0; URL=images.php?id=1'>";
    if($resultset <> 1) echo "<script language=javascript>window.alert('Er is een fout opgetreden')</script>";
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 04 augustus 2004 @ 14:59:
Dan zou ik toch deze manier van opzetten gebruiken...

PHP:
1
2
3
4
5
6
7
8
9
10
$string= "";

foreach ($_REQUEST['id'] as $key => $value)
{
  $string .= ($key == 0) ? $value : " OR " . $value
}

$sql_statement = "DELETE FROM images WHERE " . $string;

// dan hier de rest van de uitvoer, zo connect je netjes voor je deletes 1x met de db...
Zou ik niet doen, vind ik minder overzichtelijke code dan vrolijk ieder individueel itempje wissen.

Als je toch die kant op wilt kan het nog 'beter':

PHP:
1
$sql_statement = "DELETE FROM images WHERE id in (" . join(',',$_REQUEST[id]) . ")";


(wel even checken of er legale id-tjes in het request zitten)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 04 augustus 2004 @ 15:09:
[...]


Zou ik niet doen, vind ik minder overzichtelijke code dan vrolijk ieder individueel itempje wissen.

Als je toch die kant op wilt kan het nog 'beter':

PHP:
1
$sql_statement = "DELETE FROM images WHERE id in (" . join(',',$_REQUEST[id]) . ")";


(wel even checken of er legale id-tjes in het request zitten)
_/-\o_

Acties:
  • 0 Henk 'm!

Verwijderd

twisted2000 schreef op 04 augustus 2004 @ 14:52:
Nu nog kijken hoe ik dan ook de fotos uit de desbetreffende map krijg gedelete 8)7
Lees en leer php.net handig te gebruiken :)

1. Je wilt een bestand verwijderen, in het engels is dat "delete".
2. Je gaat naar php.net en vult achter de / (php.net/) "delete" in.
3. Je komt op deze pagina: http://nl.php.net/manual/nl/function.delete.php
4. Je leest dat dit eigenlijk geen goede functie is, er wordt "unlink" of "unset" aangeraden
5. Je wilt een bestand en geen variabele verwijderen, dus gebruik je unlink: http://nl.php.net/manual/nl/function.unlink.php
unlink

(PHP 3, PHP 4 , PHP 5)
unlink -- Verwijdert een bestand
Beschrijving
bool unlink ( string filename)

Verwijderd filename. Is gelijk aan de Unix C unlink() functie. Geeft TRUE terug bij succes, FALSE indien er een fout is opgetreden.

Opmerking: Vanaf PHP 5.0.0 kan unlink() ook gebruikt worden met sommige url wrappers. Kijk op Aanhangsel L voor een lijst met welke wrappers unlink() ondersteunen.

Zie ook rmdir() om folders te verwijderen.

Acties:
  • 0 Henk 'm!

Verwijderd

ik heb nog een leuke routine.

PHP:
1
2
3
4
5
6
7
8
9
10
function getIDsFromPost($post)
{
    $str = "";
    foreach ($post as $key)
    {
        $str .= $key . ", ";
    }

    return substr($str, 0, strlen($str) -2);
}


dit kan je dus gebruiken als je bv
code:
1
2
3
4
<input type="checkbox" name="weblog[]" value="weblogid">
<input type="checkbox" name="weblog[]" value="weblogid1">
<input type="checkbox" name="weblog[]" value="weblogid2">
<input type="checkbox" name="weblog[]" value="weblogid3etc">

en dan kan je van al je checkbox items dus 1 query maken, ik doet het meestal zo.

PHP:
1
2
$keys = getIDsFromPost($_POST['weblog']);
$sql = "DELETE FROM `weblog` WHERE `id` IN (" . $keys . ")";


je kan ook nog met een if statement controlleren of er een $keys is aangemaakt ofdat ie gewoon leeg is...

Succes! :)

[ Voor 16% gewijzigd door Verwijderd op 04-08-2004 18:17 ]


Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Verwijderd schreef op 04 augustus 2004 @ 18:17:
ik heb nog een leuke routine.

PHP:
1
2
3
4
5
6
7
8
9
10
function getIDsFromPost($post)
{
    $str = "";
    foreach ($post as $key)
    {
        $str .= $key . ", ";
    }

    return substr($str, 0, strlen($str) -2);
}
Da's hetzelfde als:

PHP:
1
2
3
4
function getIDsFromPost($post)
{
    return implode(',',$post);
}


.. en er is dus geen aparte functie voor nodig.
Zie post van Ooypunk (join is een alias van implode).

/edit - inderdaad, Xenna's post dus :)

[ Voor 8% gewijzigd door Anders op 04-08-2004 20:43 ]

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

Verwijderd

Anders schreef op 04 augustus 2004 @ 19:10:
[...]


Da's hetzelfde als:

PHP:
1
2
3
4
function getIDsFromPost($post)
{
    return implode(',',$post);
}


.. en er is dus geen aparte functie voor nodig.
Zie post van Ooypunk (join is een alias van implode).
Was mijn post, maar ik heb ook nog wel stommere dingen gedaan in het verleden, hoor citnetx.

En die code draait ook nog her en der *blush* ;-)

(ik gebruik trouwens altijd join vanwege mijn Perl achtergrond)

Acties:
  • 0 Henk 'm!

Verwijderd

Raar eigenlijk, dat ik wel altijd explode gebruik om arrays uit elkaar te trekken, maar niet implode om het omgekeerde te doen. 8)7
Nou ja, vanaf nu dan maar. :)
Pagina: 1