Pagina 3 di 5 primaprima 1 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 44
  1. #21
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    utilizzo un solo script che fa tutto:
    è tutto commentato...
    nella parte finale vorrei poter recuperare tramite l'ID inserito in array il TITOLO e il PREZZO del prodotto che sono in DB.
    dunque quando mostro il carrello (parte finale del codice) non vorrei vedere:

    2 Quantità 2
    5 Quantità 6

    ma

    Titolo Quantità 2 Prezzo
    Titolo Quantità 6 Prezzo

    Codice PHP:
    session_start();

    //------------------------------------------------------------------------------
    // SE LA SESSIONE NON ESISTE LA CREA
    //------------------------------------------------------------------------------
    if (!isset($_SESSION['jnb_total_products'])){

    $_SESSION['jnb_total_products'] = 0;

    }


    //------------------------------------------------------------------------------
    // IL LINK SUI PRODOTTI è DEL TIPO pagina.php?action=add&product=$id&quantitade=1 (per eliminare action=substract)
    //------------------------------------------------------------------------------
    switch (@$_GET['action']){

    //-- adding
    //--------------
    case 'add':

    if (isset(
    $_SESSION['jnb_quantity'][$_GET['product']])){

    // SE IL PRODOTTO è NEL CARRELLO AUMENTO LA QUANTITà DI 1
    $_SESSION['jnb_quantity'][$_GET['product']] += $_GET['quantidade'];

    }else{

    // SE IL PRODOTTO NON ESISTE NEL CARRELLO
    // LO AGGIUNGO

    $_SESSION['jnb_quantity'][$_GET['product']] = $_GET['quantidade'];
    $_SESSION['jnb_total_products']++;

    // Sorting alphabeticaly the products
    ksort ($_SESSION['jnb_quantity']);

    }

    break;

    //-- subtracting
    //--------------
    case 'subtract':

    if (
    $_SESSION['jnb_quantity'][$_GET['product']] <= $_GET['quantidade']){

    // SE ACT=SUBSTRACT RIMUOVO IL PRODOTTO SE LA QUANTITà è = 1

    unset($_SESSION['jnb_quantity'][$_GET['product']]);
    $_SESSION['jnb_total_products']--;

    }else{

    // SE è MAGGIORE DI 1 SOTTRAGGO UNA UNITà

    $_SESSION['jnb_quantity'][$_GET['product']] -= $_GET['quantidade'];

    }

    break;

    }

    //------------------------------------------------------------------------------
    //-- SE CI SONO PRODOTTI STAMPO LA LISTA
    //------------------------------------------------------------------------------

    if ($_SESSION['jnb_total_products'] > 0){

    echo 
    'BASKET LIST

    '
    ;

    // Because the product name is the index key, we will list the jnb_quantity variable keys
    $array_products array_keys($_SESSION['jnb_quantity']);

    foreach (
    $array_products as $product){

    echo 
    '[url="buy.php?action=subtract&product=' $product '&quantidade=1"]' $product '[/url] qtd: ' $_SESSION['jnb_quantity'][$product] . '
    '
    ;

    }

    echo 
    '

    '
    ;

    }

    //------------------------------------------------------------------------------
    //-- IL MODELLO DI LINK
    //------------------------------------------------------------------------------

    echo 'AVAILABLE PRODUCTS

    '
    ;

    echo 
    '[url="buy.php?action=add&product=$id&quantidade=1"]$titolo[/url]
    '
    ;
    echo 
    '[url="buy.php?action=add&product=$id&quantidade=1"]$titolo[/url]
    '
    ;
    echo 
    '[url="buy.php?action=add&product=$id&quantidade=1"]$titolo[/url]
    '
    ;

    ?> 

  2. #22
    allor.a. una parte va bene... è quello che ti ho detto io a parte nomi diversi....

    $_SESSION['carrello']["$id"] = $quantita;

    e poi un foreach su $_SESSION['carrello'] per avere tutte le coppie id/quantità.

    Quello che hai fatto tu è simile... il problema sta tutto dentro il foreach. Tutta la stampa del carrello dev'essere gestita dentro il foreach.. perchè foreach vuol dire "fai qualcosa per ogni elemneto dell'array (quindi del carrello)".. ed è appunto quello che devi fare:
    Per ogni id fai una query e recuperi i dati del rpodotto.. poi li stampi fomattandoli come meglio credi (uno alla volta)... quindi alla fine del ciclo avrai la lista dei prodotti con le rispettive quantità e il costo parziale (quantità per costo unitario che starà nel db) e costo totale ( accumulando in un'altra variabile la somma dei costi unitari)

    Non capisco perchè per ogni prodoto fai un link.. tu dovresti solo stampare una tabella con tutti i dati dei prodotti, una checkbox per eliminare ogni singolo prodotto, e un cmapo intput da cui poter modificare lle quantità (tramite un tasto aggiorna che non farà altro che cancellare il vecchio carrello e ricrearlo con tutto quello che gli arriva dall'aggiornamento).
    Il link semmai lo metti sotto questa tabella.. un link tipo "compra" che passa solo ad un'altra pagina che non modifica più il carrello ma gestisce in qualche modo l'ordine.

    Cmq-. andiamo per gradi.

    1) Adesso stampa solo id e quantità... senza i link. ok?
    2) invece di stampare l'id fai una query che estrae i dati del prodotto da DB e li stampa

    Poi pensi al resto, non mescoliamo troppe cose.

    La 1 è un attimo.
    per la 2... che problema hai, non cpaisco...

    tu hai scritto questo:
    $query= "SELECT * FROM libri where titolo = '" . $HTTP_GET_VARS['product'] . "'"; }
    $rs = mysql_query($query) or die(mysql_error());
    while ($row=mysql_fetch_array($rs)) {
    $titolo = $row["titolo"];

    basta adattarlo... invece di $HTTP_GET_VARS['product'] (che semmai dovrebbe essere $_GET['product']... guarda che altrimenti non ti funzionerà sul 99% dei server! aggiorna php!) avrai l'id preso dal foreach...

    quindi...
    $query= "SELECT * FROM libri where titolo = '$product'"; }
    $rs = mysql_query($query) or die(mysql_error());
    $row=mysql_fetch_array($rs)
    echo $row['titolo'];
    echo $row['altri cmapi'];
    etc etc

    finisc eil ciclo e fa la stessa cosa per un nuovo prodotto.


    In definitiva io farei così:
    Codice PHP:
    if ($_SESSION['jnb_total_products'] > 0)
    {
      echo 
    'BASKET LIST

    '

      
    $tot=0;
      echo 
    "<table>";
      foreach (
    $_SESSION['jnb_quantity'] as $prod=>$qta)
      {
        
    $query"SELECT * FROM libri where titolo = '$prod'"; }
        
    $rs mysql_query($query) or die(mysql_error());
        
    $row=mysql_fetch_array($rs)
        
    $costo $row['costo']*$qta;
        
    $tot+=$costo;
        echo 
    "<tr><td>{$row['titolo']}</td><td>{$row['autore']}</td><td>{$row['altrocampo']}</td><td>$costo</td></tr>"
      }
      echo 
    "</table>";
      echo 
    "costo totale: $tot";
      echo 
    "<a href=\"buy.php\">Ordina</a>"//la pagina buy riceverà tutto l'array e gestirà l'ordne in modo simile a come qua il carrello viene solo stampato..


  3. #23
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    io non è che ti adoro....di più
    ci siamo...
    ecco il codice:

    Codice PHP:
    if ($_SESSION['jnb_total_products'] > 0

      echo 
    'BASKET LIST

    '
    ;  
      
    $tot=0
      echo 
    "<table align='center' width='500' cellpadding='5'>";
        echo 
    "<tr>";
        echo 
    "<td>Titolo</td><td>Prezzo</td><td>Quantità</td><td>Totale</td>";
      foreach (
    $_SESSION['jnb_quantity'] as $prod=>$qta
      { 
        
    $query"SELECT * FROM libri where id = '$prod'";
        
    $rs mysql_query($query) or die(mysql_error()); 
        while (
    $row=mysql_fetch_array($rs)) {
        
    $id $row['id'];
        
    $titolo $row['titolo'];
        
    $prezzo $row['prezzo'];
        
    $costo $prezzo*$qta
        
    $tot+=$costo;

        echo 
    "<tr>"
        echo 
    "<td>$titolo</td><td>$prezzo</td><td>$qta</td><td>$costo</td>"
        echo 
    "<td>[url='buy.php?action=subtract&product=$id&quantidade=1']Rimuovi[/url]</td>";
        echo 
    "</tr>";
      } 

    }
      echo 
    "<tr><td></td><td></td><td></td><td>Totale $tot</td></tr>";
      echo 
    "</table>";


    domande:
    1. nel db il prezzo è salvato nel formato 25.00 (come recupero gli zeri nelle operazioni?...cioè il contenuto di $costo e $tot?

    adesso mi manca solo il modulo che invii la email e inserisca tutto nel db.
    ho pensato di fare la tabella:
    id_prod
    nome
    cognome
    email
    data
    quantità

    che ne dici?

  4. #24
    Sarò pignolo ma....

    Codice PHP:
    if ($_SESSION['jnb_total_products'] > 0

      
    $tot=0
      echo 
    'BASKET LIST


           <table align="center" width="500" cellpadding="5">
              <tr>
               <td>Titolo</td>
               <td>Prezzo</td>
               <td>Quantità</td>
               <td>Totale</td>
              </tr>'
    ;
      foreach (
    $_SESSION['jnb_quantity'] as $prod=>$qta
      { 
        
    $query"SELECT * FROM libri where id = '$prod'";
        
    $rs mysql_query($query) or die(mysql_error()); 
        
    $row=mysql_fetch_array($rs))
        
    $costo sprintf("%01.2f",$row['prezzo']*$qta);
        
    $tot+=sprintf("%01.2f",$costo);

        echo 
    "<tr>
              <td>
    {$row['titolo']}</td>
              <td>
    $row['prezzo']</td>
              <td>
    $qta</td>
              <td>
    $costo</td>
              <td><a href=\"buy.php?action=subtract&product=
    $id&quantidade=1\">Rimuovi</a></td>
             </tr>"
    ;
      } 
    }
      echo 
    "<tr><td colspan=\"4\" align=\"right\">Totale $tot</td></tr></table>";

    ..sarebbe meglio così
    C'è già corretta la formattazione del prezzo...
    se non va così per qualche errore dimmi l'errore prima di odificare tu (e prendi appunti dalle mie modifiche.. sono tutte piccole cose.. ma fanno in termini di efficienza e stile )


    adesso mi manca solo il modulo che invii la email e inserisca tutto nel db.
    ho pensato di fare la tabella:
    id_prod
    nome
    cognome
    email
    data
    quantità

    che ne dici?
    è sbagliatissimo

    l'ideale sarebbe:
    utente -> username | password | email | nome | cognome | indirizzo

    così ti memorizzi una sola volta i dati del cliente e non glieli chiedi più..

    poi:
    ordine -> idordine | data | altro (costo complessivo.... oppure status, per esempio pagato.. nonpagato.. consegnato.. non consegnato.. sai tu)

    dati_ordine -> id_ordine | id prodotto .... e poi se vuoi anche | quantità_prodotto | costo_per_prodotto

    ordini_effettuati -> username | id_ordine


    e ovviamente avrai già la tabella prodotti.

    Questo è un database normalizzato.. ovvero non c'è ridondanza
    In quello che hai tu avresti nome cognome email e altri dati ripetuti per ogni sngolo prodotto ordnato (se ordino 8.000 prodotti hai 8.000 volte la mia e-mail e se voglio campbiare e-mail da un'ipotetica pagina di profilo.. la devi cambiare in 8.000righe...).. ed inoltre non avresti traccia degli ordini (se faccio 2 ordini da 3 prodotti ciuascuno tu vedi che io ho ordinato 6 prodotti.. ma non vedi con quanti ordini).
    Ma questo è il meno, perchè a meno di non fare una chiave che include tutti i campi (cosa assurda) lo stesso cliente non potrà ordinare lo stesso prodotto. e anzi... se la chiave la fai solo id_prod.. nessun prodotto potrà essere ordinato due volte (anche da perosne diverse)... un casino!

    Come ti ho detto io invece separi tutto.. hai una tabella per i dati utente che non verranno ripetuti.. recuperi tutti gli ordini prendendo tutti i record in "ordini effettuati" dove l'username è "guidoz" per esepio.. e hai gli id di tutti gli ordini di guidoz.. con gli id di tutti gli ordini di guidoz puoi vedere per ciascun ordine che prodotti erano includsi nell'ordine...

    spero di essere stato chiaro.


  5. #25
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    sì quello è il modo più corretto...ma solo nel caso in cui si intenda fare una cosa seria. in fondo se manca la gestione utenti...

    dà parse error qui
    $row=mysql_fetch_array($rs))

    con il while andava liscio

  6. #26
    Originariamente inviato da bobonzo
    sì quello è il modo più corretto...ma solo nel caso in cui si intenda fare una cosa seria. in fondo se manca la gestione utenti...

    dà parse error qui
    $row=mysql_fetch_array($rs))

    con il while andava liscio
    $row=mysql_fetch_array($rs);

    mi ero scordato una parentesi del while

    Il while è inutile.. spero avrai u solo prodotto cn quella chiave no?

    Il database.. in ogni caso anche se non vuoi avere gestione utenti non va bene così.. se non vuoi afre gestione utenti fai

    ordine -> idordine | data | email | nome | cognome | indirizzo | costo_complessivo

    dati_ordine -> id_ordine | id prodotto | quantità_prodotto | costo_per_prodotto (se vuoi)


    altrimenti devi sempre ripetere tutto per ogni prodotto e se un utente protesta perchè non gli è arrivata la roba non sai manco cosa aveva ordinato (sai cos'ha ordinato in totale, ma non cosa ha ordinato in una certa data).

    Così dall'utente risali a tutti gli ordini che ha fatto.. e da ogni singolo ordine ai singoli prodotti che lo componevano.

    chiarament le chiavi sono gli id in ordne e prodotto.. e in dati ordine la coppi dei due id


  7. #27
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    azz...dopo qualche piccola svista tutto perfetto.
    ma il totale è zenza zeri


    adesso ti chiedo:

    in pagina send_ord.php mi costruisco una form semplice da compilare e poi sotto replico il carrello.

    ma come diavolo invio i "campi dinamici" alla funzione mail? io ho sempre usato
    Codice PHP:
    // L'INDIRIZZO DEL DESTINATARIO DELLA MAIL
    $to "webmaster@progedit.com";

    //errori
    $back "<font class='estratto'>[url='javascript:history.go(-1);']Torna indietro[/url]</font>";
    $errore "<center>



    <font class='breve'>Si sono verificati i seguenti errori:</font>\n</center>"
    ;

    //semplifico le var
    $nomex trim(stripslashes($_POST["nome"]));
    $emailx trim(stripslashes($_POST["email"]));
    $oggettox trim(stripslashes($_POST["oggetto"]));
    $testox trim(stripslashes($_POST["testo"]));

    // IL SOGGETTO DELLA MAIL
    $subject "Email da un visitatore: ";
    $subject .= "$oggettox";

    // COSTRUIAMO IL CORPO DEL MESSAGGIO
    $body "Ecco il messaggio inviato dal visitatore:\n\n";
    $body .= "Nome: " $nomex "\n";
    $body .= "Email: " $emailx "\n\n";
    $body .= "Oggetto: " $oggettox "\n\n";
    $body .= "Testo:\n" $testox "\n";

    // INTESTAZIONI SUPPLEMENTARI
    $headers "From: Modulo utenti<modulo@progedit.com>";

    if (
    $nomex == '') {
    $errore .= "<center>
    <font class='breve'>Hai dimenticato di inserire il tuo nome</font>


    $back</center>";
    echo 
    $errore;
    die();
    }
    if (
    $oggettox == '') {
    $errore .= "<center>
    <font class='breve'>Hai dimenticato di inserire un oggetto</font>


    $back</center>";
    echo 
    $errore;
    die();
    }
    if (
    $testox == '') {
    $errore .= "<center>
    <font class='breve'>Hai dimenticato di inserire il testo</font>


    $back</center>";
    echo 
    $errore;
    die();
    }

    //controllo sul campo email 
    if(ereg(".+\@.+\..+"$emailx) && (ereg("^[a-zA-Z0-9_@.-]+$"$emailx)) && ($emailx != '')) {

    // INVIO DELLA MAIL
    if(@mail($to$subject$body$headers)) { // SE L'INOLTRO E' ANDATO A BUON FINE...

    echo "<center>



    <font class='breve'>La mail è stata inviata con successo
    La nostra redazione ti risponderà al più presto
    Grazie</font>

    $back</center>";

    } else {
    // ALTRIMENTI...

    echo "<center>



    <font class='breve'>Si sono verificati dei problemi nell'invio della mail</font>


    $back</center>"

  8. #28
    Originariamente inviato da bobonzo
    azz...dopo qualche piccola svista tutto perfetto.
    ma il totale è zenza zeri


    adesso ti chiedo:

    in pagina send_ord.php mi costruisco una form semplice da compilare e poi sotto replico il carrello.

    ma come diavolo invio i "campi dinamici" alla funzione mail? io ho sempre usato
    cosa sono i campi dinamici?

  9. #29
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    cioè dato che sono ignorante.

    se io ho in una pagina la var $titolo unica
    non ho problemi andando in send.php

    //a semplificare

    $titolox = trim(stripslashes($_GET["titolo"]));

    //costruire...:

    // IL SOGGETTO
    $subject = "Ordine online: ";
    $subject .= "$titolox";

    // /IL CORPO DEL MESSAGGIO
    $body = "Ecco il messaggio inviato dal visitatore:\n\n";
    $body .= "Nome: " . $nomex . "\n";


    // inviare l'email

    if(@mail($to, $subject, $body))

    ma come invio e costruisco il messaggio con il contenuto di un array?

  10. #30
    i prodotti li passi sempre per sessione... nella pagina che invia la mail prendi i dati dell'utente dal form, e i dati dell'ordine sempre dal carrello... sempre con un foreach.. solo che questa volta invece che stampare accodi tutto in una variabile che sarà il testo dell'e-mail

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.