Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: query eseguite 2 volte

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28

    query eseguite 2 volte

    ciao a tutti, vi metto di seguito il codice e vi espongo alla fine il problema^^

    #####CODICE####

    Codice PHP:
    <?php
    session_start
    ();
    require 
    "funzioni.php";

    if(
    $_SESSION['username'] == ""){
    echo 
    "Non sei autorizzato ad entrare!";
    exit();
    }


    $utente=$_SESSION['username'];
    $nome=$_POST['oggetto'];
    $prezzo=$_POST['prezzo'];
    $monete="monete";
    $query="SELECT * FROM utente WHERE nome='$utente'";
    $db->esegui($query);

    for(
    $i=0$i<$db->righe(); $i++)
    {
    $soldi=$db->leggi($i$monete);
    }



    if(
    $soldi<$prezzo)
    {
    echo 
    "monete insufficienti";
    }
    else
    {
    $soldi=$soldi-$prezzo;
    $query="INSERT INTO inventario VALUES('', '$utente', '$nome', '0')";
    $db->esegui($query);
    $query="UPDATE utente SET monete='$soldi' WHERE nome='$utente'";
    $db->esegui($query);
    echo 
    "acquisto avvenuto con successo";
    }


    $db->disconnetti(); ?>

    so che è un po' disordinato, cmq il problema è uno sostanzialmente... tutto è progettato perchè venga inserito in inventario un solo oggetto.. NON capisco perchè tutto il codice venga eseguito 2 volte.. infatti nel database ottengo 2 record.. 1 corretto e 1 che ha $nome=NULL... riuscite ad aiutarmi? spero di essere stato chiaro

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    se parli dell'INSERT nella tabella inventario:

    1) aggiungi subito dopo tale riga un print $query; per vedere la query generata
    2) stampa eventuali altre variabili

    p.s.: riposta il codice nei tag PHP del forum per maggior leggibilità!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28
    queste piccole precauzioni le ho prese senza trovare l'errore.. appare tutto corretto tranne pe ril fatto che (tutto il codice credo) venga letto 2 volte... ambiguo.. cmq grazie per ora

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    quali sono i campi di "inventario" nell'ordine?
    qual è il campo che diventa "null" (mi pare il terzo di "inventario", ma qual è)?

    riposto il codice per chiarezza:

    Codice PHP:
    <?php
        session_start
    ();
        require 
    "funzioni.php";
        if(
    $_SESSION['username'] == "") {
            echo 
    "Non sei autorizzato ad entrare!";
            exit();
        };
        
    $utente=$_SESSION['username'];
        
    $nome=$_POST['oggetto'];
        
    $prezzo=$_POST['prezzo'];
        
    $monete="monete";
        
    $query="SELECT * FROM utente WHERE nome='$utente'";
        
    $db->esegui($query);
        for (
    $i=0$i<$db->righe(); $i++) {
            
    $soldi=$db->leggi($i$monete);
        };
        if(
    $soldi<$prezzo) {
            echo 
    "monete insufficienti";
        } else {
            
    $soldi=$soldi-$prezzo;
            
    $query="INSERT INTO inventario VALUES('', '$utente', '$nome', '0')";
            
    $db->esegui($query);
            
    $query="UPDATE utente SET monete='$soldi' WHERE nome='$utente'";
            
    $db->esegui($query);
            echo 
    "acquisto avvenuto con successo";
        };
        
    $db->disconnetti();
    ?>

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28
    in inventario i campi sono
    id (autoincrementante)
    utente (l'utente che acquista)
    nome ($_POST['oggetto'] nonchè il nome dell'oggetto)
    equipaggiato (un boolean che sia 1 o 0 a seconda che lo sia o meno)

    con questo codice il mio risultato finale è il seguente

    1° record: 1 michele spada 0 //che è corretto
    2° record: 2 michele 0 //che non dovrebbe proprio esistere questo record

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma aggiungendo un print $query dopo l'insert che query stampa a video?

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28
    stampa la query esatta.. guarda come ho risolto (anche se cmq ha poco senso che lo faccia)

    Codice PHP:
    <?php
        session_start
    ();
        require 
    "funzioni.php";
        if(
    $_SESSION['username'] == "") {
            echo 
    "Non sei autorizzato ad entrare!";
            exit();
        };
        
    $utente=$_SESSION['username'];
        
    $nome=$_POST['oggetto'];
        
    $prezzo=$_POST['prezzo'];
        
    $monete="monete";
        
    $query="SELECT * FROM utente WHERE nome='$utente'";
        
    $db->esegui($query);
        for (
    $i=0$i<$db->righe(); $i++) {
            
    $soldi=$db->leggi($i$monete);
        };
        if(
    $soldi<$prezzo) {
            echo 
    "monete insufficienti";
        } else {
            if(empty(
    $nome)) //qui
            
    {;} //qui
            
    else{ // e qui
            
    $soldi=$soldi-$prezzo;
            
    $query="INSERT INTO inventario VALUES('', '$utente', '$nome', '0')";
            
    $db->esegui($query);
            
    $query="UPDATE utente SET monete='$soldi' WHERE nome='$utente'";
            
    $db->esegui($query);
            echo 
    "acquisto avvenuto con successo";
            }
        };
        
    $db->disconnetti();
    ?>

    cosa dici?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... cmq pare che lo script sia richiamato due volte: la prima dal form e la seconda... non so... dovresti scoprire questo... prova per esempio a stampare in cima allo script il referer per vedere da dove arriva l'altra chiamata (un refresh, per esempio)... cmq io metterei un if (!empty(...)) in cima a tutto

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28
    non sono molto esperto in realtà.. cioè cosa intendi dire?? se per favore puoi illuminarimi^^ non ho cpt

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    28
    ho messo il refer... la chiamata viene dal form e basta

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 © 2024 vBulletin Solutions, Inc. All rights reserved.