Non inserisce il record nel database

Salve a tutti.

Mi sto scervellando da ieri sul fatto che, dato il seguente codice:

<?php
   ob_start();
   session_start();
   
   include("Server/connessione.php");
   
   
   $idProdotto=$_GET['idProdotto'];
   $quantitaEffettiva=$_POST['quantita'];
   
   // Recupero la data di oggi e i microsecondi (che mi serviranno per identificare l'ordine che creerò) e la
        //  inserisco nell'ordine 
   $data=date("Y-m-d H:i:s");
   $microsec = microtime(true);

        // che se non esiste l'ordine, lo creo. 
   if(!isset($_GET['idOrdine'])){
      mysql_query("INSERT INTO ordine (data, microtime) VALUES ('".$data."',".$microsec.")", $db);  // Creo l'ordine
      $query="SELECT * FROM ordine where microtime=".$microsec;  // Estraggo l'id dell'ordine creato
      $result = mysql_query($query,$db);
      $ordine=mysql_fetch_array($result);
      $idOrdine=$ordine[0];
   }
   else{
      $idOrdine=$_GET['idOrdine'];
   };
   $query="SELECT * FROM acquisto where idProdotto =". $idProdotto;  
   $result = mysql_query($query,$db);
   $acquisto=mysql_fetch_array($result);
   $num_rows =mysql_num_rows($result);
   if($num_rows){
      $quantita=$quantitaEffettiva+$acquisto[3];
      mysql_query("UPDATE scquisto SET quantita = $quantita WHERE idProdotto = $idProdotto");      
   }
   else{ 
      mysql_query("INSERT INTO acquisto (idProdotto,idOrdine,quantita) VALUES ($idProdotto,$idOrdine,$quantitaEffettiva)");
   };

   $categoria=$_GET['categoria'];
   
   header("Location: ../carrello.php?categoria=$categoria&idOrdine=$idOrdine&data=$data&microsec=$microsec");
   mysql_close($db);   
   exit();
?>

non mi intacca minimamente il database, non inserendomi quindi i record.

Se invece provo così:

<?php
   ob_start();
   session_start();
   
   include("Server/connessione.php");
   
   
    
   $data=date("Y-m-d H:i:s");
   $microsec = microtime(true);
   
   mysql_query("INSERT INTO ordine (data, microtime) VALUES ('".$data."',".$microsec.")", $db);  // Creo l'ordine
   
   echo $microsec;

   mysql_close($db);   
   exit();
?>

L'ordine viene inserito!

Inizio a sdoppiare veramente la vista.....

Aiutatemi per favore.

Grazie!

inviato 6 anni fa
Schiappa
X 0 X

Ciao,

il tuo problema potrebbe essere causato dall'utilizzo della condizione isset, infatti questa verifica semplicemente che la variabile passata come parametro sia stata inizializzata, ne consegue che se nella tua queri string appare anche solo "idOrdine=" senza alcun assegnamento la variabile esisterà.

Io aggiungerei un controllo sulla stessa variabile per verificare che sia maggiore di 0.

Inoltre mi permetto di farti un paio di appunti.

per recuperare l'id della riga appena inserita ti conviene utilizzare subito dopo la query di INSERT la funzione mysql_insert_id($db) che recupera l'ultimo id inserito relativo alla connessione $db.

e al posto di mysql_fetch_array sfrutterei anzi o mysql_fetch_row (che mi pare possa funzionare nel tuo caso visto che sfrutti le row come array parametrizzati numericamente) o mysql_fetch_assoc (che crea un array associativo dove ricavi i campi passando il loro nome all'array, garantendoti anche che all'eventuale aggiunta di campi internamente alla tabella non sia necessario modificare il codice)

Una curiosità, ob_start(), session_start() e mysql_close($db) ti servono per uno scopo che non viene mostrato nelle porzioni di file che hai riportato?

risposto 6 anni fa
Giacomov
X 0 X

Ciao Giacomov.

Grazie per il tuo attento interessamento.

Per quanto riguarda:

ISSET

Ciao,

il tuo problema potrebbe essere causato dall'utilizzo della condizione isset, infatti questa verifica semplicemente che la variabile passata come parametro sia stata inizializzata, ne consegue che se nella tua queri string appare anche solo "idOrdine=" senza alcun assegnamento la variabile esisterà.

