Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 11-10-09, 16:37   #1 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Ajax star rater

Salve a tutti,

sto facendo un sito nel quale una giuria dovrà votare dei lavori.
Per questo sto utilizzando l'ajax star rater trovato a questo link:

masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/

Sono riuscita a integrarlo nelle mie pagine e tutto il resto, l'unica cosa però che non riesco a fare è che il codice controlla chi ha già votato o meno a seconda dell'ip.
Io invece vorrei che lo script facesse un controllo sull'id dei giudici ($_SESSION[id_giuria]), e controllasse se quel giudice ha già votato o meno.
Però non riesco a farlo, qualcuno può aiutarmi?
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 00:23   #2 (permalink)
User Attivo
 
Data di registrazione: Nov 2004
Ubicazione: Catania
Messaggi: 1,142
Invia un messaggio tramite MSN a PaTeR
Non conosco quell'applicazione, comunque sia, se utilizza il db per memorizzare il voto assegnato, basterebbe una semplice SELECT al db per controllare se esiste nella tabella VOTI una riga contenente l'ID del giudice corrente ( $_SESSION... ) e l'ID dell'elemento corrente da votare.

Poi fare un IF se la query ha avuto esito positivo, ed in quel caso mostrare il risultato...
PaTeR non in linea   Rispondi citando
Vecchio 12-10-09, 15:12   #3 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Questa query è già presente nel codice, infatti ho provato a sostituire ovunque richiamava l'ip con l'id_giuria, ma ugualmente non va...
Se qualcuno magari ha già scaricato e utilizzato questi codici e sa come funzionano...
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 15:36   #4 (permalink)
User
 
L'avatar di Blancks
 
Data di registrazione: Sep 2009
Messaggi: 91
Invia un messaggio tramite MSN a Blancks
Hai fatto anche si che l'id viene assegnato alla riga corrispondente al voto anzichè l'ip ?

Intendo, quando clicchi sulla stella per stabilire il voto.
Blancks non in linea   Rispondi citando
Vecchio 12-10-09, 15:45   #5 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Si, purtroppo il fatto è che ci sono in mezzo anche le regular expression e allora a un certo punto non capisco più la funzione del codice...
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 15:52   #6 (permalink)
User
 
L'avatar di Blancks
 
Data di registrazione: Sep 2009
Messaggi: 91
Invia un messaggio tramite MSN a Blancks
E' probabile che qualcuna di esse allora filtri il dato di modo da non far passare altro oltre l'ip.

Prova a farci vedere i singoli passaggi, ovvero memorizzazione del dato e controllo di voto e il trattamento che subiscono i dati prima di passare alla query ovviamente.
Blancks non in linea   Rispondi citando
Vecchio 12-10-09, 16:02   #7 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Questo è il codice:
Codice PHP:
function rating_bar($id,$units='',$static='') { 
require(
'_config-rating.php'); // get the db connection info
 
//set some variables
$ip $_SERVER['REMOTE_ADDR'];
// ci aggiunto l'id del giudice che vota
$id_giuria $_SESSION['id_giuria'];
if (!
$units) {$units 10;}
if (!
$static) {$static FALSE;}
// get votes, values, ips for the current rating bar
$query=mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id' ")or die(" Error: ".mysql_error());
 
star-rating-bar/#comment-121
if (mysql_num_rows($query) == 0) {
$sql "INSERT INTO $rating_dbname.$rating_tableName (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('$id', '0', '0', '')";
$result mysql_query($sql);
}
$numbers=mysql_fetch_assoc($query);
 
if (
$numbers['total_votes'] < 1) {
 
$count 0;
} else {
 
$count=$numbers['total_votes']; //how many votes total
}
$current_rating=$numbers['total_value']; //total number of rating added together and stored
$tense=($count==1) ? "vote" "votes"//plural form votes/vote
// determine whether the user has voted, so we know how to draw the ul/li
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id."' ")); 
// now draw the rating bar
$rating_width = @number_format($current_rating/$count,2)*$rating_unitwidth;
$rating1 = @number_format($current_rating/$count,1);
$rating2 = @number_format($current_rating/$count,2);
 
if (
$static == 'static') {
  
$static_rater = array();
  
$static_rater[] .= "\n".'<div class="ratingblock">';
  
$static_rater[] .= '<div id="unit_long'.$id.'">';
  
$static_rater[] .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
  
$static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
  
$static_rater[] .= '</ul>';
  
$static_rater[] .= '<p class="static">'.$id.'. Rating: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' cast) <em>This is \'static\'.</em></p>';
  
$static_rater[] .= '</div>';
  
$static_rater[] .= '</div>'."\n\n";
  return 
join("\n"$static_rater);
 
} else {
      
$rater ='';
      
$rater.='<div class="ratingblock">';
      
$rater.='<div id="unit_long'.$id.'">';
      
$rater.='  <ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
      
$rater.='     <li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
      for (
$ncount 1$ncount <= $units$ncount++) { // loop from 1 to the number of units
           
if(!$voted) { // if the user hasn't yet voted, draw the voting stars
              
$rater.='<li><a href="db.php?j='.$ncount.'&amp;q='.$id.'&amp;t='.$ip.'&amp;c='.$units.'" title="'.$ncount.' out of '.$units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
           }
      }
      
$ncount=0// resets the count
      
$rater.='  </ul>';
      
$rater.='  <p';
      if(
$voted){ $rater.=' class="voted"'; }
      
$rater.='>'.$id.' Rating: <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.' cast)';
      
$rater.='  </p>';
      
$rater.='</div>';
      
$rater.='</div>';
      return 
$rater;
 }

Poi c'è questo:

Codice PHP:
//getting the values
$vote_sent preg_replace("/[^0-9]/","",$_REQUEST['j']);
$id_sent preg_replace("/[^0-9a-zA-Z]/","",$_REQUEST['q']);
$ip_num preg_replace("/[^0-9\.]/","",$_REQUEST['t']);
$units preg_replace("/[^0-9]/","",$_REQUEST['c']);
$ip $_SERVER['REMOTE_ADDR'];
if (
$vote_sent $units) die("Sorry, vote appears to be invalid."); // kill the script because normal users will never see this.
 
