Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Errore sql in una pagina di conferma acquisti

    Salve ragazzi,
    apparentemente pare un problema difficile, forse lo è! Non lo so... Ecco il dilemma. Ho una pagina che, una volta effettuato un pagamento sul sito banca sella, mi conferma l'avvenuto pagamento. Se il pagamento ha avuto esito positivo, viene trasferito l'ordine da una tabella chiamata ordini ad un altra chiamata "archivioordini".

    Per intenderci ecco il codice:

    Codice 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"); 
            
            
    $sql "INSERT INTO archiviorder SELECT * FROM ordini WHERE ordine_id='".$ordine_id."'";
                if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }    
            
    $sql "DELETE FROM ordini WHERE ordine_id='".$ordine_id."'";
            if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }    
            print 
    "La transazione è stata conclusa correttamente. "."Grazie per l'acquisto tornate presto a trovarci.
    "
    ;
        }
            else { 
    Ora, se la transazione va a buon fine esce la scritta giusta "grazie per l'acquisto ecc...". Ma poi mi da questo errore!!!

    Error: Column count doesn't match value count at row 1

    E non passa l'ordine dalla tabella "ordini" a quella "archivioorder". Come mai? La struttura delle due tabelle è questa

    CREATE TABLE `ordini` (
    `ordine_id` int(5) NOT NULL auto_increment,
    `utente_id` int(5) NOT NULL,
    `event_id` int(5) NOT NULL,
    `numerointeri` int(5),
    `numeroridotti` int(5),
    `numerotavoli` int(5),
    `totale` decimal (5,2),
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`ordine_id`)
    )

    CREATE TABLE `archiviorder` (
    `archivio_id` int(5) NOT NULL auto_increment,
    `ordine_id` int(5) NOT NULL,
    `utente_id` int(5) NOT NULL,
    `event_id` int(5) NOT NULL,
    `numerointeri` int(5),
    `numeroridotti` int(5),
    `numerotavoli` int(5),
    `totale` decimal (5,2),
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`archivio_id`)
    )

    Dove può essere il problema??

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Specifica tutti i campi sia nella insert che nella select escludendo la chiave primaria

    codice:
    INSERT INTO archiviorder 
    (
    utente_id,...
    event_id,`data`)
    (SELECT 
    utente_id,...,`data`
    FROM ordini WHERE ....)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Riprendo in mano la discussione perchè ho cambiato le query in questo modo:

    Codice PHP:
            if ($Trovatook == $esito_positivo) {
            
            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"); 
            
            
    $sql "INSERT INTO archiviorder (ordine_id, utente_id, event_id, numerointeri, numeroridotti, numerotavoli, totale, data) SELECT (utente_id, event_id, numerointeri, numeroridotti, numerotavoli, totale, data) FROM ordini WHERE ordine_id='".$ordine_id."'";
                if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }    
            
    $sql "DELETE FROM ordini WHERE ordine_id='".$ordine_id."'";
            if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }    
            print 
    "La transazione è stata conclusa correttamente. "."Grazie per l'acquisto tornate presto a trovarci.
    "
    ;
        }
            else {        
    ?>
    <script type="text/javascript">
    <!--
    function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
    location.href = "carrello.php";
    }
    window.setTimeout("doRedirect()", 5000); //Fa partire il redirect dopo tot. secondi
    //-->
    </script> 
    Solo che ora salta fuori questo errore:

    Error: Operand should contain 1 column(s)


    E ancora non mi trasferisce l'ordine pagato dalla tabella "ordini" alla tabella "archiviorder". Perchè? Ho sbagliato qualcosa nella query? Ora l'errore è diverso da prima...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Nell'insert hai 8 campi e nella select 7.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Il problema Nicola è che su ordini ho si il campo ordine_id, ma è la chiave primaria. Non dovrei inserirla, oppure la devo inserire?

    Le tabelle sono queste due

    CREATE TABLE `ordini` (
    `ordine_id` int(5) NOT NULL auto_increment,
    `utente_id` int(5) NOT NULL,
    `event_id` int(5) NOT NULL,
    `numerointeri` int(5),
    `numeroridotti` int(5),
    `numerotavoli` int(5),
    `totale` decimal (5,2),
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`ordine_id`)
    )

    CREATE TABLE `archiviorder` (
    `archivio_id` int(5) NOT NULL auto_increment,
    `ordine_id` int(5) NOT NULL,
    `utente_id` int(5) NOT NULL,
    `event_id` int(5) NOT NULL,
    `numerointeri` int(5),
    `numeroridotti` int(5),
    `numerotavoli` int(5),
    `totale` decimal (5,2),
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`archivio_id`)
    )

    In archiviorder c'è un campo in più, archivio_id, altro non è che la chiave primaria...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova così
    codice:
    insert into archiviorder (tutti gli 8 campi separati da virgola)
    select * from ordini where condizione

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ciao Nicola,
    riprendo nuovamente la discussione perchè ora gli errori sono spariti, ma ho provato ad implementare un sistema per far partire una mail a transazione avvenuta e non mi va. Ecco il codice:

    Codice PHP:
            $sql "INSERT INTO archiviorder (ordine_id, utente_id, event_id, numerointeri, numeroridotti, numerotavoli, totale, data) SELECT * FROM ordini WHERE ordine_id='".$ordine_id."'";
                if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }    
            
    $sql "DELETE FROM ordini WHERE ordine_id='".$ordine_id."'";
            if (!
    mysql_query($sql)) {
                die(
    'Error: ' mysql_error());
                    }
                    
    $sql "SELECT utenti.*, eventi.evento as strEvento, archiviorder.*,
    date_format(archiviorder.data,'%d-%m-%Y %H:%i') AS dataora
    FROM utenti 
    INNER JOIN archiviorder ON archiviorder.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = archiviorder.event_id 
    WHERE utenti.utente_id ='"
    .$_SESSION['username']."' Order by ordine_id Desc LIMIT $primo$per_page";

    $query mysql_query($sql);

    $ordine_id mysql_result($query0'ordine_id');
    $nome mysql_result($query0'nome');
    $cognome mysql_result($query0'cognome');
    $datanascita mysql_result($query0'datanascita');
    $comuneresidenza =  mysql_result($query0'comuneresidenza');
    $evento mysql_result($query0'strEvento');
    $dataevento mysql_result($query0'dataevento');
    $numerointeri mysql_result($query0'numerointeri');
    $numeroridotti mysql_result($query0'numeroridotti');
    $numerotavoli =  mysql_result($query0'numerotavoli');
    $importo mysql_result($query0'totale');
    $cassa mysql_result($query0'biglietteria');
    $mail mysql_result($query0'mail');


                                                    
    // settare qui quello che apparirà nel campo from della email
                                    
    $from_mail "prevendite@goticket.it";
                                    
    // invio della mail contenente la passwd e gli altri dati
                                         
    $To="$mail";
                                         
    $Headers ="From: $from_mail";
                                         
    $Soggetto="[[url]www.goticket.it[/url]] Notifica di acquisto prevendita.";
                                         
    $Corpo.="     Gentile utente, grazie per aver acquistato la tua prevendita su [[url]www.goticket.it[/url]] \n\n";
                                         
    $Corpo.="     L'operazione risulta completata correttamente.\n\n";
                                         
    $Corpo.="     Ricorda che potrai ritirare il/i biglietto/i per l’ingresso presentando il tuo documento di identità alla cassa della location indicata dal Promoter. Il documento deve essere intestato all’acquirente del biglietto su GoTicket.it \n\n";
                                         
    $Corpo.="     Ti consigliamo comunque di stampare questa mail e presentarla unitamente al documento alla cassa.\n\n";
                                          
    $Corpo.="     Di seguito ecco i dettagli del tuo acquisto:\n\n";
                                         
    $Corpo.="     Acquisto n: $ordine_id\n";
                                         
    $Corpo.="     Nome cliente: $nome\n\n";
                                         
    $Corpo.="     Cognome cliente: $cognome\n\n";
                                         
    $Corpo.="     Data di nascita: $datanascita\n\n";
                                         
    $Corpo.="     Comune di residenza: $comuneresidenza\n\n";
                                         
    $Corpo.="     Evento: $evento\n\n";
                                         
    $Corpo.="     Data evento: $dataevento\n\n";
                                         
    $Corpo.="     Prevendite interi: $numerointeri\n\n";
                                         
    $Corpo.="     Prevendite ridotti: $numeroridotti\n\n";
                                         
    $Corpo.="     Prevendite tavoli: $numerotavoli\n\n";
                                         
    $Corpo.="     Importo: $totale\n\n";
                                         
    $Corpo.="     Cassa: $biglietteria\n\n";
                                         
    $Corpo.="     A presto!\n\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    $Corpo.="$from_mail\n";
                                         
    $Corpo.="http://www.goticket.it\n";
                                         
    $Corpo.="--------------------------------------------\n";
                                         
    mail($To$Soggetto$Corpo$Headers);

                                        echo 
    "ti è stata inviata una mail all'indirizzo $mail con i dati del tuo acquisto. Ti aspettiamo al prossimo evento!!"
    Mi esce fuori questo errore:

    Warning: mysql_close(): no MySQL-Link resource supplied in c:\programmi\easyphp1-8\www\copia on linedi progettolistafacile\lista-facile\confermapagamento.php on line 183

    Ossia in questa riga:

    Codice PHP:
    <?
    }
    }
    }
    mysql_close();
    ?>
    nella riga "mysql_close();"
    Perchè?

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.