Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Anomalo inserimento doppio in tabella

    Scusate il disturbo ma sto uscendo pazzo!!!!!!
    Sto cercando di realizare un sito di ecommerce in PHP e MySql ma mi succede una cosa stranissima.
    Il sito è strutturato in maniera semplice con una pagina (index.php) in cui vengono inclusi un menu a sx (menu.inc) una parte centrale in cui di volta in volta passando un parametro in GET carico una pagina (di solito l'elenco dei prodotti) e a dx un inc che visualizza lo stato del carrello.

    Il tutto funziona a meraviglia, ma quando inserisco un nuovo prodotto nel carrello (una tabella con 5 campi: id [autoincrement e kiave proimaria], id_trans, id_prodotto, prezzo, e qta) con un semplice insert con dei parametri passati anche questi in GET alla stessa pagina nella tabella vengono inseriti 2 record uguali??? come può essere???

    ecco un parte di codice da dove si evincono i parametri passati in GET e poi la parte dell'inserimento:
    ----------------- così passo alla pagina i vari parametri
    </td>

    ----------------- così li inserisco nella tabella
    $id_prodotto=$_GET[id_prodotto];
    $agg=$_GET[agg];
    if (isset($id_prodotto)&&($agg==1))
    {
    $ins=mysql_query("INSERT INTO carrello (id_trans,id_prodotto,prezzo,qta) VALUES ('$id_sessione','$id_prodotto','12.00',1)");
    }

    Vi prego aiutatemi sto uscendo pazzo.......
    Grazie Alberto

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027

    Re: Anomalo inserimento doppio in tabella

    Originariamente inviato da Kille
    Scusate il disturbo ma sto uscendo pazzo!!!!!!
    Sto cercando di realizare un sito di ecommerce in PHP e MySql ma mi succede una cosa stranissima.
    Il sito è strutturato in maniera semplice con una pagina (index.php) in cui vengono inclusi un menu a sx (menu.inc) una parte centrale in cui di volta in volta passando un parametro in GET carico una pagina (di solito l'elenco dei prodotti) e a dx un inc che visualizza lo stato del carrello.

    Il tutto funziona a meraviglia, ma quando inserisco un nuovo prodotto nel carrello (una tabella con 5 campi: id [autoincrement e kiave proimaria], id_trans, id_prodotto, prezzo, e qta) con un semplice insert con dei parametri passati anche questi in GET alla stessa pagina nella tabella vengono inseriti 2 record uguali??? come può essere???

    ecco un parte di codice da dove si evincono i parametri passati in GET e poi la parte dell'inserimento:
    ----------------- così passo alla pagina i vari parametri
    </td>

    ----------------- così li inserisco nella tabella
    $id_prodotto=$_GET[id_prodotto];
    $agg=$_GET[agg];
    if (isset($id_prodotto)&&($agg==1))
    {
    $ins=mysql_query("INSERT INTO carrello (id_trans,id_prodotto,prezzo,qta) VALUES ('$id_sessione','$id_prodotto','12.00',1)");
    }

    Vi prego aiutatemi sto uscendo pazzo.......
    Grazie Alberto
    La butto lì, lo fa sia con explorer che con firefox?
    Perchè a volte explorer quando non riesce a completare una richiesta fa la stessa chiamata una seconda volta, e questo potrebbe essere l'origine del tuo problema...

  3. #3

    non cambia

    Ho provato... lo fa anche con FireFox, dimenticavo comunque che sto usando easyPHP 1.8 ma non credo che sia questo il problema....

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027

    Re: non cambia

    Originariamente inviato da Kille
    Ho provato... lo fa anche con FireFox, dimenticavo comunque che sto usando easyPHP 1.8 ma non credo che sia questo il problema....
    dal codice che hai postato non si può dire qual'è il problema.

    Secondo me c'è un problema di redirezione o qualcosa del genere, comunque se quello è il codice della pagina e sei sicuro che la query è solo quella vuol dire che viene chiamata 2 volte, controlla bene il giro che fà l'applicazione.

    ciao

  5. #5

    ecco il codice....

    Ecco tutto il codice....
    ma la cosa strana è che se al posto dell'INSERT metto qualsiasi comando (tipo un echo) lo fa solo una volta o se come vedi leggi l'ultimo ID inserito con la funzinoe mysql_insert_id ti da solo il primo valore mentre nella tabella c'è il successivo....

    <table width=100% class=centro height=100% cellpadding=4 cellspacing=1 border=0 bgcolor="#f3faff" >
    <?
    include('conn.inc');
    include('funzioni.inc');
    $id_prodotto=$_GET[id_prodotto];
    $agg=$_GET[agg];
    if (isset($id_prodotto)&&($agg==1))
    {
    $ins=mysql_query("INSERT INTO carrello (id_trans,id_prodotto,prezzo,qta) VALUES ('$id_sessione','$id_prodotto','12.00',1)");
    //$ultimo=mysql_insert_id();
    //echo"ultimo $ultimo";
    //$del=mysql_query("DELETE from carrello where id=$ultimo");
    }
    echo"$inserito
    ";
    $id_genere=$_GET[genere];
    $pagina=$_GET[pagina];
    $a3 = mysql_query("SELECT * FROM genere where id_genere=$id_genere");
    $aa = mysql_num_rows($a3);
    $GEN = mysql_fetch_row($a3);
    $q3 = mysql_query("SELECT * FROM catalogo where id_genere=$id_genere order by prezzo");
    $na = mysql_num_rows($q3);
    echo"
    <tr>
    <td class=1020 colspan=4><a class=1020 href=index.php?pagina=articoli.inc&genere=$GEN[0]>$GEN[1]</a></td>
    </tr>";
    //echo"$id_genere - SELECT * FROM catalogo where id_genere=$id_genere - $na";
    if ($na>0)
    {
    $i = 0;
    echo"
    <tr bgcolor=#3e8ec9>
    <td><font color=#ffffff>MARCA</td><td><font color=#ffffff>PRODOTTO</td><td><font color=#ffffff>PREZZO</td><td width=25></td>
    </tr>";
    while ($i < $na)
    {
    mysql_data_seek($q3,$i);
    $ART = mysql_fetch_row($q3);
    $prezzo=prezzocoma($ART[12]);

    echo"<TR class=rigabluchiaro onMouseOver=\"this.className='rigabluscuro'\" onMouseOut=\"this.className='rigabluchiaro'\">
    <td>$ART[11]</td><td>€ $prezzo</td><td><a href=index.php?pagina=articoli.inc&id_prodotto=$AR T[0]&genere=$GEN[0]&agg=1><img src=./img/carrello.gif border=0 alt=\"aggiungi al carrello\"></td>
    </tr>
    ";
    $i ++;
    }
    }
    else
    {
    echo"
    <tr>
    <td class=10r_0000 valign=middle colspan=4>NESSUN ARTICOLO PRESENTE IN MAGAZZINO</td>
    </tr>";
    }
    ?>
    <tr>
    <td class=10r_0000 valign=top height=100% colspan=4></td>
    </tr>
    </table>

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027

    Re: ecco il codice....

    Il fatto che crei un solo echo non è abbastanza per fare debug, perchè potrebbe essere che proprio l'echo eviti un redirect, che non avviene se hai fatto già un output.

    Per fare un test vero fai cosi:


    $_SESSION['debug'][] = time()."-".$query;

    poi da un altra pagina fai un print_r di $_SESSION, e vedi se contiene una o più query.

    ciao

  7. #7
    codice:
    $id_prodotto=$_GET[id_prodotto];
    $agg=$_GET[agg];
    if (isset($id_prodotto)&&($agg==1))
    questo codice (ma anche il resto) e' mal formato. Mancano gli apici per gli indici associativi di GET, qui valorizzi con o senza un NOTICE $id_prodotto e poi verifichi se e' settato.... certo che lo e' a questo punto....

    Suggerimento: abilita la stampa dei NOTICE ed eliminali.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8

    intanto grazie

    intanto grazie a tutti per la disponibilità, poi ho scoperto l'arcano.... era che la pagina principale (index.php) conteneva alcuni file .inc (sopra.inc, sotto.inc, menu.inc) nei quali avevo ripetuto i tag HTML (tipo BODY) quindi succedeva un casino e quindi da qui il doppio inserimento......

    Ma anche se ho risolto questo problema adesso ho un'altro problema:
    Quando inserisco un prodotto nel carrello avendo fatto un controllo se è un prodotto esiste già nel carrello deve fare l'UPDATE della sua QTA succede che la prima volta che lo inserisco non so perchè mi mette 2 nella QTA e quando ne aggiungo un'altro mi incrementa di 2 la QTA????
    ecco il codice :

    //--------------------PRIMO INSERIMENTO
    if($agg=='1')
    {
    $trova = mysql_query("SELECT * FROM carrello where id_prodotto=$id_prodotto and id_trans='$id_sessione'");
    $contatrovati = mysql_num_rows($trova);
    //echo" $c SELECT * FROM carrello where id_prodotto=$id_prodotto and id_trans='$id_sessione'";
    if ($contatrovati==0)
    {
    $r3 = mysql_query("SELECT * FROM catalogo where id=$id_prodotto");
    $r = mysql_num_rows($r3);
    $ARTICOLO = mysql_fetch_array($r3);
    $inscarrello=mysql_query("insert into carrello (id_trans, id_prodotto, prezzo, qta) values ('$id_sessione',$id_prodotto,$ARTICOLO[prezzo],1)");
    $agg=0;
    $esiste=0;
    }
    else
    {
    $esiste=1;
    }
    }
    //--------------------





    //--------------------Incrementa se scegli lo stesso articolo
    if($esiste=='1')
    {
    $update=mysql_query("UPDATE carrello set qta=qta+1 where id_prodotto=$id_prodotto and id_trans='$id_sessione'")or die(mysql_error());
    }


    Grazie Alberto

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.