Problema Insert...

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
è da tempo che uso php e mysql, ma è da altrettanto tempo che non metto mano a questo script... Probabilmente sarà un cavolata, ma giuro che non riesco a trovare l'errore...

La tabella di mysql è questa :

PHP:
CREATE TABLE `articoli` (
  `Codice Articolo` varchar(100) default NULL,
  `CodiceInterno` int(11) NOT NULL default '0',
  `Fornitore` varchar(50) default NULL,
  `Codice` varchar(30) default NULL,
  `Descrizione` varchar(200) default NULL,
  `Reparto` varchar(4) default NULL,
  `Sotto_Reparto` varchar(4) default NULL,
  `Barcode` varchar(50) default NULL,
  `UM` varchar(2) default NULL,
  `Listino_Fornitore` double default '0',
  `IVA` tinyint(4) default '0',
  `Acquisto` double default '0',
  `Acquistonoiva` double default '0',
  `Vendita` double default '0',
  `Venditanoiva` double default '0',
  `Quantita` double NOT NULL default '0',
  PRIMARY KEY  (`CodiceInterno`),
  UNIQUE KEY `CodiceInterno` (`CodiceInterno`),
  KEY `Codice` (`Codice`),
  KEY `Codice Articolo` (`Codice Articolo`),
  KEY `Descrizione` (`Descrizione`),
  KEY `Reparto` (`Reparto`),
  KEY `Codice a Barre` USING BTREE (`Barcode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Il codice della pagina è questo :

PHP:
<html>
<head> <title>Inserimento Articolo</title>
<style type="text/css">
body {
font: Eras Medium ITC;
color:#FFF ;
}
</style>
</head>

<body bgcolor="#000000">

<?php
//CONNESSIONE AL DATABASE
include('connect.php');
//RECUPERA DATI DAL FORM
$Codice = $_POST['Codice'];
$Codice = addslashes(htmlspecialchars(($_POST['Codice'])));
if($Codice==""){
echo "<p>Il campo Codice non puo essere vuoto</p>";
$a=1;
//ritorno al form
}else{
  $a=2;
  }
$Barcode = $_POST['Barcode'];
$Barcode = addslashes(htmlspecialchars(($_POST['Barcode'])));
$Reparto = $_POST['Reparto'];
$Reparto = addslashes(htmlspecialchars(($_POST['Reparto'])));
if($Reparto ==""){
echo "<p>Il campo Reparto non puo essere vuoto</p>";
$b=1;
//ritorno al form
}else{
  $b=2;
  }
$UM = $_POST['UM'];
$UM = addslashes(htmlspecialchars(($_POST['UM'])));
if($UM ==""){
echo "<p>Il campo UM non puo essere vuoto</p>";
$c=1;
//ritorno al form
}else{
  $c=2;
  }
$Descrizione = $_POST['Descrizione'];
$Descrizione = addslashes(htmlspecialchars(($_POST['Descrizione'])));
if($Descrizione ==""){
echo "<p>Il campo Descrizione  non puo essere vuoto</p>";
$j=1;
//ritorno al form
}else{
  $j=2;
  }
$Quantita = $_POST['Quantita'];
$Quantita = addslashes(htmlspecialchars(($_POST['Quantita'])));
if($Quantita ==""){
echo "<p>Il campo quantita non puo essere vuoto</p>";
$d=1;
//ritorno al form
}else{
  $d=2;
  }
$Fornitore = $_POST['Fornitore'];
$Fornitore = addslashes(htmlspecialchars(($_POST['Fornitore'])));
$Acquisto = $_POST['Acquisto'];
$Acquisto = addslashes(htmlspecialchars(($_POST['Acquisto'])));
if($Acquisto ==""){
echo "<p>Il campo Acquisto non puo essere vuoto</p>";
$e=1;
//ritorno al form
}else{
  $e=2;
  }
$Ricarico = $_POST['Ricarico'];
$Ricarico = addslashes(htmlspecialchars(($_POST['Ricarico'])));
$Vendita = $_POST['Vendita'];
$Vendita = addslashes(htmlspecialchars(($_POST['Vendita'])));
$IVA = $_POST['IVA'];
$IVA = addslashes(htmlspecialchars(($_POST['IVA'])));
$ctrl_cod = @mysql_query("SELECT * FROM articoli WHERE Codice='$Codice'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_cod)>0)
    {
      echo "Il Codice inserito risulta gia' usato.";
      $f=1;
//ritorno al form
      }else{
       $f=2;
      }
//ritorno al form
$ctrl_Barcode = @mysql_query("SELECT * FROM articoli WHERE Barcode='$Barcode'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_Barcode)>0)
    {
      echo "Il Codice barcode inserito risulta gia usato.";
      $g=1;
//ritorno al form
      }else{
       $g=2;
      }
//ritorno al form
  if($a == 2 && $b == 2 && $c == 2 && $d == 2 && $e == 2 && $f == 2 && $g == 2 && j==2){
//INSERISCI NUOVO ARTICOLO NEL DATABASE
$query = "INSERT INTO `articoli` (Codice Articolo,CodiceInterno,Fornitore,Codice,Descrizione,Reparto,Sotto_Reparto,Barcode,UM,Listino_Fornitore,IVA,Acquisto,Acquistonoiva,Vendita,Venditanoiva,Quantita)
VALUES (NULL,NULL,'$Fornitore','$Codice','$Descrizione', '$Reparto',NULL, '$Barcode','$UM',NULL,'$IVA','$Acquisto',NULL,'$Vendita',NULL,'$Quantita' )" or die (mysql_error());

if (@mysql_query($query)) {
	echo ("<div align=center class=testo> <b> Articolo inserito con successo.</b></div>");
	} else {
		echo ("<div align=center class=testo> <b>Errore di inserimento articolo: ". mysql_error()
		."</b></div>");
		}
		}
		else {
			echo $query;
		  echo ("<p>Articolo non Inserito</p>".mysql_error());
		  }

?>
</body>
</html>

mentre il codice di entrata HTM è questo :


HTML:
<html>
<head><title>Inserimento Nuovo Articolo</title>
<style type="text/css">
body {
font: Eras Medium ITC;
color:#FFF
}
</style>

<style type="text/css">
#main {
	width:672px;
	height:300px;
	position:absolute;
	top:30%;
	left:50%;
	margin:-150px 0 0 -336px;
}
</style>
</head>
<body bgcolor="#000000">
<FORM METHOD ="post" action="insert_art.php">
<div id="main">
<p><br><img src="images/inserimentoart.png"></p></br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/logo.png" align="middle" >
<table width="480" height="382" border=0 align="center" cellpadding=5 cellspacing=5>
  <tr>
<td><font face="Eras Medium ITC">Codice:</font></td><td width="234">
<input type=text name="Codice" size=35 maxlength=40 value=""></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Barcode:</font></td><td>
<input type=text name="Barcode" onKeyUp="vendita()" value="" size=35 maxlength=40 ></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Descrizione:</font></td><td>
<input type=text name="Descrizione" size=35 maxlength=40 value=""></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">IVA:</font></td><td>
<input type="text" name="IVA" readonly value="21"><br></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Reparto:</font></td><td>
<input type=text name="Reparto" size=35 maxlength=40 value=""></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Unità di misura:</font></td><td>
<input type=text name="UM" size=35 maxlength=40 value=""></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Fornitore:</font></td>
<td>
<p>Scegli il Fornitore<br>
<select name="Fornitore">
<option value="Option 1" selected></option>
<option value="Option 2">Della Rovere</option>
<option value="Option 3">P&G Line</option>
<option value="Option 4">Passigatti</option>
<option value="Option 5">Niko</option>
<option value="Option 6">Gate 31</option>
<option value="Option 7">Fantasy Coral</option>
</select>
</p>
</td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Quantità:</font></td><td>
<input type=text name="Quantita" size=35 maxlength=40 value=""></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Acquisto:</font></td><td>
<input type="text"  name="Acquisto" onKeyUp="vendita()" value="1" id="Acquisto"/></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">% Ricarico:</font></td><td>
<input type="text"  name="Ricarico" onKeyUp="vendita()" value="1" id="Ricarico"/></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr>
<td><font face="Eras Medium ITC">Prezzo vendita:</font></td><td>
<input type="text" readonly value="0" name="Vendita" id="Vendita"/></td>
<td>
  <img src="images/campoobbligatorio.png"></td>
</tr>
<tr><td></td><td>
	<p align="center">
	<input type=submit value="Inserisci" name="B1" style="font-weight: 700"></td></tr>
<tr width="480">
<td colspan="2">
<font face="Eras Medium ITC" size="-3">I campi contrassegnati da <img src="images/campoobbligatorio.png"> sono obbligatori.</font></td>
</tr>
</table>
</div>
</form> 
<script type="text/javascript">
function vendita() {
    var Acquisto = 0.0+document.getElementById('Acquisto').value;
    var Ricarico = 0.0+document.getElementById('Ricarico').value;
    if (Acquisto <= 0 || Ricarico <= 0){
        document.getElementById('Vendita').value = "--";
    }else{
        //var ven = parseInt((acq * 100) / ric);
        //var numero = (acq * ric) / 100;
        var numeroivato = Acquisto*(1+Ricarico/100);
        var Vendita = numeroivato.toFixed(2);
        document.getElementById('Vendita').value = Vendita;
    }
}
</script>
</body>
</HTML>

Mi dice sempre articolo non inserito...
 
manca la "Venditanoiva" nei VALUES di conseguenza la query va in errore
ma non ti stampa il mysql_error() ?
 
Direi innanzitutto di fare un po di ordine per quanto sia possibile
PHP:
<?php 
//CONNESSIONE AL DATABASE 
include('connect.php');
$e = false;
foreach($_POST as $name=>$value){
    $_POST[$name]= mysql_real_escape_string(htmlspecialchars($value));
    if(empty($value)){
        echo "Il campo ".$name." deve essere compilato!<br>";
        $e = true;
    }
}

extract($_POST);

$ctrl_cod = mysql_query("SELECT * FROM articoli WHERE Codice='$Codice'") or die (mysql_error()); 
    if(mysql_num_rows($ctrl_cod)>0) 
    { 
      echo "Il Codice inserito risulta gia' usato.<br>"; 
      $e = true;
      } 
        //Questi 2 select sono riassumibili in 1 con un OR ma non si avrebbe l'errore per ogni campo quindi a te la scelta
$ctrl_Barcode = mysql_query("SELECT * FROM articoli WHERE Barcode='$Barcode'") or die (mysql_error()); 
    if(mysql_num_rows($ctrl_Barcode)>0) 
    { 
      echo "Il Codice barcode inserito risulta gia usato.<br>"; 
      $e = true;
      } 

  if($e==false){ 
$query = mysql_query("INSERT INTO `articoli` (Codice Articolo,CodiceInterno,Fornitore,Codice,Descrizione,Reparto,Sotto_Reparto,Barcode,UM,Listino_Fornitore,IVA,Acquisto,Acquistonoiva,Vendita,Venditanoiva,Quantita) 
VALUES (NULL,NULL,'$Fornitore','$Codice','$Descrizione', '$Reparto',NULL, '$Barcode','$UM',NULL,'$IVA','$Acquisto',NULL,'$Vendita',NULL,'$Quantita' )") or die ("$query<br><p>Articolo non Inserito</p>".mysql_error());  
echo "<div align=center class=testo> <b> Articolo inserito con successo.</b></div>"; 
         
   } 

?>
Poi controlla che la query sia giusta e se ti segnala eventuali errori postali
 
guardando meglio nei VALUES c'è ne è uno in piu
Codice:
Codice Articolo,     NULL,
CodiceInterno,	     NULL,
Fornitore,Codice,   '$Fornitore',
Descrizione,	    '$Codice',
Reparto,	    '$Descrizione',
Sotto_Reparto,	    '$Reparto',
Barcode,	     NULL, 
UM,		    '$Barcode',
Listino_Fornitore,  '$UM',
IVA,		     NULL,
Acquisto,	    '$IVA',
Acquistonoiva,	    '$Acquisto',
Vendita,             NULL,
Venditanoiva,	    '$Vendita',
Quantita	     NULL,
                    '$Quantita'
io preferisco questa sintassi
Codice:
INSERT INTO tabella
       SET campo1 = varialbile1,
           campo2 = varialbile2,
           campo3 = varialbile3,
           campo4 = varialbile4
è più ordinata.
Mi associo a Nefyt : fai un po di ordine
 
guardando meglio nei VALUES c'è ne è uno in piu
Codice:
Codice Articolo,     NULL,
CodiceInterno,	     NULL,
Fornitore,Codice,   '$Fornitore',
Descrizione,	    '$Codice',
Reparto,	    '$Descrizione',
Sotto_Reparto,	    '$Reparto',
Barcode,	     NULL, 
UM,		    '$Barcode',
Listino_Fornitore,  '$UM',
IVA,		     NULL,
Acquisto,	    '$IVA',
Acquistonoiva,	    '$Acquisto',
Vendita,             NULL,
Venditanoiva,	    '$Vendita',
Quantita	     NULL,
                    '$Quantita'
io preferisco questa sintassi
Codice:
INSERT INTO tabella
       SET campo1 = varialbile1,
           campo2 = varialbile2,
           campo3 = varialbile3,
           campo4 = varialbile4
è più ordinata.
Mi associo a Nefyt : fai un po di ordine
I values sono tutti mi pare, infatti hai messo per sbaglio
Codice:
Fornitore,Codice,
insieme

Mi sa che probabilmente l'errore dipende da qualcosa prima, dovrebbe eseguire più controlli sulle variabili
 
Il punto è proprio questo.. l'errore non me lo stampa... mi dice solamente articolo non inserito...

Questo spezzone di codice l'ho gia usato precedentemente per inserire l'utente, cambiando le variabili.. Fa i dovuti controlli e funziona perfettamente... Qui ho solamente cambiato user mettendo barcode e cambiando le variabili nella query... Un altra domanda... Ma se io ho una tabella mysql con 10 colonne, posso fare un query di inserimento con 8? non mi sembra vero? anche se NULL ma vanno inseriti o ricordo male?
 
credo che la INSERT venga saltata,per questo non ti da errore, probabilmente perche questa condizione
PHP:
if ($a == 2 && $b == 2 && $c == 2 && $d == 2 && $e == 2 && $f == 2 && $g == 2 && j == 2) {
non è mai vera
Un altra domanda
non dovrebbe creare problemi sempre che i campi nono siano dichiarati NOT NULL
 
ciao
io farei enche una modifica alla tabella
CodiceInterno è primarykey quindi lo metterei autoincrement, se di default è 0 e non lo midifichi con l'insert non può rimettere zero le primarykey devono essere uniche
 
Buonasera a tutti...
Ho modificato tutta la struttura e rifatto da capo i controlli... Effettivamente c'era un errore... Ora infatti mi dice che errore è...

Il codice è questo :

PHP:
<html>
<head> <title>Inserimento Articolo</title>
<style type="text/css">
body {
font: Eras Medium ITC;
color:#FFF ;
}
</style>
</head>

<body bgcolor="#000000">

<?php
//CONNESSIONE AL DATABASE
include('connect.php');
//RECUPERA DATI DAL FORM
$Codice = $_POST['Codice'];
$Codice = addslashes(htmlspecialchars(($_POST['Codice'])));
if($Codice==""){
echo "<p>Il campo Codice non puo essere vuoto</p>";
$a=1;
//ritorno al form
}else{
  $a=2;
  }
$Barcode = $_POST['Barcode'];
$Barcode = addslashes(htmlspecialchars(($_POST['Barcode'])));
if($Barcode==""){
echo "<p>Il campo Barcode non puo essere vuoto</p>";
$b=1;
//ritorno al form
}else{
  $b=2;
  }
$Descrizione = $_POST['Descrizione'];
$Descrizione = addslashes(htmlspecialchars(($_POST['Descrizione'])));
if($Descrizione ==""){
echo "<p>Il campo Descrizione  non puo essere vuoto</p>";
$c=1;
//ritorno al form
}else{
  $c=2;
  }
$Fornitore = $_POST['Fornitore'];
$Fornitore = addslashes(htmlspecialchars(($_POST['Fornitore'])));
if($Fornitore ==""){
echo "<p>Il campo Fornitore  non puo essere vuoto</p>";
$d=1;
//ritorno al form
}else{
  $d=2;
  }
$Reparto = $_POST['Reparto'];
$Reparto = addslashes(htmlspecialchars(($_POST['Reparto'])));
if($Reparto ==""){
echo "<p>Il campo Reparto non puo essere vuoto</p>";
$e=1;
//ritorno al form
}else{
  $e=2;
  }
$UM = $_POST['UM'];
$UM = addslashes(htmlspecialchars(($_POST['UM'])));
$IVA = $_POST['IVA'];
$IVA = addslashes(htmlspecialchars(($_POST['IVA'])));

$Listino_Fornitore = $_POST['Listino_Fornitore'];
$Listino_Fornitore = addslashes(htmlspecialchars(($_POST['Listino_Fornitore'])));
if($Listino_Fornitore ==""){
echo "<p>Il campo Listino Fornitore non puo essere vuoto</p>";
$f=1;
//ritorno al form
}else{
  $f=2;
  }
$Acquisto = $_POST['Acquisto'];
$Acquisto = addslashes(htmlspecialchars(($_POST['Acquisto'])));
if($Acquisto ==""){
echo "<p>Il campo Acquisto non puo essere vuoto</p>";
$g=1;
//ritorno al form
}else{
  $g=2;
  }
$Ricarico = $_POST['Ricarico'];
$Ricarico = addslashes(htmlspecialchars(($_POST['Ricarico'])));
if($Ricarico ==""){
echo "<p>Il campo Ricarico non puo essere vuoto</p>";
$h=1;
//ritorno al form
}else{
  $h=2;
  }
$Vendita = $_POST['Vendita'];
$Vendita = addslashes(htmlspecialchars(($_POST['Vendita'])));
if($Vendita ==""){
echo "<p>Il campo Vendita non puo essere vuoto</p>";
$i=1;
//ritorno al form
}else{
  $i=2;
  }
$qnt_lucio = $_POST['qnt_lucio'];
$qnt_lucio = addslashes(htmlspecialchars(($_POST['qnt_lucio'])));
if($qnt_lucio ==""){
echo "<p>Il campo Quantità Lucio Papirio non puo essere vuoto</p>";
$l=1;
//ritorno al form
}else{
  $l=2;
  } 
$qnt_tivoli = $_POST['qnt_tivoli'];
$qnt_tivoli = addslashes(htmlspecialchars(($_POST['qnt_tivoli'])));
if($qnt_tivoli ==""){
echo "<p>Il campo Quantità Tivoli non puo essere vuoto</p>";
$m=1;
//ritorno al form
}else{
  $m=2;
  }
$ctrl_cod = @mysql_query("SELECT * FROM articoli WHERE Codice='$Codice'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_cod)>0)
    {
      echo "Il Codice inserito risulta gia' usato.";
      $n=1;
//ritorno al form
      }else{
       $n=2;
      }
//ritorno al form
$ctrl_Barcode = @mysql_query("SELECT * FROM articoli WHERE Barcode='$Barcode'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_Barcode)>0)
    {
      echo "Il Codice barcode inserito risulta gia usato.";
      $o=1;
//ritorno al form
      }else{
       $o=2;
      }
//ritorno al form
  if($a == 2 && $b == 2 && $c == 2 && $d == 2 && $e == 2 && $f == 2 && $g == 2 && $h==2 && $i==2 && $l==2 && $m==2 && $n==2 && $o==2){
//INSERISCI NUOVO ARTICOLO NEL DATABASE
$query = "(INSERT INTO `articoli` 
SET id = NULL,
    Fornitore = '$Fornitore',
	Codice = '$Codice',
	Descrizione = '$Descrizione',
	Reparto =  '$Reparto',
	Barcode =  '$Barcode',
	UM = '$UM',
	Listino_Fornitore = '$Listino_Fornitore',
	IVA = '$IVA',
	Acquisto = '$Acquisto',
	Vendita = '$Vendita',
	qnt_lucio = '$qnt_lucio',
	qnt_tivoli =  '$qnt_tivoli'
 )" or die (mysql_error());

if (@mysql_query($query)) {
	echo ("<div align=center class=testo> <b> Articolo inserito con successo.</b></div>");
	} else {
		echo ("<div align=center class=testo> <b>Errore di inserimento articolo: ". mysql_error()
		."</b></div>");
		}
		}
		else {
			echo $query;
		  echo ("<p>Articolo non Inserito</p>".mysql_error());
		  }

?>
</body>
</html>

Mentre l'errore che mi genera è questo :

HTML:
Errore di inserimento articolo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `articoli` SET id = NULL, Fornitore = 'Della Rovere', Codice =' at line 1
 
sono riuscito a risolvere tutto e ora funzionaaaaaaaaaaaaaaaaa.
Avevo omesso dei controlli prima e ora nell'ultimo post ho messo una ( di troppo :D
 
Ora ho un problema con la modifica, ma faccio un altro post ^^
 

Discussioni simili