//connecting to the database to get some information
$query mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($query);
$checkIP unserialize($numbers['used_ips']);
$count $numbers['total_votes']; //how many votes total
$current_rating $numbers['total_value']; //total number of rating added together and stored
$sum $vote_sent+$current_rating// add together the current vote value and the total vote value
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote
// checking to see if the first vote has been tallied
// or increment the current number of votes
($sum==$added=$added=$count+1);
// if it is an array i.e. already has entries the push in another value
((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num));
$insertip=serialize($checkIP);
//IP check when voting
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id_sent."' "));
if(!
$voted) {     //if the user hasn't yet voted, then vote normally...
 
if (($vote_sent >= && $vote_sent <= $units) && ($ip == $ip_num)) { // keep votes within range, make sure IP matches - no monkey business!
  
$update "UPDATE $rating_dbname.$rating_tableName SET total_votes='".$added."', total_value='".$sum."', used_ips='".$insertip."' WHERE id='$id_sent'";
  
$result mysql_query($update);  
 } 
//end for the "if(!$voted)"
// these are new queries to get the new values!
$newtotals mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($newtotals);
$count $numbers['total_votes'];//how many votes total
$current_rating $numbers['total_value'];//total number of rating added together and stored
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote
// $new_back is what gets 'drawn' on your page after a successful 'AJAX/Javascript' vote
$new_back = array();
$new_back[] .= '<ul class="unit-rating" style="width:'.$units*$rating_unitwidth.'px;">';
$new_back[] .= '<li class="current-rating" style="width:'.@number_format($current_rating/$count,2)*$rating_unitwidth.'px;">Current rating.</li>';
$new_back[] .= '<li class="r1-unit">1</li>';
$new_back[] .= '<li class="r2-unit">2</li>';
$new_back[] .= '<li class="r3-unit">3</li>';
$new_back[] .= '<li class="r4-unit">4</li>';
$new_back[] .= '<li class="r5-unit">5</li>';
$new_back[] .= '<li class="r6-unit">6</li>';
$new_back[] .= '<li class="r7-unit">7</li>';
$new_back[] .= '<li class="r8-unit">8</li>';
$new_back[] .= '<li class="r9-unit">9</li>';
$new_back[] .= '<li class="r10-unit">10</li>';
$new_back[] .= '</ul>';
$new_back[] .= '<p class="voted">'.$id_sent.'. Rating: <strong>'.@number_format($sum/$added,1).'</strong>/'.$units.' ('.$count.' '.$tense.' cast) ';
$new_back[] .= '<span class="thanks">Thanks for voting!</span></p>';
$allnewback join("\n"$new_back);
// ========================
//name of the div id to be updated | the html that needs to be changed
$output "unit_long$id_sent|$allnewback";
echo 
$output
E infine questo:

Codice PHP:
//getting the values
$vote_sent preg_replace("/[^0-9]/","",$_REQUEST['j']);
$id_sent preg_replace("/[^0-9a-zA-Z]/","",$_REQUEST['q']);
$ip_num preg_replace("/[^0-9\.]/","",$_REQUEST['t']);
$units preg_replace("/[^0-9]/","",$_REQUEST['c']);
$ip $_SERVER['REMOTE_ADDR'];
$referer  $_SERVER['HTTP_REFERER'];
if (
$vote_sent $units) die("Sorry, vote appears to be invalid."); // kill the script because normal users will never see this.
//connecting to the database to get some information
$query mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id_sent' ")or die(" Error: ".mysql_error());
$numbers mysql_fetch_assoc($query);
$checkIP unserialize($numbers['used_ips']);
$count $numbers['total_votes']; //how many votes total
$current_rating $numbers['total_value']; //total number of rating added together and stored
$sum $vote_sent+$current_rating// add together the current vote value and the total vote value
$tense = ($count==1) ? "vote" "votes"//plural form votes/vote
// checking to see if the first vote has been tallied
// or increment the current number of votes
($sum==$added=$added=$count+1);
// if it is an array i.e. already has entries the push in another value
((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num));
$insertip=serialize($checkIP);
//IP check when voting
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id_sent."' "));
if(!
$voted) {     //if the user hasn't yet voted, then vote normally...
 
if (($vote_sent >= && $vote_sent <= $units) && ($ip == $ip_num)) { // keep votes within range
 
$update "UPDATE $rating_dbname.$rating_tableName SET total_votes='".$added."', total_value='".$sum."', used_ips='".$insertip."' WHERE id='$id_sent'";
 
$result mysql_query($update);  

header("Location: $referer"); // go back to the page we came from 
exit;
//end for the "if(!$voted)" 
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 16:14   #8 (permalink)
User
 
L'avatar di Blancks
 
Data di registrazione: Sep 2009
Messaggi: 91
Invia un messaggio tramite MSN a Blancks
Nel secondo sorgente che hai postato c'è questa procedura:
Codice PHP:
//IP check when voting
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id_sent."' "));
if(!
$voted) {     //if the user hasn't yet voted, then vote normally...
 
if (($vote_sent >= && $vote_sent <= $units) && ($ip == $ip_num)) { // keep votes within range, make sure IP matches - no monkey business!
  
$update "UPDATE $rating_dbname.$rating_tableName SET total_votes='".$added."', total_value='".$sum."', used_ips='".$insertip."' WHERE id='$id_sent'";
  
$result mysql_query($update);  
 } 

Questo è la parte che si occupa di aggiornare il voto in caso lo user ancora deve farlo e controlla solo per ip ed id_sent (quest'ultimo penso si tratti del'id primario della tabella e, quindi, penso si riferisca a localizzare la votazione)
Indi per cui devi togliere il controllo per ip ed aggiungere quello per id giuria che al momento non salvi neanche all'atto effettivo del voto (la seconda query mostrata nello spezzone copiato).

ps: hai creato un campo dedicato nella tabella in questione per salvare anche l'id giuria ?
Blancks non in linea   Rispondi citando
Vecchio 12-10-09, 16:32   #9 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Grazie, stasera ci provo (ora sono a lavoro!)
Una curiosità però...
nella seconda parte c'è questo:

Codice PHP:
$ip_num preg_replace("/[^0-9\.]/","",$_REQUEST['t']); 

che credo c'entri con la parte che devo modificare io, ma non so come funzionano le regular expression...
devo modificare anche questo o no?
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 16:38   #10 (permalink)
User
 
L'avatar di Blancks
 
Data di registrazione: Sep 2009
Messaggi: 91
Invia un messaggio tramite MSN a Blancks
Se elimini i controlli per ip, quello non ti servirà più a nulla: a quanto ho capito dal codice lui per ogni user si segna più ip e con quello riconosce degli ip che gli vengono passati in qualche maniera ma non so ne come ne quando.

In sostanza comunque se rimpiazzi nelle clausole di ricerca delle query il match per ip includendo invece, al loro posto, quello per id giuria e non ti dovrebbe dare grossi problemi, inoltre hai il vantaggio di avere id giuria in una variabile superglobale per cui non ti serve sostituirla da qualche parte o farla influenzare dai controlli di altre variabili, puoi "innestare" direttamente tutto nella query con la concatenazione delle stringe:
Codice PHP:
$sql "SELECT blaa bla bla bla WHERE id_giuria = '".$_SESSION['id_giuria']."' id = ...... "
Spero di aver portato più chiarezza, tienimi aggiornato in caso di sviluppi
Blancks non in linea   Rispondi citando
Vecchio 12-10-09, 16:48   #11 (permalink)
User
 
L'avatar di liamuscogiuri
 
Data di registrazione: Jul 2007
Ubicazione: Roma
Messaggi: 126
Mmm... quest'ultima cosa che hai scritto mi mette in crisi... "variabile superglobale" e "concatenazione delle stringhe"... mmm...
Sembrava più facile! :-)
Comunque ok, ci proverò stasera... Ora finchè non provo ti faccio perdere solo tempo con domande inutili!
Grazie mille davvero, domattina ti farò sapere!
liamuscogiuri non in linea   Rispondi citando
Vecchio 12-10-09, 16:57   #12 (permalink)
User
 
