Mancato inserimento

Ciao a tutti.

Ho questo script:

<?php

/* Mi connetto al Database Intranet per poi inserire i dati */

$host = 'localhost';
$user = 'root';
$password = 'ciao';
$database = 'intranet';
$link=mysql_connect("$host","$user","$password")
or die ("Non riesco a connettermi a <b>$host");
mysql_select_db ($database, $link)
or die ("Non riesco a selezionare il db $database<br>");


/* Prendo la data e l'ora di sistema parcheggiandole in due variabili separate */

$data = date ("Y/m/d");
$ora = date ("H:i:s");
  
  
$inviati = 'no';
  
  
if (isset($prenotazione)){
    if ($email != '') {
   if ((ereg ("^([a-z0-9\._-]+)(@[a-z0-9\.-_]+)(\.{1}[a-z]{2,6})$", $email)) And ($nome != '') And ($cognome != '') And ($prenotazione != '')) { 
   $inserimento = "INSERT INTO contabilita_telebanca VALUES ('',
   '$nome',
   '$cognome',
   '$matricola',
   '$data',
   '$ora',
   '$prenotazione',
   '$email',
   '$cellulare',
   '$inviati')";
   mysql_query ($inserimento, $link)
   or die ("Non riesco ad eseguire la query $inserimento");
   mysql_close ($link);
   /* echo "<meta http-equiv=refresh content=3;url=$PATH_INFO>"; */
   }
   else
   {
        echo "<p align=center><font face=verdana color=red size=4>Attenzione: ricontrolla i campi, probabilmente la e-mail è sbagliata.</font><br>
        <font face=Verdana><a href=javascript:history.back() style=\"text-decoration: none\"><font color=#0909FF size=6>Clicca qui per tornare indietro</a></font>";
   }
   }
   else
   if (($email == '') And ($cellulare != '')) {
   if (($nome != '') And ($cognome != '') And ($prenotazione != '')) {
   $inserimento = "INSERT INTO contabilita_telebanca VALUES ('',
   '$nome',
   '$cognome',
   '$matricola',
   '$data',
   '$ora',
   '$prenotazione',
   '$email',
   '$cellulare',
   '$inviati')";
   mysql_query ($inserimento, $link)
   or die ("Non riesco ad eseguire la query $inserimento");
   mysql_close ($link);
   /* echo "<meta http-equiv=refresh content=3;url=$PATH_INFO>"; */
    } 
    }
   else
   {
        echo "<p align=center><font face=verdana color=red size=4>Attenzione: ricontrolla i campi, probabilmente manca il n° di cellulare</font><br>
        <font face=Verdana><a href=javascript:history.back() style=\"text-decoration: none\"><font color=#0909FF size=6>Clicca qui per tornare indietro</a></font>";
   }
   }
?>
<html>
<head>

</head>

<body>
<form method=POST onSubmit="return verifica(this);" action=<?php $PATH_INFO ?>>
<p align=center><font face=Verdana size=5 color=#0909FF>Operazioni in
prenotazione </font></p>
<table border=0 width=100% id=table2>
   <tr>
      <td bgcolor=#99CCFF>
      <p align=center><font face=Verdana color=#0909FF>Nome</font></td>
      <td bgcolor=#99CCFF>
      <p align=center><font face=Verdana color=#0909FF>Cognome</font></td>
   </tr>
   <tr>
      <td bgcolor=#FFFFCC>
      <p align=center>
      <input type=text name=nome size=20></td>
      <td bgcolor=#FFFFCC>
      <p align=center>
      <input type=text name=cognome size=20></td>
      </tr>
