Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80

    Problema Ciclo Foreach Dentro Foreach

    Salve io inizio sempre i posto con la scritta problema, ma verrà il giorno in cui ne comincerò uno con la scritta Problema Risolto, scherzi e sfogo a parte io ho un mio bel pezzo di codice PHP che vi posto


    $NOME = $_POST['LAVORO'];
    $STATO = $_POST['STATO'];

    /* Connessione e selezione del database */
    $connessione = mysqli_connect("localhost", "root", "G91031", "database")
    or die("Connessione non riuscita");

    /* Stampa dei risultati in HTML */
    echo "<table border =\"1\" cellspacing=\"0\" width=\"1400\">
    <TR>
    <TH>ID GARA</TH>
    <TH>NOME</TH>
    <TH>SCADENZA</TH>
    <TH>REFERENTE</TH>
    <TH>CATEGORIA</TH>
    <TH>PARTNER</TH>
    <TH>ESITO</TH>
    <TH>NOTE</TH>
    <TH>LINK</TH>
    <TH>ARCHIVIO CARTACEO</TH>
    <TH>STATO</TH>
    </TR>";


    foreach ($NOME as $TIPO) {
    echo $TIPO;
    foreach ($STATO as $TIME){
    echo $TIME;
    /* Esecuzione di una query SQL */
    $query = "SELECT * FROM gare WHERE ID_GARE like '$TIPO%' AND STATO like '%$TIME%'";
    $risultato = mysqli_query($connessione,$query) or die("Query fallita");


    while ($linea = mysqli_fetch_array($risultato, MYSQLI_ASSOC))
    {
    extract ($linea);
    If ($LINK!="")



    Ovviamente per brevità non ho postato tutto, vi spiego in sostanza cosa fa' questo codice. In pratica io recupero da un'altra pagina dei valori da dei checkbox, che passo al mio php sotto forma dei due array $NOME e $STATO, ora io vorrei stampare i risultati della $query che vedete sopra in questo senso:
    Il primo ciclo foreach parte e prende il primo valore x per questo valore x parte il secondo ciclo foreach che mi prende i valori del secondo array da 0,1,2,3 a n. Finito questo il primo foreach prende il secondo valore y e ripartiamo da capo con il secondo foreach 0,1,2,3 ...n. Premesso che prendendo nel primo array un solo valore per volta io ottengo il risultato voluto (Io ho due checkbox multipli con 3 e 4 valori rispettivamente), succede che quando seleziono due o più campi 8ma non sempre cioè con alcuni campi simultanei funziona) mi da' il seguente errore:

    Invalid argument supplied for foreach() in C:\Database\concorsi_appalti_tutti.php on line 160

    Dove la riga 160 è quella che vi ho evidenziato

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Ops no ho evidenziato la riga, che comunque è quella del secondo foreach

  3. #3
    Se ho capito bene il tuo problema (estrarre le righe che corrispondono a tutte le coppie di valori di NOME e STATO selezionati), puoi risolvere con una semplice query senza nessun ciclo:

    Codice PHP:
    <?php
    $nome  
    implode(','$_POST['LAVORO']);
    $stato implode(','$_POST['STATO']);

    $query "SELECT * FROM gare
              WHERE ID_GARE IN (
    $nome)
              AND STATO IN (
    $stato)";

    $risultato mysqli_query($connessione$query) or die("Query fallita");

    while ( 
    $linea mysqli_fetch_array($risultatoMYSQLI_ASSOC) ) {
        
    // stampa i dati
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Grazie k.b., ma adesso il problema è peggiorato, nel senso che mi restituisce query fallita...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Provo a spiegarmi meglio, effettivamente ciò che voglio è estrarre i record per ogni coppia di valori che il form passa. Esempio pratico

    FORM1 3 checkbox con

    Concorsi
    Appalti
    Elenchi

    FORM2 4 checkbox con

    Corso
    Concluso
    Eliminato
    Valutare

    Io devo poter valutare tutte le possibili combinazioni in maniera facile (non posso certo crearmi un if per ogni condizione).
    Il fatto strano è che con il mio codice se seleziono 1 check solo dal form1 e tutti o parte dal form2 tutto funziona a dovere, ma (ed è qui che sto impazzendo) se seleziono da form1 2 check e da form2 altre due check a su determinate coppie funziona su altre coppie no ed è questo che mi fa impazzire, non riesco a capire perchè se la query non restituisce nessun errore mi passa solo quel famigerato "Invalid argument supplied for foreach()" al secondo ciclo foreach, per maggio controllo io mi sono fatto anche un echo sia della variabile che passa il primo ciclo foreach sia della variabile che passa il secondo ciclo foreach, e a video mi stampa correttamente il primo ciclo (ad esempio concorsi - corso concluso eliminato valutare) poi inizia il secondo (ad esempio appalti - ) e si ferma resituendomi l'errore, io ho pensato fosse un problema di memorizzazione della variabile del secondo ciclo e ho provato anche a pulirla al termine del ciclo, ma niente da fare....

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Ancora per K.b io credo (ma ripeto sono davvero neofita di php) che la funzione implode su un'array genera una stringa con carattere separatore quello prescelto, nella fattispecie la virgola. Allora io mi verrei a ritrovare con una variabile con diversi valori in stringa, e io non concosco la sintassi della query con Select .... IN (...), pertanto non avevo pensato a questo metodo (caspita dopo aver letto le guide e spulciato su internet è frustante dover ammettere di non conoscere neanche la sintassi di una query sql...)

  7. #7
    Esatto, implode fa proprio quello e la clausola IN() di mysql restituisce tutti i record in cui il campo scelto contiene uno qualunque dei valori della lista (separata da virgole) passata come argomento.

    In altre parole
    codice:
    WHERE campo IN (1, 2, 3)
    equivale a
    codice:
    WHERE campo = 1 OR campo = 2 OR campo = 3
    prova a stampare i valori delle liste dopo "l'implosione" per verificare che siano corrette.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Altro aggiornamento selezionando solo due check dal form1 e 1 dal form2, mi succede una cosa strana, mi appare 2 volte la check del form 2 per ognuno dei valori della check del form1. Io credo che il problema sia proprio dentro ai due cicli, non so se passare a un ciclo while o a un ciclo for standar... suggerimenti....

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Grazie ora ci provo e ti faccio sapere....

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Si i valori delle liste sono corretti. Ti faccio una domanda, in realtà la query deve cercare nel campo nome quello che inizia con $nome, infatti io ho un prefisso che mi identifica il tipo (CO, AP, EP) e nel nome nel database io ho qualcosa tipo CO-10.009, oppure AP-10.029, ecc ecc e e inoltre la query deve cercare nel campo stato quello che contiene $stato.

    Cioè come avevo fatto io
    like '$nome%' e like '%$stato%'

    questo perchè mi hanno sconsigliato di passare via POST dei valori contenenti spazi....

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.