Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Recuperare ilvalore di un flag da una riga di ciclo for

    Ciao a tutti:

    Ho un ciclo for che mi estrae delle righe che contengono vari campi.
    Per ogni riga vorrei inserire un flag che dia la possibilità di elimiare più righe contemporaneamente del ciclo for.
    MI spiego meglio.
    Il ciclo dice così:

    $query = "SELECT * FROM tbl ";
    $result = mysql_query($query) or die("errore");
    $numrows= mysql_num_rows($result);
    $resrow = mysql_fetch_array($result);

    $dato_1=($resrow['dato_1]);
    $dato_2=($resrow_neg_1['dato_2]);


    for($x=0; $x<$numrows; $x++){

    <table width="425" border="1" cellspacing="2" cellpadding="0">
    <tr>
    <td> <input type="checkbox" name="flag_canc" value="1"> </td>
    <td> -- </td>
    </tr>
    <tr>
    <td> <? echo $dato_1; ?> </td>
    <td> <? echo $dato_2; ?> </td>
    </tr>
    </table>

    <? } ?>

    Forse ho fatto qualche errore di trascrizione ma in questo modo ottengo l'estrazione dei dati che voglio ottenere tramite il mio ciclo for.
    Facciamo finta che il ciclo abbia estratto 3 righe, ed io voglio inserire il flag per eliminarne 2 e con bottone invia, confermo l'eliminazione.
    Bene ho pensato mandao i valori via POST ad un altra pagina php e faccio una query che mi elimina le righe dove i flag hanno valore 1 .
    Mi blocco proprio qui. Come posso recuperare via POST tutti i valori '1' eventualmente assegnati alle righe del ciclo per fare in modo che la query cancelli proprio solo quelle righe ?

    Grazie Alex.

  2. #2
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    dunque....
    prova così.....
    <form action="elimina.php" name ="elimina" method ="post"/>
    <?php
    mysql_connect("localhost","utente","password");
    mysql_select_db("db_name");
    $query = "SELECT * FROM tbl ";
    $result = mysql_query($query) or die(mysql_error());
    //$numrows= mysql_num_rows($result);
    $resrow = mysql_fetch_array($result);

    //$dato_1=($resrow['id']);
    $dato_2=($resrow['capo1']);

    while($resrow =mysql_fetch_array($result)){

    echo"
    <table width=\"425\" border=\"1\" cellspacing=\"2\" cellpadding=\"0\"/>
    <tr>
    <td> <input type=\"checkbox\" name=\"flag[]\" value=\"$resrow[id]\"/> </td>
    <td> $resrow[id] </td>
    <td> $resrow[capo1] </td>
    </tr>
    </table>";

    } ?>
    <input type ="submit" name ="elimina" value ="elimina" />
    </form>
    </body>
    </html>


    questo invece è il file elimina.php

    <?php

    $checkBox = $_POST['flag'];

    foreach($checkBox as $key => $value)
    {

    echo "Record: ".$value. " selezionato per l'eliminazione"."</br>";

    //qui la query che effetturà l'eliminazione dei campi selezionati
    }
    ?>

    ps ricordati di modificare i nomi dei campi ...con quelli della tua tabella

    ciao caro

  3. #3
    Ciao e grazie per la risposta:

    Il tuo esempio mi darebbe questo errore:

    Warning: Invalid argument supplied for foreach() in 'nome_pagina' riga 66
    La riga è:

    foreach($checkBox as $key => $value)

    In effetti la variabile $value come la ottieni ?

  4. #4
    Scusa, funziona benissimo, avevo sostituito il nome del flag che tu avevi messo con un altro nome ma senza aprire e chiudere la parentesi quadra, tipo:

    <? echo " <input type=\"checkbox\" name=\"flag[]\" value=\"$id_tipo\"/> "?>

    io avevo messo

    <? echo " <input type=\"checkbox\" name=\"flag\" value=\"$id_tipo\"/> "?>


    funziona, grazie mille.

  5. #5
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243

  6. #6
    Ne aprofitto della tua gentilezza per girarti un altro quesito che mi si pone sempre dell'argomento trattato.

    Devo inserire i flag in tabella:

    $checkBox = $_POST['flag_stampa'];



    foreach($checkBox as $key => $value)
    {

    $query = "UPDATE barcode_neg_4 SET flag_stampa='1' WHERE id_tipo='$value' ";
    $result = mysql_query ($query) or die ("errore ");

    In pratica con lo stesso sistema anziche' dover cancellare, vado ad aggiornare un valore '1' oppure '0' nel campo flag_stampa del db.

    Nella pagina di visualizzazione dei flag o messo:

    <? echo " <input type=\"checkbox\" name=\"flag_stampa[]\" value=\"$id_tipo\""; if ($flag_stampa=="1") echo "checked=\"ckecked\" />" ?>

    Ora funziona ovviamente tutto come da tuo suggerimento, ma mi trovo a dover affrontare il problema contrario. Cioe': Se viene tolto il flag il campo flag_stampa di quella riga estratta dal ciclo dovrebbe passare a valore '0'.

    Sono arrivato a pensare di dover fare una query contraria tipo:

    $query = "UPDATE barcode_neg_4 SET flag_stampa='0' WHERE id_tipo!='$value' ";
    $result = mysql_query ($query) or die ("errore ");

    ma in questo modo funziona solo una ad una, cioè se metto un flag e ne tolgo un'altro ok. Ma se ne metto 2 e ne tolgo 3 già va nel pallone.

    Cosa dici ?

  7. #7
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    <form action="stampa.php" name ="stampa" method ="post"/>
    <?php
    mysql_connect("localhost","user","pass");
    mysql_select_db("tbl");
    //ho un campo FLAG nel DB
    $query = "SELECT * FROM tbl where FLAG = true ";
    $result = mysql_query($query) or die(mysql_error());

    while($resrow =mysql_fetch_array($result)){
    ?>
    <table width="425" border="1" cellspacing="2" cellpadding="0"/>
    <tr>
    <td> <input type="checkbox" name="flag[]" value="<?=$resrow['id']?>" <?php $resrow['FLAG'] == '1' ? print 'CHECKED' : print 'UNCHECKED';?>/> </td>
    <td> <?=$resrow['id']?></td>
    <td> <?=$resrow['targa']?> </td>
    </tr>
    </table>
    <?} ?>
    <input type ="submit" name ="stampa" value ="Stampa" />
    </form>
    </body>
    </html>


    questo il file di controllo per la stampa:

    <?php

    if(isset($_POST['flag'])){
    $checkBox = $_POST['flag'];

    foreach($checkBox as $key => $value)
    {

    //var_dump($checkBox);

    echo "Elemento con ID ".$value." selezionato per la stampa";

    //qui le istruzioni successive

    }
    }else{
    print "Nessun elemento selezionato per la stampa";
    }
    ?>

    cambia i nomi dei campi e quelli delle variabili....per le tue esigenze

  8. #8
    ciao e grazie ancora.
    Certo cos' funziona, ma in caso di flag deselezionato non riesco a fare una query che mi possa far tornare il flag a valore '0'..

    if(isset($_POST['flag_stampa'])){
    $checkBox = $_POST['flag_stampa'];

    foreach($checkBox as $key => $value)
    {


    $query = "UPDATE tbl SET flag_stampa='1' WHERE id_tipo='$value' ";
    $result = mysql_query ($query) or die ("errore query UPDATE ordine_neg_1 flag_stampa_uno");

    Questa query dice di andare in tbl e di aggiornare il campo flag stampa a valore '1' le righe che aventi come id il valore definito nella variabile $id.
    bene, se ho deselezinato altri flag, come posso dire alla query di far tornare a valore '0' gli altri non selezionati ?

    faccio una query che dice il contrario ?

    $query = "UPDATE tbl SET flag_stampa='1' WHERE id_tipo!='$value' ";
    $result = mysql_query ($query) or die ("errore query UPDATE ordine_neg_1 flag_stampa_uno");

    ma non funziona.

    }
    }else{
    print "Nessun elemento selezionato per la stampa";
    }

  9. #9
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    ho capito la tua esigenza ma così non avresti il pieno controllo della tua applicazione e soprattutto quanti e quali valori va a riaggiornare la query.Detto questo,come per lo script che ti visualizza e modifica tutti i record selezionati puoi far il contrario con quelli deselezionati.Ho supposto che la query estragga valori con il campo FLAG = True...cioè 1....facendo il contrario cioè 0 ti tirerebbe fuori quelli deselezionati....Ma viaggiamo troppo sul vago.Potresti farmi capire qual'è lo scopo dell'applicativo formalizzandoti sull'aspetto non tecnico......cioè cosa deve fare quest'applicazione?Ti chiedo ciò perchè si potrebbe trovare soluzioni alternative implementando anche un po' di javascript....

    fammi sapere

  10. #10
    In effetti , era una cosa che dovevo finire in fretta come semrpe..
    Ho risolto andando ad eliminare tutti i valori dalla tbl e inserendo i valori selezionati, per ogni ciclo, i dati sono pochi, al massimo sono 10 righe per ciclo.

    Bruttissima soluzione mi rendo conto, ma mi riservo di andare a studiarmi meglio i cicli che piano piano sto imparando.

    Per intanto grazie ancora.. a presto !


    Alex.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.