Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: delete multiplo

  1. #1

    delete multiplo

    devo cancellare più record contemporanemante tramite un form in.html
    dunque nel form html prendo due campi:

    riferimento e valore


    il codice php è il seguente:



    <?php
    // ---------------------------------
    // VARIABILI PROVENIENTI DAL FORM IN .HTML

    $rif = $_POST['riferimento'];
    $valore = $_POST['valore'];

    // ---------------------------------


    include("db_click/config.php");
    include("db_click/dbconnect.php");

    // -------- prendo i risultati della tabella per ordinamento ----
    $query="select * FROM tabella_click WHERE '$rif' = '$valore'";
    $result= mysql_query($query);

    //conto il numero di occorrenze trovate nel db
    $numrows = mysql_num_rows($result);

    //se il database è vuoto lo stampo a video
    if ($numrows==0){
    print"Nessun Record Trovato!";
    }
    //Se invece trovo delle occorrenze...
    else
    {
    //Avvio un ciclo for che si ripete per il numero di occorrenze trovate
    for($x=0; $x<$numrows; $x++){
    //Recupero il contenuto di ogni record trovato
    $resrow = mysql_fetch_row($result);
    $id = $resrow[0];
    $titolo = $resrow[1];
    $url = $resrow[2];
    $password = $resrow[3];
    $click = $resrow[4];
    $dataeora = $resrow[5];

    //Qua dovrei cancellare i record corrispondenti ai dati del form...

    $result = "DELETE FROM tabella_click WHERE '$rif' ='$valore'";

    safe_query($result);

    echo "Il record numero numero $id corrispondente a $rif=$valore è stato cancellato!";

    }
    }
    ?>


    MA NON FUNZIONA

    DOVE STA L'ERRORE?
    ------------------
    georado
    www.georado.it

  2. #2
    aiuto sto impazzendo
    ------------------
    georado
    www.georado.it

  3. #3
    la funzione safe_query non esiste, te la sei creata tu?
    Che errore ti dà?

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497

    Re: delete multiplo

    Iniziamo semplificando un po' il codice:

    Codice PHP:
    <?php     
    // ---------------------------------
    // VARIABILI PROVENIENTI DAL FORM IN .HTML

    $rif $_POST['riferimento'];
    $valore $_POST['valore'];

    // ---------------------------------


    include("db_click/config.php");
    include(
    "db_click/dbconnect.php");

    // -------- prendo i risultati della tabella per ordinamento ----
    $query="select * FROM tabella_click WHERE '$rif' = '$valore'";
    $resultmysql_query($query);

    // AGGIUNTO DA VIRUS
    $deleted_items = array();


    //conto il numero di occorrenze trovate nel db
    $numrows mysql_num_rows($result);

    //se il database è vuoto lo stampo a video
    if ($numrows==0){
      print
    "Nessun Record Trovato!";
    }
    //Se invece trovo delle occorrenze...
    else
    {

     
    /* QUESTA PARTE E' INUTILE  e' dispoendiosa e difficile da gestire se cambi qlke colonna
      //Avvio un ciclo for che si ripete per il numero di occorrenze trovate
      for($x=0; $x<$numrows; $x++){

     //Recupero il contenuto di ogni record trovato
        $resrow = mysql_fetch_row($result);
        $id = $resrow[0]; 
        $titolo = $resrow[1];
        $url = $resrow[2];
        $password = $resrow[3];
        $click = $resrow[4];
        $dataeora = $resrow[5];

    //Qua dovrei cancellare i record corrispondenti ai dati del form...

    $result = "DELETE FROM tabella_click WHERE '$rif' ='$valore'";

    safe_query($result);

    echo "Il record numero numero $id corrispondente a $rif=$valore è stato cancellato!";

    }
    */

    // la scansione dei dati falla cosi'
    while( $curr mysql_fetch_array($result) )
    {
       
    // cosi' in $deletes_items ti salvi tutti i record ce li potri leggere poi senza dover farlo a mano
       
    array_push($deleted_items $curr );

    /*
    adesso abbiamo 2 modi per proseguire 
    1) concateni una stringa per la delete 
    2) effettui una delete a ciclo
    */

    // 1)
    $filter .=  " '$rif' ='$valore' OR ";

    // 2) 
    mysql_query"DELETE FROM tabella_click WHERE '$rif' ='$valore'" );

    }

    //se hai fatto la 1)

    $q =  "DELETE FROM tabella_click WHERE $filter ";
    // elimino l'ultimo or concatenato
    $q substr$q strrpos$q "OR")  )." ;";
    //esegui la query
    mysql_query($q);



    }
    ?>
    A sto punto sta a te la scelta.
    EDIT:
    Solo che nn capisco una cosa nella delete tu fai $rif=$valore .... il che vuol dire che mysql ad ogni ciclo cerca la colonna di nome $rif di valore $valore. E la elimina.....
    Una volta eliminata nn esiste piu' per cui se e' replicata vengono eliminate gia' le replicazioni e sui cicli successivi non fa nulla perche le colonne nn esistono piu'.

    Dannazione, scusa se edito a gogo ma qua mi invia salva la form ... mah devo riconfigurare qlkosina.

    Cmq a sto punto ti dico che nn vedo perche' devi cilcare se nn usi i dati del ciclo se ti vuoi salvare i valori cancellati fatti la query prima e poi eliminali.
    Ma se devi eliminare tutte le righe con colonnaX = 3 basta che una sola delete si arrangia my sql a cancellarle tutte a meno che nn metti un limit.

    Esempio
    colonna1 | colonna2 | colonna3
    ciao--------|--pippo----|--sono io---
    hola--------|-pippo-----|como estas
    hello-------|darling-----|how are you---

    ho messo i trattini al posto degli spazi senno me li tronca.

    cmq se tu fai " delete from tabella where colonna2 ='pippo' "
    alla fine ottieni

    colonna1 | colonna2 | colonna3
    hello-------|darling-----|how are you---

    e come vedi ha gia' cancellato tutte le riche con colonna2 = "pippo"

    se le vuoi salvare metti un ON DELETE e fai la funzione in mysql oppure ti fai prima un'estrazionie e la metti su array come consigliato sopra.

  5. #5
    non va!

    mi da questo errore

    Nessun Record Trovato!
    ------------------
    georado
    www.georado.it

  6. #6
    comunque quello che devo fare è giusto l'esempio che hai fatto tu


    colonna1 | colonna2 | colonna3 |
    --------------------------------
    casa-----|--pippo--|---franco--|
    casa-----|--pippo--|---franco--|
    casotto--|--pappo--|---ciccio--|
    casetta--|--peppo--|---franco--|


    $rif è una variabile da form che può essere : colonna1, colonna2, o colonna3
    $valore è un valore che può essere pippo, casa, franco, casetta, etc

    quindi se $rif = colonna2 e $valore = pippo

    mi deve cancellare tutti i record dove sussiste questa condizione, per cui alla fine avrò:

    colonna1 | colonna2 | colonna3 |
    --------------------------------
    casotto--|--pappo--|---ciccio--|
    casetta--|--peppo--|---franco--|


    spero di essere stato chiaro
    ------------------
    georado
    www.georado.it

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ok allora ti consiglio di fare cosi'

    Codice PHP:

    // salviamo i dati in un array 

    $dt = array();  // dt = Deleted Tokens
    $tabella "tabella";

    $ris mysql_query("select * from $tabella where $rif ='$valore' " );

    while(
    $curr mysql_fetch_array($ris) )
    {
       
    array_push($dt $curr);
    }


    //ora cancelliamo i dati dalla tabella
    mysql_query("delete from tabella where $rif='$valore' ")or die( mysql_error() ); 
    Ecco fatto in poche righe fa tutto quello che ti serve.
    Se devi recuperare i dati cancellati li trovi nell'array $dt

    Cmq per questo tipo di operazioni ti consiglio di usare una colonna della tabella come flag 0/1 => visibile/non visibile cosi' con una update effettui una cacellazione soft dei dati, un po' come viene gestito il cestino nei sistemi operativi.

    Quindi te effettivamente nn cancelli i dati li poni solo in uno sato di non visibilita' ... ovviamente tutte le query che si occuperanno di visualizzarli dovranno avere la clausola where colonna =1 .

  8. #8
    questo è l'intero script
    ------------------------------
    <?php
    // ---------------------------------
    // VARIABILI PROVENIENTI DAL FORM IN .HTML

    $rif = $_POST['riferimento'];
    $valore = $_POST['valore'];

    // ---------------------------------


    include("db_click/config.php");
    include("db_click/dbconnect.php");

    // -------- prendo i risultati della tabella per ordinamento ----
    $query="select * FROM tabella_click WHERE '$rif' = '$valore'";
    $result= mysql_query($query);

    // salviamo i dati in un array

    $dt = array(); // dt = Deleted Tokens
    $tabella = "tabella";

    $ris = mysql_query("select from $tabella_click where $rif ='$valore' " );

    while($curr = mysql_fetch_array($ris) )
    {
    array_push($dt , $curr);
    }


    //ora cancelliamo i dati dalla tabella
    mysql_query("delete from tabella_click where $rif='$valore' ")or die( mysql_error() );


    ?>

    --------------------------------------------
    e questo è l'errore

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/vhosts/miosito.com/var/www/html/click_uscita/amministratore_cancella_record_multipli.php on line 25


    c'è qualcosa che stasera non mi viene proprio...
    ------------------
    georado
    www.georado.it

  9. #9
    A parte che c'è un post simile dei giorni scorsi, con la soluzione bella e pronta, ma il delete multiplo si fa direttamente dalla stringa SQL (1 e non ricorsiva) utilizzando IN.

    Mettiamo che te passi dalla form gli ID dei record da cancellare, la stringa sql sarà del tipo:

    codice:
    DELETE FROM nome_tabella WHERE id IN (1,3,5,xxx)
    Spero di essere stato chiaro.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  10. #10
    non ci siamo, perchè dalla form non passo i numeri di record tipo 1,2,5,7,etc
    ma dalla forma passo "colonna" e poi "valore".

    in ogni modo per chi avesse bisgono della soluzione, l'ho trovata io ritornando sui miei primi passi, e cioè come ho aperto il 3d.

    posto qui il codice bello e completo.


    ----------------------------------------------
    <?php

    // VARIABILI PROVENIENTI DAL FORM IN .HTML
    $rif = $_POST['riferimento'];
    $valore = $_POST['valore'];

    // ---------------------------------
    include("db_click/config.php");
    include("db_click/dbconnect.php");

    // -------- prendo i risultati della tabella per ordinamento ----
    $query = "SELECT * FROM tabella WHERE $rif ='$valore'";
    $result= mysql_query($query);

    //conto il numero di occorrenze trovate nel db
    $numrows = mysql_num_rows($result);

    //se il database è vuoto lo stampo a video
    if ($numrows==0){
    print"Nessun Record Trovato!";
    }
    //Se invece trovo delle occorrenze...
    else
    {
    //Avvio un ciclo for che si ripete per il numero di occorrenze trovate
    for($x=0; $x<$numrows; $x++){
    //Recupero il contenuto di ogni record rovato
    $resrow = mysql_fetch_row($result);
    $id = $resrow[0];
    $titolo = $resrow[1];
    $url = $resrow[2];
    $password = $resrow[3];
    $click = $resrow[4];
    $dataeora = $resrow[5];

    $query = "DELETE FROM tabella WHERE $rif ='$valore'";
    safe_query($query);

    //Stampo a video i record cancellati
    echo "<html><body>Il record numero $id corrispondete a $rif = $valore è stato cancellato
    </body></html>";
    }
    }
    ?>

    ----------------------------------------------------

    ciao a tutti
    ------------------
    georado
    www.georado.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.