Visualizzazione risultati 1 fino 22 di 22

Discussione: [php] Cancellare file multipli usando checkbox

  1. #1
    Guest

    Predefinito [php] Cancellare file multipli usando checkbox

    Ciao sapete darmi dei consigli su come possa fare a cancellare dei file usando i checkbox...
    tipo come succede su altervista con i messaggi...^^

  2. #2
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    per utilizzare checkbox in php, per esempio scrivi un input nel form html:
    Codice HTML:
    <form method='post' action='<? echo $phpself; ?>' name='messaggi'>
    
    //prelevi i messaggi dalla tabella del db dove sono memorizzati e per ogni messaggio //crei la casella da spuntare per la cancellazione
    
    <input type="checkbox" name="delete" value=""/> Cancella il messaggio 
    
    //completi il form con i bottoni invio, ecc...
    
    </form>
    poi effettui il controllo in php:
    Codice PHP:
    if ($_POST["delete"] == true) //cancella il messaggio
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  3. #3
    Guest

    Predefinito

    Si ma lui come capisce quale file o cartella cancellare poi se sono più di uno....
    Quello che dici tu non centra perchè le cose che devo cancellare sono sul mio sito
    perchè uso
    Codice PHP:
    glob('../*');
    Codice:
    Codice PHP:
    <form name="Form" action="">
    <
    input name="checkbox1" type="checkbox">File1
    <input name="checkbox1" type="checkbox">File2
    <input name="checkbox1" type="checkbox">File3
    </form>
    Funzioni php

    Cancella la cartella:
    Codice PHP:
    function Cancella_Cartella($dir){
    if(
    is_dir($dir)){
    if(
    rmdir($dir)){
    $cancella = 'La Directory è stato cancellata';
    }else{
    $cancella = "Impossibile cancellare La Directory";
    }}else{
    $cancella = 'La Directory non esiste';
    }
    return
    $cancella;
    }
    Cancella il file:
    Codice PHP:
    function Cancella_File($file){
    if(
    file_exists($file)){
    if(
    unlink($file)){
    $cancella = "Il File è stato cancellato";
    }else{
    $cancella = "Impossibile cancellare il File";
    }}else{
    $cancella = 'Il File non esiste';
    }
    return
    $cancella;
    }

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ma lui ha detto checkbox multipli:
    Codice PHP:
    foreach($_POST['delete'] as $file) { // con dovuti controlli su file, non vorrai farti cancellare altri file..
    unlink($file);
    }
    Ultima modifica di javascripter : 02-06-2010 alle ore 15.00.11

  5. #5
    Guest

    Predefinito

    si pero vorrei fare che se e un file chiama la funzione
    Cancella_File
    se e un cartella chiama la funzione
    Cancella_Cartella

  6. #6
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    il mio era solo un esempio per i messaggi, per messaggi multipli, con un id per ogni messaggio:

    Codice PHP:
    <form method="post" action="<? echo $phpself; ?>">

    <?
    //connessione al db
    $messaggi=mysql_query("select * from messaggi");
    while(
    $array=mysql_fetch_array($messaggi)){
    echo
    "<tr>";
    echo
    "<td><input type=\"checkbox\" name=\"item[]\" value=\"$array[id]\"></td>";
    echo
    "<td>$array[messaggio]</td>";
    echo
    "</tr>";
    }
    ?>

    <input type="submit" value="cancella">
    </form>

    <?
    $item
    =$_POST['item'];
    //connessione al db
    foreach ($item as $id){
    if(
    strlen($id)>0){
    $query="delete from messaggi where id='$id'";
    $messaggi=mysql_query("$query");
    if(
    $messaggi) echo"elminazione di $id eseguita<br>";
    else echo
    "elminazione non eseguita<br>";
    }
    }
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  7. #7
    Guest

    Predefinito

    io non devo cancellare dei messaggi sul db...
    ma devo cancellare dei file e cartelle tramite la selezione dei checkbox...

  8. #8
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    tramite il db memorizzi gli id di ogni file che salvi in una cartella con la funzione copy o
    move_uploaded_file, e dai all'id la data.

    oppure all'id dai il nome del file....

    quindi richiami l'id di ogni file stampando per ogni file il checkbox e il file name

    per cancellare il file utilizzi la funzione @unlink
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  9. #9
    Guest

    Predefinito

    perchè devo usare il db in questo modo...
    io uso la funzione glob che mi dice tutti i file che sono sul mio sito...
    vorrei fare che cliccando sui vari checkbox e poi su un pulsante...
    mi cancella i file e le directory usando quelle funzioni che prima ho postato....

  10. #10
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    senza usare il db, ho fatto così e funziona, tu puoi modificare inserendo le tue funzioni...

    per vedere come funziona, per una dimostrazione:
    http://eurosalute.altervista.org/rotating_banner/

    per caricare altre immagini
    http://eurosalute.altervista.org/rotating_banner/admin

    il codice php della pagina index.php, dove ho inserito il codice con il checkbox multipli:
    Codice PHP:

    <?
    $ext_ammesse
    =array('.jpg','.jpeg','.gif','.png');
    $cartella="images/";

    echo
    "<p></p>Lista File presenti nella cartella ==> ".$cartella."<p></p>";

    if (
    $_POST['cancella'])
    {
    $check=$_POST['check'];

    foreach (
    $check as $file_name)
    {

    if (
    file_exists($cartella.$file_name))
    {
    if (
    unlink($cartella.$file_name)) echo "<br>Il File è stato cancellato ==> ".$file_name;
    else echo
    "<br>Impossibile cancellare il File";
    }
    else echo
    "<br>Il File non esiste";

    }
    //end foreach
    }//end $_POST['cancella']

    function visualizzafile($cartella,$ext_ammesse){
    $array_file=Array();
    if(
    file_exists($cartella)){
    $handle = opendir($cartella);
    while (
    false !== ($file = readdir($handle))) {
    if(
    is_file($cartella.$file)){

    $estensione = strtolower(substr($file, strrpos($file, "."), strlen($file)-strrpos($file, ".")));
    if(
    in_array($estensione,$ext_ammesse)){
    array_push($array_file,$file);
    }
    }

    }

    $handle = closedir($handle);
    }
    shuffle($array_file); //mescola ordine array in modo casuale
    return $array_file;

    }

    //$ext_ammesse=array('.jpg','.jpeg','.gif','.png');
    //$cartella="images/";
    $array_file=visualizzafile($cartella,$ext_ammesse);
    $n_elementi=count($array_file); //se si vogliono visualizzare tutte le immagini contenute nella cartella: $n_elementi=count($array_immagini);
    ?>
    <p></p>
    <form action="index.php" method="post">
    <?
    for($a=0;$a<$n_elementi;$a++){
    ?>
    <table>
    <tr><td width="200px"><img src="<?=$cartella.$array_file[$a]?>" border="0">
    </td><td><input type='checkbox' name='check[]' value='<?=$array_file[$a]?>'>
    </td></tr></table>
    <p></p>
    <?
    }
    ?>
    <input type="submit" value="Cancella" name="cancella">
    </form>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  11. #11
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    @EuroSalute: Il tuo script non è per niente sicuro, sono riuscito a cancellarti il file index.php (della cartella rotating_banner). Siccome non sono cattivo, non sono andato oltre ! E in un certo senso, ti ho salvato il sito da ulteriori attacchi
    Ultima modifica di javascripter : 03-06-2010 alle ore 13.47.32

  12. #12
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    mi spieghi come hai fatto a cancellarlo???

    e quali misure di sicurezza dovrei adottare?

    grazie
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  13. #13
    Guest

    Predefinito

    penso di sapere non so se la stessa cosa che penso io.....
    ?choice=delete&bannerid=

  14. #14
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    si ma questi file non sono protetti, sono solo pagine di prova.....

    o poi perchè cancellarli....

    Ti va bene il codice di esempio? sei riuscito a fare quello che volevi?
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  15. #15
    Guest

    Predefinito

    si ce lo fatta in un altro modo...^^
    ma ti spiego cosa devo fare io....

    Ho un elenco di file e cartelle ognuno di loro ad un checkbox...
    cliccando su una serie di checkbox e poi cliccando su cancella...
    Dovrebbe fare che prima di cancellare i file chieda una conferma con elenco dei file da cancellare e un pulsante per poi cancellarli....

    avete dei consigli su come possa fare...

  16. #16
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    mi spieghi come hai fatto a cancellarlo???

    e quali misure di sicurezza dovrei adottare?

    grazie
    Mi è bastato modificare il valore di una checkbox, selezionarla e inviare i dati.
    Secondo me il modo migliore per difendersi è creare un array dei file da mostrare/far cancellare ( glob() ) e poi usare in_array.

    Codice PHP:
    $files = glob('images/*.*');

    foreach(
    $_POST['check'] as $file) {
    if(!
    in_array($file, $files)) {
    continue;
    // salta il loop
    }

    @
    unlink($file);
    }
    P.S. Poi c'è anche un altro metodo, inviare con le cURL/fsockopen dati via POST: nel tuo caso check (check[]=file&check[]=altro)
    Ultima modifica di javascripter : 03-06-2010 alle ore 18.25.55

  17. #17
    Guest

    Predefinito

    come devo fare a fare in quel modo....
    @javascript ti ricordi quella cosa ce qualche soluzione...^^

  18. #18
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    grazie dei consigli Javascripter,

    penso di aver fatto bene adesso, se puoi controlla!?

    per hotmailpower, ho fatto il controllo di conferma per i checkbox con javascript....funziona!!!

    codice pagina index.php:

    Codice PHP:
    <html>
    <head>
    <script>
    function conferma() {

    if (document.getElementById('valida').checked) {
    if (confirm('Sei sicuro?')){
    return true;
    }
    else {
    alert ("Richiesta Annullata!");
    window.location = "index.php";
    return false;
    }

    }//end checked

    }
    </script>
    </head>
    <body>

    <!-- codice rotating banner -->

    <?
    $ext_ammesse
    =array('.jpg','.jpeg','.gif','.png');
    $cartella="images/";
    $attempt=false;

    echo
    "<p></p>Lista File presenti nella cartella ==> ".$cartella."<p></p>";

    if (
    $_POST['cancella']) {

    if (
    is_array($_POST) ) {

    $check='';
    $check=$_POST['check'];

    if (!empty(
    $check)) {

    ?>

    <?

    //$files = glob($cartella.'*.*');
    $files=glob(''.$cartella.'*.*')?glob(''.$cartella.'*.*'):array();

    foreach (
    glob(''.$cartella.'*.*') as $file_name) {
    echo
    "$file_name size ==> " . filesize($file_name) . "<br>";
    //array_push($array_lista_file,$file_name);
    }

    }
    //end !empty
    else echo "Non hai selezionato alcun file!";


    foreach (
    $check as $file_name)
    {
    //$file_name non è array
    //array_push($array_file_name,$file_name);
    if(in_array($cartella.$file_name, $files)) {

    if (
    file_exists($cartella.$file_name))
    {
    if (
    unlink($cartella.$file_name)) echo "<br>Il File è stato cancellato ==> ".$file_name;
    else echo
    "<br>Impossibile cancellare il File";
    }
    else echo
    "<br>Il File non esiste";

    }
    //end in_array
    else $attempt=true;
    }
    //end foreach

    }//end is_array
    else $attempt=true;
    }
    //end $_POST['cancella']

    if (!$attempt) {

    function
    visualizzafile($cartella,$ext_ammesse){
    $array_file=Array();
    if(
    file_exists($cartella)){
    $handle = opendir($cartella);
    while (
    false !== ($file = readdir($handle))) {
    if(
    is_file($cartella.$file)){

    $estensione = strtolower(substr($file, strrpos($file, "."), strlen($file)-strrpos($file, ".")));
    if(
    in_array($estensione,$ext_ammesse)){
    array_push($array_file,$file);
    }
    }

    }

    $handle = closedir($handle);
    }
    shuffle($array_file); //mescola ordine array in modo casuale
    return $array_file;

    }

    //$ext_ammesse=array('.jpg','.jpeg','.gif','.png');
    //$cartella="images/";
    $array_file=visualizzafile($cartella,$ext_ammesse);
    $n_elementi=count($array_file); //se si vogliono visualizzare tutte le immagini contenute nella cartella: $n_elementi=count($array_immagini);
    ?>
    <p></p>
    <form action="index.php" method="post" name="delform">
    <?
    for($a=0;$a<$n_elementi;$a++){
    ?>
    <table>
    <tr><td width="200px"><img src="<?=$cartella.$array_file[$a]?>" border="0">
    </td><td><input type='checkbox' name='check[]' value='<?=$array_file[$a]?>' id='valida'>
    </td></tr></table>
    <p></p>
    <?
    }
    ?>
    <input type="submit" value="Cancella" name="cancella" onclick="javascript: return conferma();">
    </form>
    <?
    }
    else echo
    "Hack Attempt!";
    ?>

    </body>
    </html>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  19. #19
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    grazie dei consigli Javascripter,

    penso di aver fatto bene adesso, se puoi controlla!?

    per hotmailpower, ho fatto il controllo di conferma per i checkbox con javascript....funziona!!!

    codice pagina index.php:

    Codice PHP:
    <html>
    <head>
    <script>
    function conferma() {

    if (document.getElementById('valida').checked) {
    if (confirm('Sei sicuro?')){
    return true;
    }
    else {
    alert ("Richiesta Annullata!");
    window.location = "index.php";
    return false;
    }

    }//end checked

    }
    </script>
    </head>
    <body>

    <!-- codice rotating banner -->

    <?
    $ext_ammesse
    =array('.jpg','.jpeg','.gif','.png');
    $cartella="images/";
    $attempt=false;

    echo
    "<p></p>Lista File presenti nella cartella ==> ".$cartella."<p></p>";

    if (
    $_POST['cancella']) {

    if (
    is_array($_POST) ) {

    $check='';
    $check=$_POST['check'];

    if (!empty(
    $check)) {

    //$files = glob($cartella.'*.*');
    $files=glob(''.$cartella.'*.*')?glob(''.$cartella.'*.*'):array();

    foreach (
    glob(''.$cartella.'*.*') as $file_name) {
    echo
    "$file_name size ==> " . filesize($file_name) . "<br>";
    //array_push($array_lista_file,$file_name);
    }

    }
    //end !empty
    else echo "Non hai selezionato alcun file!";


    foreach (
    $check as $file_name)
    {
    //$file_name non è array
    //array_push($array_file_name,$file_name);
    if(in_array($cartella.$file_name, $files)) {

    if (
    file_exists($cartella.$file_name))
    {
    if (
    unlink($cartella.$file_name)) echo "<br>Il File è stato cancellato ==> ".$file_name;
    else echo
    "<br>Impossibile cancellare il File";
    }
    else echo
    "<br>Il File non esiste";

    }
    //end in_array
    else $attempt=true;
    }
    //end foreach

    }//end is_array
    else $attempt=true;
    }
    //end $_POST['cancella']

    if (!$attempt) {

    function
    visualizzafile($cartella,$ext_ammesse){
    $array_file=Array();
    if(
    file_exists($cartella)){
    $handle = opendir($cartella);
    while (
    false !== ($file = readdir($handle))) {
    if(
    is_file($cartella.$file)){

    $estensione = strtolower(substr($file, strrpos($file, "."), strlen($file)-strrpos($file, ".")));
    if(
    in_array($estensione,$ext_ammesse)){
    array_push($array_file,$file);
    }
    }

    }

    $handle = closedir($handle);
    }
    shuffle($array_file); //mescola ordine array in modo casuale
    return $array_file;

    }

    //$ext_ammesse=array('.jpg','.jpeg','.gif','.png');
    //$cartella="images/";
    $array_file=visualizzafile($cartella,$ext_ammesse);
    $n_elementi=count($array_file); //se si vogliono visualizzare tutte le immagini contenute nella cartella: $n_elementi=count($array_immagini);
    ?>
    <p></p>
    <form action="index.php" method="post" name="delform">
    <?
    for($a=0;$a<$n_elementi;$a++){
    ?>
    <table>
    <tr><td width="200px"><img src="<?=$cartella.$array_file[$a]?>" border="0">
    </td><td><input type='checkbox' name='check[]' value='<?=$array_file[$a]?>' id='valida'>
    </td></tr></table>
    <p></p>
    <?
    }
    ?>
    <input type="submit" value="Cancella" name="cancella" onclick="javascript: return conferma();">
    </form>
    <?
    }
    else echo
    "Hack Attempt!";
    ?>

    </body>
    </html>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  20. #20
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ho controllato e mi da "hacking attemp".
    Nel codice hai fatto un pò di disordine, ti basta usare glob per estrarre i files senza usare opendir -> readdir

  21. #21
    Guest

    Predefinito

    il controllo che vorrei fare io e come quello che usa tipo altervista quando cancelli un file....

  22. #22
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    non è che ho fatto confusione, è che ho lasciato opendir e readdir, ricordo che è un file di prova...

    nel javascript di conferma cancellazione però non funziona in parte il controllo checked dell'input type=checkbox, per l'appunto questa riga di codice:
    Codice HTML:
    if (document.getElementById('valida').checked) { 
    ....ecc.
    
    e nell'input:
    <input type='checkbox' name='check[]' value='<?=$array_file[$a]?>' id='valida'> 
    funziona solo spuntando la prima casella del primo file che visualizza....

    javascripter hai qualche soluzione?



    ho trovato questa soluzione:
    Codice HTML:
    function conferma() {
    //if (document.getElementById('valida').checked) {
    var checkboxes = document.delform.elements['check[]']; //array di checkboxes 
    
    for (i=0;i<checkboxes.length;i++) {
    if (checkboxes[i].checked==true) {
    			
    if (confirm('Sei sicuro di cancellare i file selezionati?')){
    return true;
    }
    else { 
    alert ("Richiesta Annullata!");
    window.location = "index.php";
    return false;
    }
    
    }//end checked
    else if (i == checkboxes.length-1) alert ("Non hai selezionato alcun file!");
    }//end for
    
    }
    Ultima modifica di EuroSalute : 06-06-2010 alle ore 13.22.23 Motivo: dovrei aver risolto....
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •