• User

    aiuto per stampare numeri decimali correttamente

    Ciao ragazzi ho creato un carrello della spesa, i campi del db sono id,modello,marca,prezzo mentre per fare la somma del totale di tutti i prodottie e la quantità aggiungo nella query COUNT(id) AS quantità per la quantità e SUM(prezzo) AS **Somma per questo prodotto, **dunque il campo quantità e somma per questo prodotto non sono presenti nel db.

    ora per fare il calcolo della spesa totale cioè sommando tutti i campi **Somma per questo prodotto **faccio così:

    $totale+=Somma per questo prodotto;

    e per stampare il risultato faccio un print $totale, per stampare il totale me lo stampa, fin qui ok, ma se il totale ha ad esempio 2 numeri decimalo composti da due zeri mi stampa solo il numero senza decimali, se invece i decimali sono altri numeri diversi da zero me li stampa. es: devo stampare ? 288.00 o ? 288.80 e mi stampa solo ? 288 o ? 288.8 oppure se devo stampare ? 288.85 stampa correttamente ? 288.85.

    Per rimediare questo problema ho fatto un printf così:

    printf("%.2f,$totale); e così stampa qanche i numeri zero (qualora ci siano), solo che è un metodo sporco, qualcuno saprebbe darmi una soluzione migliore "più pulita" per sostituire questa? Grazie a tutti. Ciao :ciauz:


  • Consiglio Direttivo

    Ciao 4everyoung

    puoi usare
    [php]number_format($var,2,",",".");[/php]in ordine sarebbero:
    La variabile
    Le posizioni decimali
    Separatore decimali
    Separatore migliaia

    :ciauz:


  • User

    Ciao Samyorn, grazie, provo e poi comunico l'esito. Ciao 🙂


  • User

    Ciao Samyorn, funziona,

    faccio così,

    $tot+=somma per que.....

    $totale=number_format($tot,2,",",".");

    print $totale;
    penso proprio sia migliore di quello chge avevo fatto io.
    ma così facendo posso anche passare la variabile con il $_GET in un link per riprenderla nella pagina con il form dell' l'invio dell'ordine?

    es:< a href=form_invio.php?cont=$totale>Invia l'ordine</a>

    e poi nella pag successiva

    $cont=$_GET['cont'];

    poi ancora una cosa, anche il campo quantità per ogni singolo prodotto è nella query string "SELECT ...COUNT(id) AS quantità..." e non nel db, per passare alla pagina del form d'invio anche la quantità per ogni singolo prodotto e il totale "...SUM(prezzo) AS Somma per questo prodotto... "per singolo prodotto come devo fare? E come li differenzio uno dall'altro? In modo da inviare nell'ordine d'acquisto NOME_PRODOTTO_1: quantità 3 prezzo ?575.98 NOME_PRODOTTO_2: quantità 2 prezzo ?534.62 eccetera e infine il totale generale dell'ordine $cont.

    Mi manca questa parte ed ho completato finalmante l'e-commerce...
    Ciao Samyorn. grazie. :ciauz:


  • Consiglio Direttivo

    Per passare il dato con $_GET non credo ci siano problemi, per il resto mi sa che ti conviene creare una tabella temporanea dove man mano memorizzi il tutto e ad acquisto terminato raccogli i dati tutti in una volta già belli che pronti 😉

    Vedi se ti va così 😉


  • User

    Ciao Samyorn, in pratica devo aggiungere qualche altro campo nel db e dopo che nella querystring faccio "SELECT id,modello,marca,prezzo,COUNT(id) AS quantità, (per la variabile quantità) e la somma per ogni prodotto con SUM(prezzo) AS somma....FROM carrello..." devo memorizzare anche queste variabili nel db con un INSERT INTO carrello (quantità,somma) VALUE ($quantità,$somma)... devo fare così?
    Poi un'altra domanda, mi conviene inserire nel db anche la variabile globale $PHPSESSID per distinguere i vari carrelli degli utenti? O mi basta inserire l'username(ma non mi sembra il massimo)? ...e selezionare il carrello con la clausola WHERE id_utente=$PHPSESSID?
    Ciao Samyorn, grazie come sempre... :ciauz: 🙂 :ciauz: 🙂 :ciauz: 🙂 :ciauz:


  • Consiglio Direttivo

    no, non intendevo aggiungere altri campi al Db, ma creare una tabella temporanea che rappresenti il carrello utente (CREATE TEMPORARY TABLE carrello_phpsessid etc etc etc, per esempio) tabella che ad acquisto effettuato o a rinuncia di acquisto eliminerai 😉 (DROP TEMPORARY TABLE carrello_phpsessid)
    Così ti verrà facile come avere n tabelle per n utenti che accederanno al tuo e-commerce 😉
    Tabelle che effettivamente non hai alla fine, in quanto temporanee 😉

    Immagina che io utente xyz accedo al tuo e-commerce e mi viene assegnata una tabella tutta mia (carrello_xyz) dove metterai id, id_prodotto, quantità, popolata man mano che effettuo le mie scelte. Ad acquisti effettuati la tabella (si spera :2: sarà bella piena di indicazioni dei prodotti e quantità scelte e sarà un giochino da nulla evadere il carrello 😉


  • User

    Ciao Samyorn, ciao a tutti, sono rientrato ed eccomi nuovamente sul mitico forum GT... è ancora l'euforia delle ferie che mi fa vedere doppio o l'interfaccia grafica del forum è leggermente cambiata? :):):)

    Allora Samyorn, grazie mille per questo prezioso suggerimento,da premettere che non conoscevo affatto la temporary table, allora devo fare esattamente quello che faccio creando una semplice tabella giusto? create temporary table (tutti i campi e tipo di dato) e poi faccio una query "Insert into temporary table(eccetera) e poi l'altra come la faccio? intendo la drop temporary etc...? insomma con un semplice if (se la mail con l'ordine viene inviata) drop cioè cancello la tabella e se l'utente rinuncia ad inviare l'ordine, cioè se decide di non voler più acquistare nulla e chiude il browser per un attacco di paranoia :D, come mi devo comportare? Ciaooooooooooo :ciauz:


  • Consiglio Direttivo

    bentornato 😄

    beh vaglia i vari casi e fai il tuo script di conseguenza 😄

    A) ordine completato: aggiorni la tabella ordini vera e propria prelevando con un SELECT i dati dalla tabella temporanea e scrivendoli sulla tabella ordini e a INSERT eseguito fai un DROP TEMPORARY TABLE etc etc
    B) l'utente rinuncia premendo un apposito tastino: uno script che faccia il DROP TEMPORARY TABLE etc etc
    C) l'utente si stufa e chiude il browser (:D) : metti un controllo data/ora sull'inserimento dei dati sulla tabella temporanea....se il "movimento" più recente è di oltre n minuti/ore/quelchedeciderai, esegui il DROP TEMPORARY TABLE
    D) tutto quello che ti puo' venire in mente 😄


  • User Attivo

    metti un controllo data/ora sull'inserimento dei dati sulla tabella temporanea....se il "movimento" più recente è di oltre n minuti/ore/quelchedeciderai, esegui il DROP TEMPORARY TABLE


    Ma in questo caso come esegui il drop? Cioè la query col drop dev'essere in una pagina che viene lanciata... oppure ti serve un "evento" derivante da una azione dell'utente che fa partire il drop... non è che si può eseguire una specie di "cron" allo scadere di un termine, no?

    Teoricamente soccorre la sessione... se lanci una sessione quando l'utente inizia a comprare e memorizzi tutto lì, se l'utente chiude il browser la sessione decade e il carrello si svuota... se arriva in fondo prelevi i dati dalla sessione e li passi all'ordine definitivo... così non usi una temporary table e mi sembra più efficace...

    keiske


  • User

    ok :), grazie samyorn, grazie anche a te Privacy-Impresa, implemento qualcosa e vi faccio sapere... Ciaoooo 🙂 :ciauz: