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

    SQL UPDATE con listbox multiple

    Ciao a tutti ,
    premesso che mi sto avvicinando da poco a PHP/MySQL , ho un piccolo problemino ,che spero mi aiutiate a risolvere , ringrazio in anticipo e spiego.

    Ho una listbox di tipo multiple in un form che si popola di dati per mezzo di una query.
    Ho bisogno di selezionare più dati della listbox e che li scriva in N record filtrati di una tabella .

    Ho scritto una cosa del genere:


    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    <select name="test[]" multiple="multiple">
    <option value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
    <option value="four">four</option>
    <option value="five">five</option>
    </select>
    <input type="submit" value="Send" />
    </form>
    <?php
    $con = mysql_connect('localhost','root','');
    if (!$con)
    {
    die('Mancata connessione al database: ' . mysql_error());
    }

    mysql_select_db('my_db', $con);


    $mycount = count($test);
    while($mycount){
    $mycount--;
    mysql_query("UPDATE table SET campo='$test[$mycount]' WHERE campo1 LIKE 'LS19/EDC'");
    }
    ?>

    mi succede che se seleziono una singola voce della listbox ,mi aggiorna i record che soddisfano i criteri,ma se seleziono due o più opzioni della listbox , mi scrive solo l'ultima voce selezionata in tutti i record che soddisfano la condizione .

    In cosa sbaglio ?

    Help me , please !

    Grazie

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Intanto devi accertarti che il campo della tabella sia di tipo SET, l'unico che in MySQL permette di "associare uno o più valori" in uno stesso campo.

    Dopodiché devi eseguire una sola query update, passandogli una stringa con l'elenco dei valori da salvare concatenati tramite virgole.

    Per semplificarti il lavoro, ecco il codice.

    Codice PHP:
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    <select name="test[]" multiple="multiple">
    <option value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
    <option value="four">four</option>
    <option value="five">five</option>
    </select>
    <input type="submit" value="Send" />
    </form>
    <?php
    $con 
    mysql_connect('localhost','root','');
    if (!
    $con)
    {
    die(
    'Mancata connessione al database: ' mysql_error());
    }

    mysql_select_db('my_db'$con);


    // Essendo un array, concateniamo i valori di $_POST['test'] con la funzione join()
    $test join(','$_POST['test']);

    // La stringa che otteniamo andrà inserita nella query racchiusa da apici
    mysql_query("UPDATE table SET campo='$test' WHERE campo1 LIKE 'LS19/EDC'");

    ?>
    Un'ultima cosa: ho notato che hai recuperato i valori del form senza utilizzare l'array $_POST.
    E' buona norma recuperare tutti i dati passati tramite GET/POST usando tali array


    Ciao!
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Grazie SKY per la pronta risposta,ma forse mi sono spiegato male.Io dovrei ottenere il seguente risultato in tabella .

    Data la listbox , se io seleziono i valori ONE,TWO,THREE
    Vorrei ottenere in tabella un' associazione del genere :

    +------+------+--------------
    | id | date | campo |

    | 22 | 01.08.2003 | one |
    | 23 | 02.08.2003 | two |
    | 24 | 03.08.2003 | three |
    | 25 | 05.08.2003 | one |
    | 26 | 06.08.2003 | two |
    | 27 | 07.08.2003 | three |



    Spero di essere stato chiaro,ti ringrazio ancora

    Saluti!

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.