• User

    Si avevo pensato anche io di inserire l'id_utente. Ma mi sfugge una cosa. Nel momento in cui un un utente entra, acquista. I dati vengono inviati alla tabella ordine. Ma come viene passato il valore dell'id_utente? Oppure come vado poi a pescare i dati per quell'ordine relativi a quell'utente?

    Mi spiego, l'utente dovrebbe poi visualizzare una pagina ove ha i dettagli dell'ordine: il suo nome e cognome, indirizzo per la spedizione, l'evento acquistato, il numero di biglietti acquistati ed il totale dell'acquisto...


  • Super User

    Beh per ripescare i dati si usano le select di sql. Per passare l'id_utente, penso convenga salvarlo in sessione quando l'utente si logga. Per la pagina con la visualizzazione, una volta che hai i dati è semplice.


  • User

    Salvarlo in sessione che intendi? Io utilizzo le sessioni per verificare, in una pagina, che l'utente sia registrato memorizzandoci all'interno username. Se la la variabile di sessione è diversa da username, allora si rimanda alla pagina login.

    Mi sfugge come memorizzare l'id_utente

    per intenderci:

    If ($_SESSION ['username'] != true)
    ecc


  • Super User

    // l'utente si logga...

    $_SESSION ['userID'] = $userID; //userID è preso dalla fomr di login

    ....

    più avanti salvi dentro il db la varibile $_SESSION ['userID']


  • User

    Aspetta però, stiamo parlando di due dati diversi o sbaglio? Da un lato serve l'id_utente. Dall'altro, tramite la sessione, passi l'username. O no?


  • Super User

    Puoi passare quello che vuoi era solo un esempio...


  • User

    Vorrei capire però una cosa. Supponiamo di avere le due tabelle. Ordini e utenti. In entrambe abbiamo il campo id_utente. Chiaro che quando un utente si registra, su id_utente della tabella utenti viene dato un valore (autoincrement, per esempio uno). Ma è chiaro che su quella ordini non viene dato nessun valore.

    L'id_utente della tabella ordini viene compilato quando l'utente effettua l'acquisto. Ma non è detto che i due id_utente coincidano. Non so se mi spiego. Magari un utente di registra e non acquista. Subito dopo se ne registra un altro, con id_utente pari a 2. Questo acquista e valorizza l'id_utente della tabella ordini con 1. Non c'è corrispondenza tra gli Id_utente delle due tabelle. In una (utenti) ho 2, nell'altra (ordini) ho 1.

    Come faccio a relazionarle?

    Credo di aver scritto un po' di castronerie.....


  • Super User

    Beh non credo funzioni così. L'utente si registra e prende un id, supponiamo 3. Poi si registra l'utente 4. Ora, l'utente 4 fa un acquisto, ma tu ovviamente devi sapere qualeutente fa l'acquisto, quindi devi farlo loggare e salvarti in sessione il suo id. quindi quando l'utente 4 va a fare un acquisto, tu sai che è l'utente 4, e dentro la tabella acquista salvi 4 come id_utente.


  • User

    Ho risolto il problema in questo modo. Ora ho diverse tabelle, di cui mostro la struttura:

    CREATE TABLE utenti (
    utente_id int(3) NOT NULL auto_increment,
    username varchar(30) NOT NULL default '',
    password varchar(34) NOT NULL,
    confermapassword varchar(34) NOT NULL,
    nome varchar(30) NOT NULL default '',
    cognome varchar(30) NOT NULL default '',
    giorno int(2) NOT NULL default '',
    mese int(2) NOT NULL default '',
    anno int(4) NOT NULL default '',
    cap int(10) NOT NULL default '',
    provincia varchar(30) NOT NULL default '',
    indirizzo varchar(30) NOT NULL default '',
    civico int(5) NOT NULL default '',
    mail char(255) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    ip char(15) NOT NULL default '',
    PRIMARY KEY (utente_id),
    UNIQUE KEY id (utente_id),
    KEY id_2 (utente_id)
    )

    La seconda, eventi:

    CREATE TABLE eventi (
    event_id int(5) unsigned NOT NULL auto_increment,
    evento text NOT NULL,
    luogo text NOT NULL,
    dataevento varchar(50) NOT NULL default '',
    ora varchar(50) NOT NULL default '',
    descrizione text NOT NULL,
    disponibilita int(3),
    prezzo decimal (5,2),
    autore varchar(50) NOT NULL default '',
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    nome varchar(50) NOT NULL default '',
    size varchar(25) NOT NULL default '',
    type varchar(25) NOT NULL default '',
    immagine longblob NOT NULL,
    pub int(1) NOT NULL default '0',
    PRIMARY KEY (event_id)
    )

    La terza, ordini:
    CREATE TABLE ordini (
    ordine_id int(5) NOT NULL auto_increment,
    utente_id int(5) NOT NULL,
    event_id int(5) NOT NULL,
    numero int(5),
    totale decimal (5,2),
    data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (ordine_id)
    )

    Come vedete nell'ultima ho i campi che mettono in relazione le tre tabelle. In questo modo vorrei ottenere, in una pagina, tutti i dati relativi agli acquisti effettuati da un determinato utente. Ad esempio, l'utente 1 che eventi ha acquistato, quanti biglietti per singolo evento, il costo totale. La query sarebbe questa, ma da un problema.

    codice PHP:
    <?php
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");
    if(empty($_GET["id"])){
    echo"Non hai selezionato nulla";
    }
    else{

    $dati = mysql_query("SELECT utenti., eventi., ordini.*
    FROM utenti
    INNER JOIN ordini ON ordini.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = ordini.event_id
    WHERE utenti.utente_id ='".$_GET['id']."'") or die( mysql_error() . "<br>" . $sql);
    $array = mysql_fetch_array($dati);

    echo "<h3>Evento acquistato</h3> $array[evento]<br><br>";
    echo "<h3>Biglietti acquistati</h3> $array[numero]<br><br>";
    echo "<h3>Costo totale:</h3> $array[totale]<br>";
    echo "Acquistato il ".substr($array ['dataora'],0,10)." alle ". substr($array ['dataora'],11,5);
    mysql_close();
    }
    ?>

    Il problema è semplice, l'esecuzione di questa query mi da solo un risultato, il primo acquisto effettuato da un determinato utente. Dal primo in poi nulla. Esce fuori solo il primo, gli altri eventualmente fatti è come se non esistano all'interno del database. Come mai? Io vorrei che uscisse fuori la lista di tutti gli ordini effettuati, con nome e cognome dell'utente, la sua via, numero civico, eventi acquistati, numero biglietti per singolo evento, totale costo dei biglietti acquistati per ogni singolo evento.

    Perchè non salta fuori, dove sto sbagliando?


  • Super User

    Devi usare un ciclo while, ad esempio:

    while ($array = mysql_fetch_array($dati)){
    echo "<h3>Evento acquistato</h3> $array[evento]<br><br>";
    ........
    }