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

Discussione: foreach non funzia!

  1. #1

    foreach non funzia!

    Ciao, ho una semplice form che genera una serie di checkbox

    Codice PHP:
    <input type="checkbox" name="keyid[]" value="1" />
    <
    input type="checkbox" name="keyid[]" value="2" />
    <
    input type="checkbox" name="keyid[]" value="3" /> 
    questo pezzo di codice dovrebbe prendere i valori e metterli un database, ma invece prende solo il valore piu' alto.

    Se stampo la variabile $ciao vengono pero' visualizzati tutti i valori... qual e' il problema???

    Codice PHP:
    if($_POST['keyid']){
    foreach(
    $_POST['keyid'] as $ciao){
        
        
    $sqlK5 "INSERT into ".TABLE_KEYWHO." (id, keyid)";
        
    $sqlK5.= "VALUES('$id','$ciao')";
        
    mysql_query($sqlK5$db);
        
        
    #echo $ciao;
        
    }

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    3,259
    vista la correttezza del codice, l'unico problema che mi viene in mente è che non incrementi $id e quindi mysql va a sovrascrivere il tutto... potresti evitare di inserire l'id, e lasciare che si arrangi mysql con l'autoincrement che credo avrai impostato:

    if($_POST['keyid']){
    foreach($_POST['keyid'] as $ciao){

    $sqlK5 = "INSERT into ".TABLE_KEYWHO." (keyid)";
    $sqlK5.= "VALUES('$ciao')";
    mysql_query($sqlK5, $db);
    }
    }

  3. #3
    Purtroppo si tratta di un ID correlato, non posso fare a meno di associarlo al keyid.

    C'e' un altro modo per fare quanto mi serve??
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  4. #4

    problema di visualizzazione

    Ho appena scoperto che il problema non e' di scrittura sul DB, ma di visualizzazione


    Allora, ho due tabelle

    keylist
    keyid (primary)
    keyname (varchar)

    keywho
    id (int)
    keyid (int)

    L'ID di keywho e' id del record cui assegno queste parole chiave. Quello che voglio ottenere e' questo:

    - l'elenco completo di tutte le parole (keylist)
    - voglio evidenziare con un segno di spunta sulla checkbox quelle scelte dall'ID corrente

    Codice PHP:
    <?php
    # Scrivo tutte le parole chiave

    $sqlKL "SELECT * FROM "TABLE_KEYLIST ." ORDER BY keyname ASC";
    $r_kl mysql_query($sqlKL$db);

    while (
    $tbl_kl mysql_fetch_array($r_kl)) {

    if(
    $id){

    # Evidenzio le parore chiave scelte dall'ID corrente
    # assegnando alla variabile $ciao il valore checked

    # Chiedo quindi il keyid delle parole scelte
    $sqlKW "SELECT * FROM "TABLE_KEYWHO ." WHERE id=$id";
    $r_kw mysql_query($sqlKW$db);
    $tbl_kw mysql_fetch_array($r_kw); 

    # E inserendomi nel ciclo lo confronto con KEYLIST
        
    if ($tbl_kw['keyid'] === $tbl_kl['keyid']) {
            
    $ciao "checked='checked'";
            }
    }
    ?>

    <div>
    <input type="checkbox" name="keyid[]" value="<?=$tbl_kl['keyid']?><?=$ciao?>/>
    [b]<?=$tbl_kl['keyname']?>[/b]
    </div>

    <?php
    }
    ?>


    Non so che succede!!!
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  5. #5
    Originariamente inviato da Mutato
    Purtroppo si tratta di un ID correlato, non posso fare a meno di associarlo al keyid.

    C'e' un altro modo per fare quanto mi serve??
    Essendo una INSERT i record non vengono sovrascritti ma accodati. Forse con l'update potrebbero essere sovrascritti, sempre che le condizioni where lo consentano.

    Quello che invece non capisco e' perche' accodi il nome della tabella in quel modo.

    "INSERT into ".TABLE_KEYWHO." (id, keyid)";

    Cosi' dovrebbe darti quantomeno un NOTICE in quanto TABLE_KEYWHO e' una stringa (nome tabella) e non una costante. Io farei cosi':

    "INSERT into TABLE_KEYWHO (id, keyid) ";

    e poi aggiungerei il classico OR DIE alla query:

    mysql_query($sqlK5, $db) or die(mysql_error());

    Siccome e' una INSERT accertati che sia vero che mette solo l'ultimo valore, magari e' solo un errore che fai visualizzando i dati inseriti. Non si sa mai...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Zacchete....

    hai postato mentre stavo rispondendoti..... adesso leggo .

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Quello script non mi convince per niente.

    Come fa a funzionare??? Sicuro che non si possa fare con un JOIN?

    i dubbi:
    while ($tbl_kl = mysql_fetch_array($r_kl)) {

    if($id){
    dovrebbe essere if($tblkl['keyid']

    il nome della tabella perche' messo in quel modo? usi una costante?

    Se il controllo delle if e' negativo, ti stampa lo stesso.

    Hai i NOTICE disabilitati.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Quel IF serve a controllare che ci sia un record da leggere e che non si chieda una maschera nuova (e' provvisorio).

    CE L'HO FATTA!

    Codice PHP:
    # Scrivo le parole chiave
    $sqlKL "SELECT * FROM "TABLE_KEYLIST ." ORDER BY keyname ASC";
    $r_kl mysql_query($sqlKL$db);

    while (
    $tbl_kl mysql_fetch_array($r_kl)) {

    if(
    $id){
    # Chiamo le parole chiave
    $sqlKW "SELECT * FROM "TABLE_KEYWHO ." WHERE keyid=".$tbl_kl['keyid']."";
    $r_kw mysql_query($sqlKW$db);
    $tbl_kw mysql_fetch_array($r_kw); 

        if (
    $tbl_kw['id'] == $id) {
            
    $ciao "checked='checked'";
            }else{
            
    $ciao "";
        }

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  9. #9
    meglio per te, ma spiegami la storia del nome della tabella e a che serve il controllo if($id) ??? da dove arriva $id?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    ID e' una variabile GET

    record.php?id=1

    se c'e' id

    if($id)

    chiamo i dati dal DB, altrimenti propongo una maschera nuova...

    sullo script che ti ho postato c'e' pero' un problema, funziona, ma solo se la parola e' stata inserita da quel record stesso... non so come dire...
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.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.