Io aggiungerei un controllo sulla stessa variabile per verificare che sia maggiore di 0.

...

Visto che fino all' isset idOrdine non viene mai menzionato, dubito che questo possa risultare inizializzato, se per inizializzato intendi creato, dichiarato, che esiste. E comunque ho provato a commentare tutto l' if obbligando l'inserzione in tutti i casi.

In quanto al recupero dell'id

...

per recuperare l'id della riga appena inserita ti conviene utilizzare subito dopo la query di INSERT la funzione mysql_insert_id($db) che recupera l'ultimo id inserito relativo alla connessione $db.

...

Grazie per la rivelazione!!!

In quanto a mysql_fetch_array per ora lascerò il codice invariato (ho un po' di fretta di finire il lavoro), tanto non ci dovrebbero essere controindicazioni (correggimi se sbaglio). SICURAMENTE mi guarderò le funzioni da te segnalate per i prossimi lavori!

Poi.

Una curiosità, ob_start(), session_start() e mysql_close($db) ti servono per uno scopo che non viene mostrato nelle porzioni di file che hai riportato?

ob_start lo uso sempre quando reindirizzo con l' header (nel passato mi ha dato problemi non farlo),

mysql_close($db) lo uso tutte le volte che in una pagina apro la connessione al database, forse da ignorante...

session_start() è effettivamente inutile....visto che passo i parametri con le GET...

Aquest'ultimo proposito vorrei un tuo parere: c'è qualche controindicazione nell'utilizzo delle sessioni? Forse a livello dei cookie?

A per non depistarci dall'argomento... questa la la mia nuova pagina, corretta da te:

<?php
   ob_start();
   
   include("Server/connessione.php");
   
   
   $idProdotto=$_GET['idProdotto'];
   $quantitaEffettiva=$_POST['quantita'];
   
   // Recupero la data di oggi con tanto di orario sensibile ai microsecondi e la inserisco nell'ordine 
   // che se non esiste lo creo. 
   $data=date("Y-m-d H:i:s");
   if(!isset($_GET['idOrdine']) || $_GET['idOrdine'] == 0){
      $query="INSERT INTO ordine (data) VALUES ('".$data."')";
      mysql_query($query, $db);  // Creo l'ordine
      $idOrdine=mysql_insert_id($db);
   }
   else{
      $idOrdine=$_GET['idOrdine'];
   };

   $query="SELECT * FROM acquisto where idProdotto =". $idProdotto;  // 
   $result = mysql_query($query,$db);
   $acquisto=mysql_fetch_array($result);
   $num_rows =mysql_num_rows($result);
   if($num_rows){
      $quantita=$quantitaEffettiva+$acquisto[3];
      mysql_query("UPDATE scquisto SET quantita = $quantita WHERE idProdotto = $idProdotto");      
   }
   else{  // Creo l'acquisto 
      mysql_query("INSERT INTO acquisto (idProdotto,idOrdine,quantita) VALUES ($idProdotto,$idOrdine,$quantitaEffettiva)");
   };

   $categoria=$_GET['categoria'];
   
   header("Location: ../carrello.php?categoria=$categoria&idOrdine=$idOrdine&data=$data&microsec=$microsec");
   mysql_close($db);   
   exit();
?>

...purtroppo continua a non funzionare............

risposto 6 anni fa
Schiappa
X 0 X

Hai provato a fare un debug del tuo script?

I file di log di mysql e del tuo server web li hai già visionati?

Fa un controllo sui dati che inserisci.

Aggiungi un controllo sulla corretta esecuzione della query, una cosa tipo questa:

$result = mysql_query($query);
if(!$result)
    echo mysql_error()

Così vedi se ci sono errori.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Salve mario.

Mi scuso in anticipo per non aver risposto prima.

Il problema (cavolata) stava nella path del file connessione.php (connessione al database) dell'include all'inizio del codice.

Grazie per l'assistenza!

risposto 6 anni fa
Schiappa
X 0 X

Bene così.

I log comunque dovrebbero segnalare questo malfunzionamento.

 :bye:

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda