• User Attivo

    setcookie() non lavora!

    Buongiorno gentili colleghi,
    mi trovo in difficoltà con la realizzazione di cookie da un form.
    Ho eseguito con successo il tutorial di W3Schools ma non riesco a replicare quanto appreso nel tutorial nel mio script PHP.
    L'obbiettivo è poter impostare meno cookie possibili per memorizzare tutti i dettagli di un prodotto.
    Purtroppo ciò che tento di fare non porta nemmeno ad un risultato parziale.
    Il campi del modulo vengono realizzati dallo script qualora gli venga passato, tramite querystring, id del prodotto e il nome dell'utente e dal dato id del prodotto vengono estratti i dati relativi ad esso.
    In produzione da questo script l'utente deve essere in grado di impostare i rispettivi valori, che vengono salvati nel cookie, per poi proseguire con le altri fasi quali la personalizzazione dell'ordine o salvare il prodotto selezionato come parte di un preventivo oppure passare alla conferma dell'ordine.
    Grazie a tutti per i consigli e i suggerimenti che mi fornirete.

    [PHP]
    <?php
    if(isset($submit))
    {
    setcookie("prodotto_1a", "Cliente: ".$cliente."|catalogo_id: ".$catalogo_id);
    setcookie("prodotto_1b", "colore: ".$colore."|prezzo €: ".$prezzo2);
    setcookie("prodotto_1c", "quantità: ".$quantita."|dettaglio: ".$dettaglio);
    setcookie("prodotto_1d", "valori: ".$valori."|stato_person: ".$sp);
    }

    // inserimento titolo della pagina
    require("../../inclusi/dati.php");

    // inserimento nomi tabelle
    require_once("../../inclusi/nomitabelle.php");

    $pid = $_GET['pid'];
    $utente = $_GET['u'];

    global $pid, $utente;

    // inclusione del file di classe
    include("../../inclusi/funzioni_mysql.php");
    // istanza della classe
    $data = new MysqlClass();
    // chiamata alla funzione di connessione
    $data->connetti();

    // estrazione del nome della sottocategoria
    $pro1_sql = $data->query("SELECT nome,keywords,descrizione FROM ".CATALOG_TABLE_PREFIX."catalogo WHERE catalogo_id='" . $pid . "' AND stato='attivo'");
    if(mysql_num_rows($pro1_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    $pro1_obj = $data->estrai($pro1_sql);
    $nome = $pro1_obj->nome;
    $keysIT = $pro1_obj->keywords;
    $descIT = $pro1_obj->descrizione;
    global $nome, $keysIT, $descIT;
    }
    ?>
    <html>
    <head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
    <meta name="keywords" content="<?php print $keysIT; ?>"/>
    <meta name="description" lang="it" content="<?php print $descIT; ?>"/>
    <meta name="author" content=" "/>
    <title><?php echo $nome; ?></title>
    <link href="../../tema/css/stile.css" type="text/css" rel="stylesheet" />
    <link href="../../tema/css/prodotto3.css" type="text/css" rel="stylesheet" />
    </head>
    <body>
    <div id="container">

    <?php
    // inclusione dei collegamenti del sito
    include("../../tema/header.php");
    ?>

    <div id="mascatg">
    <h1></h1>

    <div id="categoria">
    <!-- INIZIO area principale -->
    <div id="ap">
    <?php
    // estrazione del nome della sottocategoria
    $pro2_sql = $data->query("SELECT cat_id,sottocat_id,colori,dettagli_id,prezzo,minord,immagine_grande,immagine_piccola,stato_person FROM ".CATALOG_TABLE_PREFIX."catalogo WHERE catalogo_id='" . $pid . "' AND stato='attivo'");
    if(mysql_num_rows($pro2_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    $pro2_obj = $data->estrai($pro2_sql);
    $cid = $pro2_obj->cat_id;
    $sid = $pro2_obj->sottocat_id;
    $colori = $pro2_obj->colori;
    $did = $pro2_obj->dettagli_id;
    $prezzo = $pro2_obj->prezzo;
    $mo = $pro2_obj->minord;
    $ig = $pro2_obj->immagine_grande;
    $icona = $pro2_obj->immagine_piccola;
    $sp = $pro2_obj->stato_person;
    global $cid, $sid, $colori, $did, $prezzo, $mo, $ig, $icona, $sp;
    }

    // estrazione dei dati per la sottocategoria
    $scat_sql = $data->query("SELECT cat_id,sottocat FROM ".CATALOG_TABLE_PREFIX."sottocategorie WHERE sottocat_id='" . $sid . "'");
    if(mysql_num_rows($scat_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    while($scat_obj = $data->estrai($scat_sql))
    {
    global $idcate;
    $idcate = $scat_obj->cat_id;
    $sottocat = stripslashes($scat_obj->sottocat);
    }
    }

    // estrazione del nome della Categoria
    $cat_sql = $data->query("SELECT categoria FROM ".CATALOG_TABLE_PREFIX."categorie WHERE categoria_id='" . $idcate . "'");
    if(mysql_num_rows($cat_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    while($cat_obj = $data->estrai($cat_sql))
    {
    global $categoria;
    $categoria = stripslashes($cat_obj->categoria);
    }
    }

    echo "<p><a href="catalogo.php?u=$utente" class="cat">".$categoria."</a> | <span class="scat">". $sottocat ."</span></p>";
    ?>

    <div class="so1"></div>
    <div id="scheda1">
    <!-- Inizio Colonna immagini -->
    <div id="cimm">
    <div id="mi1">
    <?php
    echo "<a href="#" onClick="window.open('immagine.php?ig=$ig','Immagine ingrandita','fullscreen=0,location=0,status=no,toolbar=no,menubar=no,resizable=no,scrollbars=no,width=283px,height=283px;');"><img src="" . $icona . "" border="0" /></a></div>";

    // conteggio di altre immagini
    $conta_ai = $data->conta_immagini_ai($pid);
    //echo "<br />".$conta_ai;

    if ($conta_ai != 0)
    {
    // estrazione degli id altre_immagini_id
    $ai_sql = $data->query("SELECT * FROM ".CATALOG_TABLE_PREFIX."altre_immagini WHERE catalogo_id='" . $pid . "'");
    if(mysql_num_rows($ai_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    while($ai_obj = $data->estrai($ai_sql))
    {
    $immgra = $ai_obj->imm_gra;
    $immpic = $ai_obj->imm_pic;
    echo "<div class="mi2"><a href="#" onClick="window.open('immagine.php?ig=$immgra','Immagine ingrandita','fullscreen=0,location=0,status=no,toolbar=no,menubar=no,resizable=no,scrollbars=no,width=283px,height=283px;');"><img src="" . $immpic . "" border="0" /></a></div>";
    }
    }
    }

    ?>
    </div>
    <!-- Fine Colonna immagini -->

    <!-- Inizio Descrizione Prodotto -->
    <div id="cpro">
    <h1 class="nome"><?php echo $nome; ?></h1>
    <p><?php echo $descIT; ?></p>
    <?php
    // valorizzazione delle variabili con i parametri dal form
    if(isset($_POST['submit'])){

    // disconnessione
    $data->disconnetti();
    }
    else
    {
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="hidden" name="cliente" value="<?php echo $utente; ?>" />
    <input type="hidden" name="catalogo_id" value="<?php echo $pid; ?>" />
    <input type="hidden" name="prezzo2" value="<?php echo $prezzo; ?>" />
    <?php
    // ottengo i colori relativi al prodotto
    //print_r(explode('|', $colori));
    if ($colori != " ")
    {
    $colArray = preg_split('/*/', $colori, -1);
    global $colArray;
    // conteggio dei colori nell'array
    $result = count($colArray);
    //echo "<br />".$result;
    echo "<div class="eti">Colori:</div>";
    echo "<div class="valori">";
    foreach ($colArray as $colore)
    {
    echo "<div class="cam">";
    echo "<input type="radio" name="colore" value="".$colore."" /> <b>".$colore."</b>";
    echo "</div>";
    }
    echo "</div>";
    }

    if ($did != 0)
    {
    // ottenere le Taglie o le Misure relative al prodotto
    // estrazione di dettaglio e di valore
    $det_sql = $data->query("SELECT * FROM ".CATALOG_TABLE_PREFIX."dettagli WHERE dettagli_id='" . $did . "'");
    if(mysql_num_rows($det_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    while($det_obj = $data->estrai($det_sql))
    {
    $dettaglio = $det_obj->dettaglio;
    $valore = $det_obj->valore;
    global $dettaglio;
    $dettArray = preg_split('/*/', $valore, -1);
    global $dettArray;
    }
    }

    // conteggio dei colori nell'array
    $result2 = count($dettArray);
    global $result2;
    //echo "<br />".$result2;
    //print_r($dettArray);

    echo "<div class="eti">".$dettaglio.":</div>";
    echo "<div class="valori">";
    foreach ($dettArray as $key => $value)
    {
    echo "<div class="cam">";
    echo "<input type="checkbox" name="nome_det".$key."" value="".$value."" /> <b>".$value."</b>";
    echo "  <span class="qua">Quantità</span>: ";
    echo "<input type="text" name="qua_det".$key."" size="4" class="iara" />";
    echo "</div>";
    $valori = "nome_det".$key.",qua_det".$key;
    global $valori;
    //echo $valori;
    }
    echo "</div>";
    }
    ?>
    <p>Prezzo unità:
    <?php
    if (($prezzo == "0.00") && ($sid == 1))
    {
    // estrazione del Prezzo Speciale
    $ps_sql = $data->query("SELECT nome,valore FROM ".CATALOG_TABLE_PREFIX."additivi WHERE sid='" . $sid . "' AND additivo='Prezzo'");
    if(mysql_num_rows($ps_sql) > 0)
    {
    // estrazione dei record tramite ciclo
    $ps_obj = $data->estrai($ps_sql);
    $nomeadd = $ps_obj->nome;
    $valadd = $ps_obj->valore;
    global $nomeadd, $valadd;
    echo "<span class="ps">".$nomeadd."</span> <input type="text" name="prezzo" value="".$valadd."" size="6" />";
    }
    }
    else
    {
    echo "<input type="text" name="prezzo" value="".$prezzo."" size="6" class="prezzo" />";
    }
    ?>
    <span class="eur">EUR</span></p>
    <?php
    // Minimo d'ordine
    if ($mo == 1)
    {
    $mop = $mo." pezzo";
    echo "<p>Minimo d'ordine: <b>".$mop."</b>  Quantità <input type="text" name="quantita" value="" size="4" class="iara" /></p>";
    }
    else
    {
    $mop2 = $mo." pezzi";
    echo "<p>Minimo d'ordine: <b>".$mop2."</b>  Quantità <input type="text" name="quantita" value="" size="4" class="iara" /></p>";
    }
    ?>
    <div class="so2"></div>
    <div class="pul1"><input type="submit" name="submit" class="submit"/></div>
    </form>
    <?php
    }
    ?>
    </div>
    <div class="so1"></div>
    <p><span class="prezzo2">Il prezzo è escluso di IVA, spesa per la consegna e costo dell'eventuale personalizzazione.</span></p>
    </div>
    <!-- Fine Descrizione Prodotto -->

    </div>
    <!-- Fine Scheda -->
    </div>
    <!-- FINE area principale -->

    </div>
    <div id="advs">
    <?php
    include("../../tema/advs_6.inc");
    ?>
    </div>
    </div>

    </div>

    <?php
    include("../../tema/footer.php");
    ?>
    [/PHP]


  • User

    vedo che setti i cookie... ma poi che comando usi per leggerli? :():


  • User Attivo

    Uso il seguente codice PHP:

    <?php
    // Print a cookie
    echo $_COOKIE["nome_cookie"];
    ?>


  • User Attivo

    Non riesco a ottenere il cookie se provo a farlo nello script postato.


  • User

    Alcuni browser bloccano i cookie, hai controllati che siano accettati?


  • User Attivo

    Leggo che non mi riuscite a capire.
    Non si tratta del problema se il browser blocca i cookie e nessuno dei browser usati li blocca è che se uso dati degli oggetti il cookie non viene creato mentre se uso il paradigma procedurale il cookie viene creato e viene stampato usando semplicemente $_COOKIE.
    Non riesco a comprendere perchè non funziona con il paradigma OOP!


  • ModSenior

    Intanto bisogna vedere con un plugin del browser se i cookie vengono creati o meno. Ad occhio, vedendo solo quel pezzo di script, si nota che utilizzi $submit che non esiste da nessuna parte per impostare i cookie.


  • User Attivo

    Quindi darkita?


  • User

    Il problema è di fondo...

    SE il codice del primo post è il tuo... se l'utente ha fatto un "submit" e quindi trovo la variabile settata... da dove prende i dati? o_0 (per settare i cookie)... detto questo... invece di usare un cookie potresti sempre usare una sessione, ma invece di usare il w3c leggi la bibbia , ahem, l'unica vera guida di php... aka php.net ... in cui trovi ovviamente la parte di set_cookie() con i vari dati.