L'avatar di Blancks
 
Data di registrazione: Sep 2009
Messaggi: 91
Invia un messaggio tramite MSN a Blancks
No-Problem: per me è un piacere


Per variabile superglobale s'intende semplicemente un particolare tipo di variabile che può essere richiamata in ogni contesto.

Per concatenazione delle stringhe, s'intende la possibilità di unire più stringhe tra loro usando il puntino.

example:
Codice PHP:
$someday "Domenica";
$text "Oggi è ".$someday// aggiungiamo il contenuto di someday alla frase "Oggi è "

echo $text// e stamperemo "Oggi è Domenica" 
Molto concettualmente questo, inoltre puoi concatenare la stringa sia tra due testi, che tra due variabili ed in qualsiasi posizione.

another example:
Codice PHP:
$text "Ciao, "."mi chiamo"." Salvatore";

echo 
$text// stamperà "Ciao, mi chiamo Salvatore"


$who "Mario, ";
$what "segnati questo numero di telefono";

$text $who.$what;

echo 
$text// stamperà "Mario, segnati questo numero di telefono" 

Ultima modifica di Blancks : 12-10-09 16:59.
Blancks non in linea   Rispondi citando
Vecchio 05-07-11, 00:15   #13 (permalink)
User
 
Data di registrazione: Nov 2008
Messaggi: 87
Salve a tutti.
Anche io sto usando aiax star rater v122 e vorrei capire una cosa.
Il codice che vedete postato sopra non permette di effettuare più voti da parte dello stesso utente.
Questo vincolo però vale per tutti i computer che si collegano sulla stessa linea adsl. Quindi se voto con un computer, non potrò rivotare con un altro computer di casa.
Come posso modificare questa funzione e far si che non si possa votare più di una volta solo se si usa lo stesso computer?

Rosanna
VisionEart non in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:21.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.