domanda facile: errore su mysql_fetch_array

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
ciao a tutti!!! ho questo script

PHP:
<?
	$voto=$_GET['v'];
	$id=$_GET['id'];

	$host = 'localhost';
	$username = 'root';
	$db = 'login';
	$password = '';

	$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
	$sel = @mysql_select_db($db, $conn) or die (mysql_error());

	$controllo_db = mysql_query ("SELECT *
	FROM `mp3` 
	WHERE `id` = $id ");

	$query=mysql_query($controllo_db, $conn);
	$row = mysql_fetch_array($query);
	
	$voto=$voto+$row['voto'];
	
	$inserisco_dati_di_registrazione = mysql_query("
    INSERT INTO `utenti` ( `id` , `iduser` , `file` , `voto`)
	VALUES (NULL , NULL, NULL, '$voto')");
?>
e mi dice:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\programmi\easyphp1-8\www\classifica\v… on line 18

ovvero su questa riga

$row = mysql_fetch_array($query);

chi sa il perchè??
grazie
 

datipal

Nuovo Utente
6 Apr 2009
2
0
0
Ciao
La variabile $controllo_db deve essere = alla sola query.

Quindi $controllo_ db = "SELECT * FROM `mp3` WHERE `id` = $id";

:fonzie:
 

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
io ho sostituito la riga, ho scritto:
PHP:
<?
	$voto=$_GET['v'];
	$id=$_GET['id'];

	$host = 'localhost';
	$username = 'root';
	$db = 'login';
	$password = '';

	$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
	$sel = @mysql_select_db($db, $conn) or die (mysql_error());

	$controllo_ db = "SELECT * FROM `mp3` WHERE `id` = $id";

	$query=mysql_query($controllo_db, $conn);
	$row = mysql_fetch_array($query);
	
	$voto=$voto+$row['voto'];
	
	$inserisco_dati_di_registrazione = mysql_query("
    INSERT INTO `utenti` ( `id` , `iduser` , `file` , `voto`)
	VALUES (NULL , NULL, NULL, '$voto')");
	
	echo "fatto";
?>
ma su quella linea mi dice:

Parse error: parse error in c:\programmi\easyphp1-8\www\classifica\votor.php on line 13
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
probabilmente l'errore deriva da riga 13
$controllo_ db = "SELECT * FROM `mp3` WHERE `id` = $id";

PHP:
$controllo_ db = "SELECT * FROM mp3 WHERE id = '$id'";
 

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
mi dice ancora: Parse error: parse error in c:\programmi\easyphp1-8\www\classifica\votor.php on line 13
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
40
Sanremo
Veramente sono ormai 20 anni che porto gli occhiali... Si vede che però i miei funzionano bene!! :D
 

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
si, anche io mi affido troppo a voi e non butto un occhio, potevo accorgermene, però non è ancora perfetto!!!
questo script praticamente viene aperto da una classifica, questa classifica a lato a 5 link che van da 1 a 5, e servono per votare un file, quindi io prendo i parametri passati dal link (id per identificare la riga e voto da 1 a 5) poi mi connetto al database, mi posiziono sulla riga dove id=id poi prendo il voto del db e gli sommo il voto passato, poi lo reinserisco nel db, però qualcosa non va!!!
come mai???
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
40
Sanremo
Ho aggiunto i commenti al codice

PHP:
<?
    // Qui viene preso il voto da 1 a 5 
    $voto=$_GET['v'];
    // Qui viene preso l'id del file votato
    $id=$_GET['id'];
    // Dati di connessione al DB
    $host = 'localhost';
    $username = 'root';
    $db = 'login';
    $password = '';
    // Effettua la connessione
    $conn = @mysql_connect($host,$username,$password) or die (mysql_error());
    // Seleziona il DB su cui operare
    $sel = @mysql_select_db($db, $conn) or die (mysql_error());
    // Query per prendere il voto attuale associato all'ID del file
    // appena votato
    $controllo_db = "SELECT * FROM `mp3` WHERE `id` = $id";

    $query=mysql_query($controllo_db, $conn);
    $row = mysql_fetch_array($query);
    // Al voto salvato viene aggiunto il voto appena dato
    $voto=$voto+$row['voto'];
    
    // Questa query non è per niente chiara. Viene aggiunta
    // una riga in una tabella utenti completamente vuota tranne
    // la somma dei voti appena calcolata. Ma così non ha alcuna
    // associazione nè con un file nè con un utente
    $inserisco_dati_di_registrazione = mysql_query("
    INSERT INTO `utenti` ( `id` , `iduser` , `file` , `voto`)
    VALUES (NULL , NULL, NULL, '$voto')");
    // Non viene aggiornato il record relativo al file appena votato.
    // Il voto per quel file non cambia
    echo "fatto";
?>
 

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
hai ragione!!!! la tabella!!!
quindi viene così!!!
PHP:
$inserisco_dati_di_registrazione = mysql_query("
    INSERT INTO `mp3` ( `id` , `iduser` , `file` , `voto`)
	VALUES (NULL , NULL, NULL, '$voto')");
ma posso scriverlo così??
PHP:
$inserisco_dati_di_registrazione = mysql_query("
    INSERT INTO `mp3` ( `voto`)
	VALUES ('$voto')");
però ancora non va :(
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
40
Sanremo
Il fatto è che per aggiornare il voto dovresti fare un UPDATE invece dell'INSERT.

$query = "UPDATE mp3 SET voto = '$voto' WHERE id = $id";

Gli apici intorno a $voto ci vanno solo se il campo nel DB non è numerico
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa devi inserire o aggiornare il voto?
con quello che hai fatto inserisci nella tabella mp3 un record con un voto legato a chi?
poi secondo un manuale che ho io gli apici vanno solo sui valori, non sui nomi
...INTO mp3 (voto) VALUES ('$voto')");
se il file che deve essere votato (e aggiornato il voto) secondo me dovresti fare

//.......................
$voto=$voto+$row['voto'];
//.........................
mysql_query("UPDATE mp3 SET voto='$voto'WHERE id_file='$id'");

p.s. per trogo
solo un paio?:D o più come me?
 
Ultima modifica:

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
io ho scritto:
PHP:
<?
	$voto=$_GET['v'];
	$id=$_GET['id'];
	
	$host = 'localhost';
	$username = 'root';
	$db = 'login';
	$password = '';

	$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
	$sel = @mysql_select_db($db, $conn) or die (mysql_error());

	$controllo_db = "SELECT * FROM mp3 WHERE id = '$id'";  

	$query=mysql_query($controllo_db, $conn) or die (mysql_error());
	
	$row = mysql_fetch_array($query);
	
	$voto=$voto+$row['voto'];
	
	$query = "UPDATE mp3 SET voto = $voto WHERE id = $id";

	echo "fatto";
?>
ma non va :(
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ehm..ehm...

$query = "UPDATE mp3 SET voto = $voto WHERE id = $id";

e il mysql_query dov'è?

PHP:
$query = mysql_query("UPDATE mp3 SET voto = '$voto' WHERE id = '$id'");
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
40
Sanremo
Per borgo:
Gli apici possono fare male eccome!!!
Prendiamo questo caso, che può anche essere utile al problema:

Così funziona. Incrementa correttamente il campo voto.

PHP:
$query = "UPDATE mp3 SET voto = voto + $voto WHERE id = $id";
Così non funziona. Il campo voto viene impostato a "zero". Questo perchè usando gli apici mysql effettua un casting da stringa a numero. Se tra gli apici c'è solo un numero, il casting viene effettuato con successo. Altrimenti il casting da risultato "zero".
PHP:
$query = "UPDATE mp3 SET voto = 'voto + $voto' WHERE id = $id";
Dovrebbe essere scritta così per funzionare, ma perchè far fare a mysql un casting inutile?
PHP:
$query = "UPDATE mp3 SET voto = voto + '$voto' WHERE id = $id";
P.S. solo un paio per fortuna!!!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
penso che tu conosca il detto "cum grano salis", è evidente che il caso secondo non funzi.
io comunque, per il mio stile di programmazione non farei mai una cosa del genere (anche se formalmente corretta)
$query = "UPDATE mp3 SET voto = voto + '$voto' WHERE id = $id";
cerco sempre (anche perchè poi è più facile seguire i percorsi seminando vari var_dump) di tenere le cose più lineari possibili:
$voto_vecchio=$row['voto'];
$voto_aggiornato=$voto_vecchio+$voto;
$query="UPDATE tabella SET voto='$voto_aggiornato'.......
mysql_query($query);
forse utilizzo un metodo più antiquato, ma non amo certe scorciatoie sintattiche (es l'if con ? e talvolta preferisco $a=$a+1 al $a++ o simili)
 

iacoposk8

Utente Attivo
21 Apr 2009
54
0
0
non mi esprimo in questo off topic (perchè nn posso :) )ma vi ringrazio per l'aiuto, ora va :D
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
40
Sanremo
ciao
penso che tu conosca il detto "cum grano salis", è evidente che il caso secondo non funzi.
io comunque, per il mio stile di programmazione non farei mai una cosa del genere (anche se formalmente corretta)
$query = "UPDATE mp3 SET voto = voto + '$voto' WHERE id = $id";
cerco sempre (anche perchè poi è più facile seguire i percorsi seminando vari var_dump) di tenere le cose più lineari possibili:
$voto_vecchio=$row['voto'];
$voto_aggiornato=$voto_vecchio+$voto;
$query="UPDATE tabella SET voto='$voto_aggiornato'.......
mysql_query($query);
forse utilizzo un metodo più antiquato, ma non amo certe scorciatoie sintattiche (es l'if con ? e talvolta preferisco $a=$a+1 al $a++ o simili)
Ultimo post OT per concludere in bellezza :fonzie:

Anche io quando posso cerco di mantenermi il più possibile lineare col codice (figurati che la cosa che più apprezzo in python è la rigidità nella formattazione del codice...), il fatto è che per lavoro mi trovo spesso a dover scrivere codice ottimizzato al massimo, e poter risparmiare una query per me può voler dire molto!!!

Poi è ovvio e sacrosanto che ognuno abbia il proprio stile di programmazione (ed anche le proprie manie, io ne ho tante), sennò saremmo dei replicanti, non programmatori!!!