</table>
<table border=0 width=100% id=table1>
   <tr>
      <td bgcolor=#99CCFF>
      <p align=center><font face=Verdana color=#0909FF>N. Operazione</font></td>
      <td bgcolor=#99CCFF>
      <font face=Verdana color=#0909FF>e-mail</font></td>
      <td bgcolor=#99CCFF>
      <font face=Verdana color=#0909FF>cellulare</font></td>
      <td bgcolor=#99CCFF>
      <p align=center>&nbsp;</td>
   </tr>
   <tr>
      <td bgcolor=#FFFFCC>
      <p align=center>
      <input type=text name=prenotazione size=20></td>
      <td bgcolor=#FFFFCC>
      <input type=text name=email size=20></td>
      <td bgcolor=#FFFFCC>
      <input type=text name=cellulare size=20></td>
      <td bgcolor=#FFFFCC>
      <p align=center><input type=submit value=Invia name=B1></td>
   </form></tr>
</table><br>
</body>
</html>

sul mio pc ho installait Apache2, PHP 5 e MySQ 5. Quando inserisco i dati in tabella mi viene visualizzato il messaggio "Non riesco ad eseguire la richiesta "INSERT INTO contabilita_telebanca VALUES ecc ecc".

Premetto che la connessione al db avviene perfettamente, infatti riesco ad eseguire query di selezione e a visualizzarne il contenuto su pagine web. Ho anche settato in php.ini register_global su ON. Inoltre lo stesso script funziona perfettamente su un pc dove è installato sempre Apache2, PHP 5 ma MySQL 4.1 e non 5.0. Può dipendere da questo? MySQL 5.0 ha dei settaggi di default diversi da MySQL 4.1, settaggi che impediscono di inserire dati da form web?

Grazie a tutti

Ciao

Stone  :bye:

inviato 10 anni fa
stone
X 0 X

MySQL 5 è più severo dei predecessori circa l'inserimento dei dati. Comunque per individuare il problema devi richiedere spiegazioni direttamente a MySQL con l'istruzione mysql_error().

In pratica devi eseguire le query così:

mysql_query ($inserimento, $link)

   or die ("Non riesco ad eseguire la query $inserimento: " . mysql_error());

riporta quindi l'errore che ricevi.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni.

Ti ringrazio.

Questo è l'errore riportato

Out of range value adjusted for column 'id' at row 1

Ho provato anche a cancellare e rimettere il campo id settato come chiave primaria , autoincrement e int(255), riavviato il server MySQL ma purtroppo nulla.

Allora ho cercato un po' su internet e ho trovato questo

http://forums.belution.com/en/sql/000/095/94.shtml

ho commentato la seguente riga in my.ini

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

e ora funziona perfettamente.

Ma ti chiedo: cosa significa quella riga? Voglio dire, commentandola, quali funzionalità vado a togliere rispetto a MySQL 4.1?

Stone  :bye:

risposto 10 anni fa
stone
X 0 X

MySQL 5, come ti ho detto prima, è più severo e non tollera (a meno che non gli venga tetto il contrario agendo sul my.ini ...) neanche il minimo errore in una query.

Nel tuo caso l'errore sta nel passare una stringa vuota '' come valore di un campo intero auto_increment. Se il campo è un intero allora una stringa, seppur vuota, è un valore diverso (Out of range) rispetto a quelli attesi.

Inoltre per utilizzare correttamente un campo auto_increment bisogna non inserirlo nella query oppure passare un NULL. MySQL 4.x e precedenti chiudevano un occhio e consideravano la stringa vuota come NULL e quindi accettavano di eseguire la query.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quindi con questo script o commento quella riga o non posso ottenere un incremento dell'id per ogni record inserito.

Ti ringrazo, ora mi è chiaroi

Ciao

Stone  :bye:

risposto 10 anni fa
stone
X 0 X

...oppure cambi le query così:

INSERT INTO contabilita_telebanca VALUES (NULL,         <-- ho tolto '' e ho messo NULL

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ok, avevo provato anche io ma scioccamente mettevo il valore NULL tra gli apici ( :-[) e giustamente non mi faceva andare avanti visto che il campo id voleva un INT...

Grazie ancora

Stone  :bye:

risposto 10 anni fa
stone
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili