• Moderatore

    Senza scrivere codice, mi dici in parole semplici cosa dovresti fare esattamente che non ho capito? 😄


  • User Attivo

    vorrei avere una tabella, su ogni riga della quale inserire vari dati riguardanti un prodotto. Fin qui ci sono.
    Ovviamente chi apre la pagina può inserire su ogni riga la quantità desiderata del prodotto e clickando su un pulsante, la pagina si dovrebbe aggiornare mostrando l'importo.

    con il codice che ho postato il tutto funziona. La prima volta che carico la pagina gli importi sono uguali a 0... mettiamo che voglia dieci confezioni del secondo prodotto, clicko su "aggiorna importo", la pagina si carica nuovamente mostrandomi sulla prima riga importo=0, sulla seconda importo=10 (ad esempio).

    Il problema, però, è che se a questo punto volessi aggiungere anche un tot di confezioni del primo prodotto e clickassi quindi sul pulsante "aggiorna importo" della prima riga, perderei le informazioni relative alla prima richiesta!

    per essere più chiaro: quel che accade:

    primo caricamento
    PRODOTTO-PREZZO-QUANTE NE DESIDERI?-IMPORTO
    cozze 2? 0 0 "aggiorna importo"
    scampi 20? 0 0 "aggiorna importo"

    secondo caricamento (ho impostato il quante ne desideri della riga scampi su 4 e clickato su "aggiorna importo" della riga scampi)
    PRODOTTO-PREZZO-QUANTE NE DESIDERI?-IMPORTO
    cozze 2? 0 0 "aggiorna importo"
    scampi 20? 4 80? "aggiorna importo"

    terzo caricamento (ho impostato il quante ne desideri della riga cozze su 8 e clickato su "aggiorna importo" della riga cozze)
    PRODOTTO-PREZZO-QUANTE NE DESIDERI?-IMPORTO
    cozze 2? 8 16? "aggiorna importo"
    scampi 20? 0 0 "aggiorna importo"

    mentre vorrei che fosse:
    PRODOTTO-PREZZO-QUANTE NE DESIDERI?-IMPORTO
    cozze 2? 8 16? "aggiorna importo"
    scampi 20? 4 80? "aggiorna importo"

    ora spero sia chiaro...io non so più dove :arrabbiato:


  • Moderatore

    Potresti usare le sessioni.

    Riga 1: aggiorna --> tu setti $_SESSION['cozze']=4;

    Riga 2: aggiorna -> $_SESSION['scampi']=16;

    quando aggiorni controlli se esiste ed è settato $_SESSION['cozze'] e scampi e quello che ti pare. Se non lo è gli dici di stampare 0 altrimenti stampi il suo valore.

    Spero di aver compreso cosa ti servisse 🙂

    :ciauz:


  • User Attivo

    perfetto!!

    ti ringrazio moltissimo... ora mi ci dedico! 🙂


  • User Attivo

    mi ci sono dedicato inutilmente... sono arrivato allo stesso punto di prima con codice diverso...

    il problema è che non mi scrive nulla sul file di sessione se inserisco
    $nomeVariabile='cozze', poi al ciclo dopo $nomeVariabile='scampi'
    $_SESSION[$nomeVariabile]=tot.

    spero di essere stato comprensibile...


  • User Attivo

    mi sembra incredibile...

    ho aggiunto questo codice all'inizio del documento:
    <? //apertura della variabile di sessione
    session_start();
    if (isset($_POST['codiceProdotto'])) {
    $codiceRichiesta=$_POST['codiceProdotto'];
    $quantitaDesiderata=$_POST['quantita'];
    $_SESSION[$codiceRichiesta]=$quantitaDesiderata;
    echo $_SESSION[$codiceRichiesta];
    }
    ?>

    l'istruzione echo stampa effettivamente il contenuto... ma sul file di sessione non esiste!!! e quindi funziona esattamente come prima (non ha memoria, diciamo...)


  • User Attivo

    ho fatto circa 8500 tentativi...

    se tento di scrivere su $_SESSION['qualsiasi'] PRIMA di $_SESSION['qualsiasi']=$quantitaDesiderata; , scrive effettivamente sul file di sessione... ma DOPO non funziona più!

    che non si possa inserire su $_SESSION un valore preso da un form mi sembra strano!


  • Moderatore

    print_r($_SESSION) che ti da?


  • User Attivo

    nel caso io inserisca 56,

    Array ( [1] => 56 )

    però il file continua ad essere vuoto.


  • Moderatore

    Non funziona perché tu gli ridai il valore di post. 🙂

    Devi fare in modo che controlli se il valore cambi o no e comportarti di conseguenza con la variabile di sessione.

    Senza fare prove a caso, prova a segnarti mentalmente o su un pezzo di carta, cosa vuoi fare.
    Poi ragiona e vedi cosa fare...

    butto lì:
    passi il valore con post.
    però ogni volta che aggiorni passi un valore, ergo devi riuscire a capire quando quel valore deve esser considerato e quando meno.
    puoi farlo leggendo il valore del pulsante aggiorna che usi

    Oppure devi popolare bene il form.

    2 vie. scegli tu.

    Poi ti memorizzi i valori.

    Credimi: non è complicato, solo occorre pazienza per evitare errori di logica.
    🙂


  • User Attivo

    non capisco... lo schema dovrebbe essere questo:

    1: prende il codice del prodotto da aggiornare e lo mette COME CHIAVE in $_SESSION[' ']
    2: prende il valore inserito nel form e lo mette come valore in $_SESSION[' ']

    3: verifico che il valore del prodotto da aggiornare sia uguale a quello del prodotto che sto inserendo in tabella; se sì, calcolo il nuovo importo; se no, l'importo è uguale a 0.

    se mi scrivesse su questo benedetto $_SESSION[$codiceRichiesta] funzionerebbe!


  • User Attivo

    ho trovato!!

    $_SESSION['5'] NON FUNZIONA! (http://it.php.net/manual/it/ref.session.php)

    quindi ho messo $_SESSION[$nomeProdotto]... ora sul file di sessione mi scrive tutto... devo solo riuscire per bene a far funzionare gli if...

    grazie mille! 🙂


  • User Attivo

    ora funzionerebbe perfettamente... peccato che inviando il nome del prodotto tramite un campo input nascosto, non invia il nome completo, se ci sono degli spazi!!!

    esempio:
    $nomeProdotto='cozze alla marinara';

    <form method="POST" action="negozio.php" name="$codice">
    <INPUT TYPE='HIDDEN' NAME='nomeProdotto'VALUE=$nomeProdotto>

    ma incredibilmente...

    $_POST['nomeProdotto']=='cozze';

    è una follia!!!:x certo, potrei risolvere chiamando tutti i prodotti con un nome senza spazi... ma non è elegante ;)!

    qualcuno ne sa qualcosa? grazie mille in anticipo...:ciauz:


  • User Attivo

    risolto!! 🙂

    ho diviso $nomeProdotto con explode(); e prendo solo il primo elemento dell'array per il confronto... a posto! 🙂


  • User

    Ciao, se hai risolto così ok:bho:, ma secondo me quando devi stampare una variabile php in un form html ti converebbe fare value=<?=$nomeprodotto;?>
    .Spero di nnn averti confuso o di nn aver detto una cavolata :yuppi:


  • User Attivo

    mhm... non so, ora provo...

    ma, pensavo. non può essere che il metodo POST del form invii solo la prima parola dello spazio HIDDEN... invierà forse un array? come fare a capirlo?

    thanks...


  • User Attivo

    Sir Fabio ho provato anche come dici tu, ma niente...

    facendo alcune prove ho scoperto che se si inserisce come value di un form una variabile php, se questa contiene degli spazi viene divisa!
    es:

    <?
    $ciao="ciao a tutti";
    ?><form name='form' action='Document1.php' method='POST'>
    <input type='text' name='testo' value=<?=$ciao;?>><input type='submit' value='ok'></form>
    <?if (isset ($_POST['testo'])){
    echo $HTTP_POST_VARS['testo'];
    }
    ?>

    il valore dell'input type text sarà solo "ciao"...
    se io aggiungessi " a tutti" e lo inviassi, riceverei la stringa completa...

    che fare?


  • User

    ho risolto:
    <?
    $ciao="ciao a tutti";
    ?>
    <form name='form' action='giorgiotave.php' method='GET'>
    <p>
    <input type='text' name='testo' value='<?=$ciao;?>'>
    <input type='submit' value='ok'>
    </p>

    </form>
    <?
    if (isset ($_REQUEST['testo'])){
    echo $_REQUEST['testo'];
    }
    ?>


  • User

    Ho Risolto:
    <?
    $ciao="ciao a tutti";
    ?>
    <form name='form' action='giorgiotave.php' method='GET'>
    <p>
    <input type='text' name='testo' value='<?=$ciao;?>'>
    <input type='submit' value='ok'>
    </p>

    </form>
    <?
    if (isset ($_REQUEST['testo'])){
    echo $_REQUEST['testo'];
    }
    ?>

    Nei form il valore di una chiave deve sempre essere contenuto tra ''. Poi ti consiglio l'uso di $_REQUEST, in quanto accetta sia GET che POST, così potresti evitare frustranti problemi di ricorsione dei dati :figo:


  • User Attivo

    hai assolutamente ragione!!

    avevo dimenticato le virgolette qui! ...VALUE='$nomeProdotto'>...

    ora va a meraviglia...

    grazie mille! 🙂 spero di poter essere utile anch'io, prima o poi!