Ragazzi sto lavorando ad un sito ed ho un problema stranissimo con lo script di modifica di un prodotto presente nel database!
In pratica lo script funziona benissimo se modifico anche solo uno dei campi del form, ad esempio cambio una vocale nel nome, insomma l'update avviene senza problemi, se invece non cambio nulla, nemmeno una virgola nei campi del form, allora l'UPDATE fallisce! La cosa strana e che se eseguo la stessa query sul database direttamente dal client "mysql" l'update sulla riga avviene senza errori anche se i valori sono esattamente gli stessi, insomma non c'è alcun errore SQL ma la funzione mysql_affected_rows() mi torna comunque 0 invece che 1.
Lo script è questo:
Codice PHP:
require('./database.inc.php');
/* Lettura parametri dal form */
$nome = $_POST['nomeProdotto'];
$desc = $_POST['descrProdotto'];
$ma = $_POST['macro_area'];
$modificato = false;
/* Memorizza informazioni sulla categoria */
if (isset($_POST['cbAddCat'])) {
$ncat = $_POST['nCategoria'];
$query = "SELECT id FROM categoria WHERE descr = '$ncat'";
$result = mysql_query($query, $conn);
if (mysql_num_rows($result) == 1) {
$row = mysql_fetch_array($result);
$cat = $row['id'];
} else {
$cat = -1;
}
mysql_free_result($result);
} else {
$cat = intval($_POST['categoria']);
$ncat = "";
}
/* Memorizza informazioni sulla sub-categoria */
if (isset($_POST['cbAddSubCat'])) {
$nsub = $_POST['nSubCategoria'];
$query = "SELECT id FROM sub_categoria WHERE descr = '$nsub'";
$result = mysql_query($query, $conn);
if (mysql_num_rows($result) == 1) {
$row = mysql_fetch_array($result);
$sub = $row['id'];
} else {
$sub = -1;
}
mysql_free_result($result);
} else {
$sub = (isset($_POST['sub_categoria'])) ? intval($_POST['sub_categoria']) : 0;
$nsub = "";
}
/* Memorizza le informazioni relative al prezzo del prodotto! */
$przz = (isset($_POST['cbAddPrezzo']) || isset($_POST['prezzoProdotto'])) ? doubleval($_POST['prezzoProdotto']) : 0;
/* Escuzione della query di modifica di un prodotto nella base di dati! */
if (isset($_POST['modProdotto'])) {
$idProdotto = $_POST['idProdotto'];
if ($cat == -1) {
$query = "INSERT INTO categoria (descr, idma) VALUES ('$ncat',$ma)";
mysql_query($query, $conn);
$query = "SELECT LAST_INSERT_ID()";
$result = mysql_query($query,$conn);
if (mysql_num_rows($result) == 1) {
$row = mysql_fetch_row($result);
$cat = $row[0];
}
mysql_free_result($result);
}
if ($sub == -1) {
$query = "INSERT INTO sub_categoria (descr, idma, idcat) VALUES ('$nsub',$ma, $cat)";
mysql_query($query, $conn);
$query = "SELECT LAST_INSERT_ID()";
$result = mysql_query($query,$conn);
if (mysql_num_rows($result) == 1) {
$row = mysql_fetch_row($result);
$sub = $row[0];
}
mysql_free_result($result);
}
if ($sub == 0) {
$sub = "null";
}
$query = "UPDATE prodotto SET nome = '$nome', descr = '$desc', price = $przz,
idma = $ma, idcat = $cat, idsubcat = $sub WHERE id = $idProdotto";
mysql_query($query,$conn);
if (mysql_affected_rows() == 1) {
$url = "Location: ./insert.php?modificato=true";
$modificato = true;
} else {
$url = "Location: ./insert.php?modificato=false";
}
}
Non so se lo script è abbastanza chiaro.. ma comunque la modifica alla flag "$modificato" avviene nell'ultimo if, i controlli sopra sono necessari per la corretta impostazione delle variabili e stampando la query i valori sono corretti.
Non riesco proprio a capire il perché l'UPDATE non va a buon fine se non modifico alcun parametro del form....
Qualcuno mi sa dare qualche consiglio? Ci sbatto la testa da ore ma niente da fare non riesco a capire cosa possa essere...
Saluti, Carlo.