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

    Accoppiare due dati in un solo campo

    Scusate per il titolo poco chiaro ma a volte è difficile spiegarsi in una riga sopratutto quando si è alle prime armi...
    Quello che dovrei fare è unire in un solo campo di una tabella sul DB uno o più dati attraverso un form con una selezione multipla. Posto il codice sperando di essere ancora più chiaro.
    Dunque, qui chiamo il ciclo che mostra le opzioni disponibili sul DB
    codice:
    <?php do { ?>
    <input name="chiave" type="checkbox" value="<?php echo $row_tabella['valore']; ?>"> <?php echo $row_tabella['valore']; ?>
    <?php } while ($row_tabella = mysql_fetch_assoc($tabella)); ?>
    A questo punto, fatta la scelta, nel caso di più valori, dovrei inviarle al DB in un unico campo, separandoli con uno spazio.
    Questo è il codice:

    codice:
    $insertSQL = sprintf("INSERT INTO tabella (chiave) VALUES (%s)",  GetSQLValueString($_POST['chiave'], "text"));
    Ma se provo una selezione multipla così com'è in pratica mi inserisce solo l'ultimo valore selezionato mentre mi interesserebbe inserire i valori uno dietro l'altro separati solo da uno spazio.
    Esempio: ho 4 valori a disposizione: pane, vino, acqua, frutta
    Seleziono i checkbox di pane e acqua
    Invio al campo "chiave" della tabella i dati "pane acqua"

    Spero di essere stato chiaro nella spiegazione e spero che qualcuno possa aiutarmi a capire e/o risolvere.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    dovresti ripostare il codice ben formattato... cmq se ho capito dovresti avere:

    <input type="checkbox" name="chiave[]" .../> per ogni voce

    e poi nel codice formi il valore da inserire nel db con:
    Codice PHP:
    $chiave implode(' '$_POST['chiave']); // <---- verifica con una stampa a video 

  3. #3
    Si in effetti il valore "chiave" è dinamico, ma volendo scrivere il codice in modo esteso sarebbe
    codice:
    <form method="POST" enctype="multipart/form-data" name="form1">
    <input name="chiave" type="checkbox" value="valoreuno"> Valore Uno
    <input name="chiave" type="checkbox" value="valoredue"> Valore Due
    <input name="chiave" type="checkbox" value="valoretre"> Valore Tre
    <input name="button" type="submit" class="Stile1" id="button" value="Invia" />
    <input type="hidden" name="MM_insert" value="form1" />
    </form>
    E così via...mentre per il codice php
    codice:
    <?php
    if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form1")){
    $insertSQL = sprintf("INSERT INTO tabella (chiave) VALUES (%s)",                    
    GetSQLValueString($_POST['chiave'], "text"));
    mysql_select_db($database_db, $db);
    $Result1 = mysql_query($insertSQL, $db) or die(mysql_error());
    }
    ?>
    Spero di aver capito cosa intendevi per codice ben formattato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    intanto annoto che stai usando codice "obsoleto" come HTTP_POST_VARS e sarebbe meglio "aggiornarlo" (e probabilmente codice generato da DW, anche)... detto questo dovrebbe funzionare tutto grosso modo come si diceva prima... usa come name dei tag input "chiave[]" (con le parentesi quadre finali) in modo che i dati siano inseriti in un vettore che poi puoi "fondere" in un'unica stringa come ho postato prima...

  5. #5
    Perdonami ma avevo scritto di avere poca familiarità con php/mysql.
    Effettivamente utilizzo DW e onestamente non so bene come aggiornare il codice, per cui siccome il resto funziona benone lo lascerò così com'é...per ora.
    Ad ogni modo ho fatto un paio di prove e ho modificato il codice in questo modo:

    codice:
    $chiave = implode(' ', $_POST['chiave']); 
    $insertSQL = sprintf("INSERT INTO opere (chiave) VALUES (%s)", 
    GetSQLValueString($_POST['chiave'], "text")); 
    mysql_select_db($database_db, $db); 
    $Result1 = mysql_query($insertSQL, $db) or die(mysql_error());
    In effetti ora i parametri vengono stampati a video correttamente uno dopo l'altro ma purtroppo non vengono inseriti nel DB a causa di un errore:

    codice:
    Warning: stripslashes() expects parameter 1 to be string, array given in...on line 79
    A quella riga si trova il seguente codice:

    codice:
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
    Per me è arabo. Non riesco a capire, i parametri ora li accorpa e li stampa ma non li inserisce. Qualche idea?

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    probabilmente il problema è in GetSQLValueString($_POST['chiave'], "text")); che mi pare "verificasse" che il campo contenga appunto "text", ma nel tuo caso contiene un vettore (da cui l'errore)... per fare un "forking" prova a cambiare la tua prima riga così:

    Codice PHP:
    $_POST['chiave'] = implode(' '$_POST['chiave']); 
    e lascia tutto il resto del codice come all'origine (NON usi più una nuova variabile "$chiave" quindi

  7. #7
    Così funziona perfettamente. Grazie mille

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.