-
Problema UPDATE query
Ciao ragazzi ho un problema con la funzione UPDATE della query.
Premetto che ho creato tutto io a mano, quindi se ho sbagliato qualcos'altro ditemelo.
Comunque, arriva fino alla fine, mi dice persino "Canzone aggiornata con successo", ma sul database nessun risultato!
Il codice è questo:
Codice PHP:
<!-- PARTE 3 -->
<?php
require_once("../connessione.php");
if(isset($_POST['Modifica'])){
$id = $_POST['id'];
$titolo = $_POST['titolo'];
$autore = $_POST['autore'];
$voti = $_POST['voti'];
$query = "UPDATE canzoni SET titolo = '$titolo', autore = '$autore' WHERE id = '$id'";
if(mysql_query($query)){
echo "Canzone aggiornata con successo";
}else{
echo "Errore sconosciuto durante la modifica della canzone";
}
}
?>
<!-- PARTE 2-->
<?php
if(isset($_POST['Submit'])){
?>
</p>
<form id="form1" name="form1" method="post" action="">
<table width="100%" border="0">
<tr>
<td>ID</td>
<td><input type="text" name="id" disabled="disabled" value="<?php echo $_GET['id']; ?>" />
(non modificabile) </td>
</tr>
<tr>
<td>Titolo</td>
<td><input type="text" name="titolo" value="<?php echo $_GET['titolo']; ?>" /></td>
</tr>
<tr>
<td>Artista</td>
<td><input type="text" name="autore" value="<?php echo $_GET['autore']; ?>" /></td>
</tr>
<tr>
<td>Voti</td>
<td><input type="text" name="voti" value="<?php echo $_GET['voti']; ?>" disabled="disabled" />
(non modificabile) </td>
</tr>
<tr>
<td> </td>
<td><input name="Modifica" type="submit" id="Modifica" value="Modifica" /></td>
</tr>
</table>
</form>
<?php
}
?>
<!--PARTE 1 -->
<?php
//includo il file di connessione
require_once("../connessione.php");
//faccio la query stringa, se vuoi es. fare la TOP 30 dopo data mettti LIMIT 30
//quindi ti si presentane le 30 canzoni più votate in orfine di voto e in caso di parità prima la più recente
$query_str="SELECT * FROM canzoni ORDER BY voti DESC";//e interrogo il db
$result=mysql_query($query_str);
//verifico che ci siano canzoni
$esistono=mysql_num_rows($result);
//e costruisco la tabella per presentare le canzoni
echo "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\">";
echo "<tr>";
if($esistono==0){//se 0 non ci sono titoli registrati
echo "<tr><td colspan=\"5\">Per ora non ci sono canzoni da votare.</td></tr>";
}else{//ci sono canzoni nel db
$item=1;//mi serve per numerare
//estraggo le canzoni eccc....
while($riga=mysql_fetch_array($result)){
$id=$riga['id'];
$titolo=stripslashes($riga['titolo']);//metto strip perche l'inserimento andrà con addslashes
$video=addslashes($riga['video']);
$autore=stripslashes($riga['autore']);
$voti=$riga['voti'];
//e li presento echo "<tr>";
echo "<td>$item</td>";
echo "<td>$titolo</td>";
echo "<td>$autore</td>";
echo "<td><form id=\"form1\" name=\"form1\" method=\"post\" action=\"modifica_canzoni.php?id=$id&titolo=$titolo&autore=$autore&voti=$voti\">
<input type=\"submit\" name=\"Submit\" value=\"MODIFICA\" />
</form></td>";
echo "<td>$voti voti</td>";
echo "</tr>";
$item++;//incremento il contatore
}//fine while
}//fine if-else
//fine pagina vota.php
?>
Il file di connessione è il più normale che possa esistere:
Codice PHP:
<?php
$host = 'localhost';
$username = 'radiodelmomento';
$password = '';
$db = 'my_radiodelmomento';
$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
$sel = @mysql_select_db($db) or die (mysql_error());
?>
Grazie mille.
-
Il disabled="disabled" nell'input/select rende null il valore se inviato il form.
Cambia con readonly e risolverai il problema.
:wink:
-
Grazie mille, problema risolto.
Quindi lui non trovava l'id e quindi non poteva aggiornare.
Grazie! :-)
-
Se non vuoi che un valore possa essere modificato, puoi utilizzare gli input type="hidden" o, in questo caso, utilizzare l'id passato tramite $_GET con tanto di type casting (te lo consiglio, perché il tuo codice può essere vittima di SQL Injection.
Cambialo così:
Codice PHP:
require_once('../connessione.php');
if (isset($_POST['Modifica']))
{
$id = (int) $_POST['id']; # (int) $_GET['id']
$titolo = mysql_real_escape_string(htmlspecialchars($_POST['titolo']));
$autore = mysql_real_escape_string(htmlspecialchars($_POST['autore']));
$voti = (int) $_POST['voti'];
$query = "UPDATE canzoni
SET
titolo = '{$titolo}',
autore = '{$autore}'
WHERE id = {$id}";
if (mysql_query($query))
{
echo 'Canzone aggiornata con successo';
}
else
{
echo 'Errore sconosciuto durante la modifica della canzone: ' . mysql_error();
}
}
:wink:
-
Grazie, ma non pensavo alla sicurezza, perché i dati li potrà modificare lo staff del quale mi fido ciecamente. Magari per errore lo modificavano, quindi l'ho reso più sicuro.
Comunque grazie per avermi scritto il codice... NON SI FINISCE MAI D'IMPARARE!!! Ad esempio non sapevo che si potesse utilizzare (int)!
Grazie mille per la tua disponibilità. :-D