Ragazzi ho un problema,devo passare delle variabili ad un filmato flash,e tra queste c'è pure il totale di punti dal modulo Userpoints,per fare cio',non potendo passare le variabili tramite flashvars poichè rimangono in chiaro nel codice html,devo usare una pagina esterna.Ho provato includendo il bootstrap,ma con il userpoints_get_current_points($user->uid); non mi viene restituito nulla,allorchè ho pensato di crearmi una query solo per il totale di crediti:
<?php global $user;
$uId= $user->uid;
$uName= $user->name;
$uHost= $user->hostname;
$uSid= $user->sid;
error_reporting(E_ALL ^ E_NOTICE);
$server = 'localhost';
$database = 'mydb';
$username = 'root';
$password = 'mypassword';
$connection = mysql_connect($server, $username, $password);
if (!$connection) {
die('Could not connect to MySQL database, the server return the error: ' . mysql_error());
}
$db = @mysql_select_db($database);
$db = db_query("SELECT points FROM userpoints_txn WHERE `uid` = $uId");
while($row = db_fetch_array($db))
{ $cRed=$row['points'];}
E fin qui tutto ok,la query funziona,ma c'è un problema,mi visualizza solo l'ultima modifica agli userpoints e nn il totale,allora ho provato modificando la query:
"SELECT SUM(points) as total FROM userpoints_txn WHERE `uid` = $uId"
In questo modo nn mi viene restituito alcun errore,e nemmeno alcun valore... dove sta l'errore ?..
Non ho molto esperienza con $P->H->P, ma dopo 20 anni di C, C++, Java, Ruby, JavaScript, e purtroppo anche VB e VBScript, vedremo cosa posso combinare...
<?php global $user;
$uId= $user->uid;
$uName= $user->name;
$uHost= $user->hostname;
$uSid= $user->sid;
Uhmmm, so che hai detto che stai usando il bootstrap, ma chi esattamente sta creando e caricando i valori di
$user
?Vedo che in questo caso, ti serve solo
$user->uid
, quindi forse meglio passare questo valore come parametro GET o POST, tipo?uid=123
error_reporting(E_ALL ^ E_NOTICE);
$server = 'localhost';
$database = 'mydb';
$username = 'root';
$password = 'mypassword';
$connection = mysql_connect($server, $username, $password);
Sembra aposto, ma dato che crei solo un
$connection
tutto questo si potrebbe ridurre a:error_reporting(E_ALL ^ E_NOTICE);
$connection = mysql_connect('localhost', 'root', 'mypassword');
if (!$connection) {
die('Could not connect to MySQL database, the server return the error: ' . mysql_error());
}
$db = @mysql_select_db('mydb'); // tolto $database, perchè usato una volta solo...
$db = db_query("SELECT points FROM userpoints_txn WHERE `uid` = $uId");
Anche questo sembra aposto, solo che non è buon idea 'riutilizzare' un variabile - hai usato
$db
per tenere il risultato del select db, ma anche per il query. Non è un problema per PHP, ma ho dovuto guardarlo due volte per capire che non era un errore.Poi, sei aperto ad un possibile attaccho 'SQL injection' vedi http://api.drupal.org/api/group/database/6, megiio scrivere
$query = db_query("SELECT points FROM userpoints_txn WHERE `uid` = %d", $uId);
while($row = db_fetch_array($db))
{ $cRed=$row['points'];}
Ooops, volevi il totale (sum)? allora dovevi scrivere:
$cRed = 0;
while($row = db_fetch_array($db)) {
$cRed += $row['points'];
}
E forse dovevi anche convertire
$row['points']
in un integer con$cRed += intval($row['points']);
Francamente non ho capito da dove veniva fuori il valore di
$uId
, come spiegato sopra, ma almeno abbiamo capito perchè il 'totale' aveva solo l'ultimo valore..."SELECT SUM(points) as total FROM userpoints_txn WHERE `uid` = $uId"
Sembra aposto. Anzi, è più efficacia della precedente (più lavoro a MySQL, ma meno traffico MySQL/PHP,e meno lavoro PHP).
Boh. Presumo che hai scritto:
[Modified] Ignora questo...
$query = db_query("SELECT SUM(points) as total FROM userpoints_txn WHERE `uid` = %d", $uId);
$cRed = 0;
if($row = db_fetch_array($query)) {
$cRed = intval($row['total']);
}
E piu' facile (e piu' corretto) questo:
$totale = db_result(db_query("SELECT SUM(points) FROM userpoints_txn WHERE `uid` = %d", $uId)):
[/Modified]
Prova sostiuire
$uId
con un id utente valido - io ho usato 123 per esempio, sicuramente 1 va bene...HTH
John
Più imparo, più dubito.
Innanzitutto ti ringrazio per la veloce ed esaurientissima ed impeccabile risposta,mi sto avvicinando alle query in questi giorni e sto prendendo spunto qua e la da script già fatti,quindi è inevitabile che commetta banali errori..infatti ancora nn mi è ben chiara la sintassi per drupal,ma grazie alla tua risposta ci ho capito sicuramente di piu... cmq,come scritto da te il codice funziona alla grande :) grazie mille...