• User Attivo

    Problema Doppio Ciclo: For & While

    Salve!

    ho un problema con un doppio ciclo. in pratica devo inserire delle
    ricette e per ognuna di questa devo inserire gli ingredienti in una
    tabella a parte, in cui sono indicati tutti gli ingredienti.

    quindi: seleziono tutti gli ingredienti ed inizio il ciclo for per
    visualizzare le select il cui numeo arriva tramite una sessione
    ($_SESSION['numingr']. all'interno di questo for, inserisco una casella
    di testo dove si inserisce la quantità ed una select. a questo punto
    devo far in modo di inserire all'interno di questa select tutti gli
    ingredienti presenti nella tabella Ingredienti. faccio partire il ciclo
    while in cui creo l'arrai $row in cui memorizzo tutti gli id ed il nome
    degli ingredienti. ora nel scrivo tutti gli ingredienti all'interno del
    select attraverso le option.

    l'errore sta nel fatto che se inserisco un solo ingrediente tutto
    funziona correttamente, mentre se ne inserisco due o più, nel primo
    select la lista compare senza problemi, mentre i successibi select
    risultano vuoti. da residui di conoscenze di programmazione, credo che
    l'errore stia nella posizione delle option, ma nonostante abbia provato
    a pensare e a provare a spostare il codice qua e la, non sono riuscito
    a risolverlo...

    mi potete aiutare?

    grazie!

    ecco qui di seguito la parte di codice interessata...[PHP]

    <?
    //Inserire Codice Salvataggio Ingredienti
    //Perlievo Informazioni Ingredienti
    $queryingredienti="SELECT * FROM Ingredienti";
    $resultingredienti=mysql_query($queryingredienti)or
    die(mysql_error());

        //Inizio For Inserimento Quantità/Ingredienti
        for($i=0;$i<$_SESSION['numingr'];$i=$i+1){
    

    ?>
    <input type="text" name="quantita<? print("$i"); ?>" /> <select
    name="ingrediente<? print("$i"); ?>">
    <?
    //Creazione Array $row
    while($row=mysql_fetch_array($resultingredienti)){
    $idingrediente=$row[IDIngrediente];
    $ingrediente=$row[Ingrediente];
    ?>
    <option value="<? print("$idingrediente"); ?>"><?
    print("$ingrediente"); ?></option>
    <?
    //Fine While
    }
    ?>[/PHP]


  • User Attivo

    Il problema è che finito il primo giro di fetch il puntatore si trova in fondo alla tabella e quindi nel secondo giro non c'è + niente.
    La soluzione più semplice è spostare la mysql_query dopo il for e prima del while. Chiaramente così però fai tante query quanti sono i cicli for.
    Meglio sarebbe fare le fetch all'inizio per alimentare un array che poi andari ad usare nel ciclo interno.


  • User Attivo

    @Senamion said:

    Il problema è che finito il primo giro di fetch il puntatore si trova in fondo alla tabella e quindi nel secondo giro non c'è + niente.
    La soluzione più semplice è spostare la mysql_query dopo il for e prima del while. Chiaramente così però fai tante query quanti sono i cicli for.
    Meglio sarebbe fare le fetch all'inizio per alimentare un array che poi andari ad usare nel ciclo interno.

    io avevo fatto così per risparmiarmi un ciclo, diciamo...

    ma da come ho capito, quello che dici tu è tirare fuori il fetch e creare un altro ciclo interno al for che mi scriva ogni volta tutti gli ingredienti presenti nell'array...giusto???

    grazie!


  • User Attivo

    Giusto...


  • User Attivo

    @Senamion said:

    Giusto...

    ma allora sono blavissimo a capile le cose....

    Glazie...

    Soragni Mattia


  • User Attivo

    @Senamion said:

    Il problema è che finito il primo giro di fetch il puntatore si trova in fondo alla tabella e quindi nel secondo giro non c'è + niente.
    La soluzione più semplice è spostare la mysql_query dopo il for e prima del while. Chiaramente così però fai tante query quanti sono i cicli for.
    Meglio sarebbe fare le fetch all'inizio per alimentare un array che poi andari ad usare nel ciclo interno.

    ok..al momento però l'ho risolto in questo modo [PHP]mysql_data_seek($resultingredienti, 0);[/PHP]

    sarà anche non ottimizzato ma per il momento l'importante che funzioni...tuttavia ho rpovato acon il doppio ciclo, ma non compare nemmeno la prima...probabilmente ho sbagliato con l'array...mha...

    comunque per ora va e questo è l'importante...successivamente lo sistemo...

    grazie!