Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    ciclo while dentro ciclo foreach

    Salve a tutti,
    ho un problema che vorrei chiarire, posto il codice dove $nome_var è un array di valori
    selezionati nella pagina precedente con la checkbox:

    foreach ($nome_var as $key => $value){
    while ($riga1 = mysql_fetch_assoc($risultato1)) {
    if ($value=$riga1["cliente_prov"]) {
    if ($data_odierna=$riga1["data_offerta"]){
    echo "[*]il cliente ".$value." ha gia un offerta oggi</br>";}
    else{echo "[*]non esiste un offerta per ".$value."</br> ";
    //ed ora tramite questa ist. sql inserisco il cliente
    $sql2= "INSERT INTO `clienti_provvisori` (`id_cliente_prov` ,`cliente_prov` ,`data_offerta` )
    VALUES (NULL,'$value_p','$data_odierna')";
    $risultato2 = mysql_query($sql2);}
    }}echo "operazione precedente fatta il cliente ".$value."</br>"; }

    praticamente dato un array devo controllare se i suoi valori sono presenti in una tabella SQL, e se mancano inserirli, solo che risulta che fa tutto il ciclo while 1 volta, e non per ogni valore dell'array.

    Ecco cosa risulta:

    il cliente AAA ha gia un offerta oggi
    il cliente BBB ha gia un offerta oggi
    il cliente AAA ha gia un offerta oggi
    il cliente BBB ha gia un offerta oggi
    operazione precedente fatta per il cliente AAA
    operazione precedente fatta per il cliente BBB
    operazione precedente fatta per il cliente CCC
    operazione precedente fatta per il cliente DDD

    dove AAA e BBB sono clienti già presenti nella tabella SQL e difatti sono da controllare,
    mentre AAA BBB CCC e DDD sono i valori dell'array.
    e nemmeno li salva sulla tabella.

    Dove sbaglio?

    inoltre in un'altro passaggio vorrei fare un'operazione SQL con una variabile, ecco l'esempio:

    while ($riga1 = mysql_fetch_assoc($risultato1))
    {$data_odierna=date("d-m-Y");
    $sql2 = "DELETE FROM clienti_provvisori WHERE data = '$data_odierna' ";
    }
    in pratica cancellare quelle di oggi.


    un caldo ringraziamento a tutti per le soluzioni.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non ho seguito tutto il ragionamento, ma il while lo usi sulla funzione mysql_fetch_assoc che una volta "scorsi" tutti i risultati non riparte "automaticamente"... io cambierei proprio la logica delle operazioni, ma per semplicità prova a invertire i cicli mettendo il foreach dentro il while

  3. #3
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345

    Re: ciclo while dentro ciclo foreach

    Ciao. Agiuffo non ho capito bene quale sia il problema anche perchè dalla porzione di codice che hai scritto non riesco a capire che variabili sono quelle utilizzate.
    Comunque ho notato per prima cosa degli errori negli if, hai scritto = al posto di ==. Ho evidenziato in rosso le parti modificate.

    if ($value == $riga1["cliente_prov"]) {
    if ($data_odierna == $riga1["data_offerta"]) {

    Quindi il codice modificato alla fine è così:
    Codice PHP:
    foreach ($nome_var as $key => $value) {
        while (
    $riga1 mysql_fetch_assoc($risultato1)) {
            if (
    $value == $riga1["cliente_prov"]) {
                if (
    $data_odierna == $riga1["data_offerta"]) {
                    echo 
    "[*]il cliente ".$value." ha gia un offerta oggi</br>";
                }
                else {
                    echo 
    "[*]non esiste un offerta per ".$value."</br> ";
                    
    //ed ora tramite questa ist. sql inserisco il cliente
                    
    $sql2 "INSERT INTO `clienti_provvisori` (`id_cliente_prov` ,`cliente_prov` ,`data_offerta` ) VALUES (NULL,'$value_p','$data_odierna')";
                    
    $risultato2 mysql_query($sql2);
                }
            }
        }
        echo 
    "operazione precedente fatta il cliente ".$value."</br>";

    Poi nella parte dopo per cancellare i dati non c'è bisogno che recuperi tutti i risultati con mysql_fetch_assoc, basta questo:
    Codice PHP:
    $data_odierna date("d-m-Y");
    $sql2 "DELETE FROM clienti_provvisori WHERE data = '$data_odierna' "

  4. #4
    ciao!

    per Eyen: ho gia provato ad invertire i cicli, ma senza risultato..

    per tutti: grz della risposta, stasera cmq guardo bene e riprovo

    intanto T H A N K S !!

  5. #5
    Ciao, ho trovato in un'altra maniera, che indirettamente mi avete suggerito,
    posto il codice:


    foreach ($nome_var as $key => $value){
    $sql2 = "SELECT * FROM clienti_provvisori WHERE data_offerta = '$data_odierna' AND cliente_prov = '$value' ";
    $risultato2 = mysql_query($sql2);
    if (mysql_num_rows($risultato2)==0) {
    echo $value." non ha ancora una offerta oggi</br>";
    $sql3= "INSERT INTO `clienti_provvisori` (`id_cliente_prov` ,`cliente_prov` ,`data_offerta` )
    VALUES (NULL,'$value','$data_odierna') ";
    mysql_query($sql3);
    echo "ma cmq è appena stato inserito</br>";
    }else{echo $value." ha gia un'offerta oggi</br>";
    echo "e quindi non inseriamo niente</br>";}
    }


    Cmq grazie ancora dell'aiuto!

    se posso contraccambiare l'aiuto...

    C I A O

  6. #6
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345
    Prego, non c'è di che, anche se non sono stato di grande aiuto a parte la correzione dei due if. L'importante è che alla fine ce l'hai fatta, meno male.

    PS: Quando posti il codice php sul forum racchiudilo tra i tag {PHP} e {/PHP} oppure {CODE} e {/CODE}. (con le parentesi quadre al posto delle graffe) Così è più leggibile.


  7. #7
    ok..
    avrei un altro problema.. che non l'ho visto ancora trattato nel forum:

    praticamente in un form ho una serie di prodotti che stampo con una query e per ognuno creo la text box, dove l'utente inserisce il relativo numero se vuole, altrimenti la lascia vuota.
    codice:
    Codice PHP:
    <?php
    ...
    echo 
    "<form >";
    while (
    $riga mysql_fetch_assoc($risultato)) {
    echo 
    "[*]".$riga["denominazione_prodotto"];
    echo 
    '<input type="text" name=".$riga["denominazione_prodotto"]." value=""/>';
    echo 
    "</br>";

    ?>
    <input type="reset" value="Cancella tutto" />
    <input type="button" onClick="button_invia()" value="Conferma e invia offerta" />
    </form>
    nella seconda pagina devo fare l'elenco solo del nome e del valore delle textbox con un valore inserito.
    Ho provato con un semplice POST ma mi da errore nel definirlo nella riga di definizione "echo <form method="post">",
    pensavo a una sorta di operazione con AJAX che se selezionato salva il valore nella SESSION, ma magari complico un po troppo.

    Sapete darmi una dritta?

    T H A N K S

  8. #8
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345
    Semplicemente invii i dati tramite post. Puoi postare il codice con l'invio tramite post e l'errore che ti compare?

  9. #9
    praticamente se io scrivo
    Codice PHP:

    <?php 
    ... 
    echo 
    '<form method="POST">'
    while (
    $riga mysql_fetch_assoc($risultato)) { 
    echo 
    "[*]".$riga["denominazione_prodotto"]; 
    echo 
    '<input type="text" name=".$riga["denominazione_prodotto"]." value=""/>'
    echo 
    "</br>"

    ?> 
    <input type="reset" value="Cancella tutto" /> 
    <input type="button" onClick="conferma.php" value="Conferma e invia offerta" /> 
    </form>
    un semplice foreach pagina successiva non mi riesce, nel senso che credo che non passi niente perchè con questa istruzione non esce niente:
    Codice PHP:
    <?php
    $nome_var2
    =$_POST['text'];

    foreach (
    $nome_var2 as $value)
    {echo 
    "[*]".$value."</br>";
    }
    ?>

  10. #10
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345
    Non funziona per due motivi:
    1 - la variabile $_POST['text'] non esiste. Tu hai passato tramite post una variabile che non ha come nome "text", ma $riga["denominazione_prodotto"].
    2 - la pagina a cui deve mandare il form va inserita nell'attributo action del form, non come evento onlick di un pulsante button. Devi usare al suo posto un pulsante di tipo submit.

    Ti consiglio di leggerti bene questa parte della guida sui form in html: http://xhtml.html.it/guide/lezione/1...-del-tag-form/
    (la guida sui form continua ancora per qualche lezione successiva, devi andare avanti)

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.