script semplice per votare

ciao  secondo voi perche non  mi funziona questo script    mi vede  come valore  solo 0 e 1  se io metto nel db  2 o 3 si ferma ad 1  per  i voti sulle news $control_votes =mysql_query ("select * from voti  where vote  "); $control_stato =mysql_num_rows($control_votes); if($control_stato ==0){ echo"<img src='img/star_0.gif' />"; }if($control_stato ==1){ echo"<img src='img/star_1.gif' />"; }if($control_stato ==2){ echo"<img src='img/star_2.gif' />"; }if($control_stato ==3){ echo"<img src='img/star_3.gif' />"; }if($control_stato ==4){ echo"<img src='img/star_4.gif' />"; }if($control_stato ==5){ echo"<img src='img/star_5.gif' />"; }if($control_stato ==6){ echo"<img src='img/star_6.gif' />"; }

inviato 8 anni fa
roccochiolo
X 0 X

select * from voti  where vote

"where vote" cosa?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

a parte l'errore di logica nella query (:2funny:) usa uno switch perchè è più performante e più leggibile:

switch ($control_stato) {
    case 0:
    default:
        echo '<img src="img/star_0.gif" alt="" />';
        break;
    case 1:
        echo '<img src="img/star_1.gif" alt="" />';
        break;
    case 2:
        echo '<img src="img/star_2.gif" alt="" />';
        break;
    case 3:
        echo '<img src="img/star_3.gif" alt="" />';
        break;
    case 4:
        echo '<img src="img/star_4.gif" alt="" />';
        break;
    case 5:
        echo '<img src="img/star_5.gif" alt="" />';
        break;
    case 6:
        echo '<img src="img/star_6.gif" alt="" />';
        break;
}

//che è comunque riducibile a, osservando bene :

echo '<img src="img/star_' . $control_stato . '.gif" alt="" />';

Un If ... else (struttura condizionale a due vie: vero e falso ) è utile solo quando c'è da considerare le "due facce della medaglia" quella vera e quella falsa, nel caso siano presenti più "determinazioni" è utile usare una struttura di scelta multipla, lo switch appunto, che permette di definire più comportamenti per ogni determinazione della condizione.

la sintassi è la seguente :

switch (<condizione>) {

     case <caso>:

               //azione

               break; //salta alla fine dello switch, se omesso passa al caso successivo (se presente)

     case <altro caso>:

               //altra azione

               break;

     default: //questo caso è eseguito nel caso non ci siano corrispondenze con nessuno degli altri casi.

               //azione predefinita

}

http://it.php.net/switch

:bye:

     

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

ciao e grazie  ma non ho capito una cosa

$control_votes =mysql_query ("select * from voti  where vote  ");a  vote che attributo devo dare   vote 1,2,3,4,5,6 ho lasciarlo semplicemente cosi?

risposto 8 anni fa
roccochiolo
X 0 X

l'SQL non è un'opinione... non puoi procedere a casaccio, a tentativi, non ne verrai mai a capo... e se magari qualcosa ti funzionerà non saprai il perché.

Partiamo dall'inizio: cosa vuoi ottenere esattamente con quella query? Come vuoi utilizzare poi i risultati della query?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ciao ancora  avevo pensato di mettere un opzione  vota  in modo che  se    se sul database trova il valore 1  deve caricare un immagine  se trova il valore 2 deve carecare un altra img  se  il valore e 3  deve caricare  un altra ancora    volevo che la gente  possa dare un suo  giudizio

risposto 8 anni fa
roccochiolo
X 0 X

Secondo me dovresti dare prima un'occhiata qui : http://www.phpnews.it/corsi/corso-php-base/

poi tornare a fare gli script.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ciao  sono daccordissimo con te  dovrei farmi un corso  la guida l ho gia letta, ottima   comunque ritornando al discorso della query  mi otresti spiegare   cos e il problema  mi hai spiegato lo swick e l ho capito  che mi conviene usarlo per tenere pulito lo script se non ti dispiace mi  potresti spiegare come diceva gianni non bisognia andare ad intuito  io ho provato where  voti ='1,2,3,4,5,6'

o provato anche cosi where voti mi spieghi come e corretto ciao e grazie

risposto 8 anni fa
roccochiolo
X 0 X

tu non hai provato "where voti =1,2,3,4,5,6" tu hai fatto questo :

estrai tutti i voti dalla tablla voti dove voto ? ? ?

metti in $control_stato quanti voti sono stati trovati

se ci sono 0 voti mostra immagine 0

se c'è 1 voto mostra immagine 1

se ci sono 2 voti mostra immagine 3

gli errori di logica, evidenziati in rosso.

il tuo script praticamente estrae NESSUN record dalla tabella perchè nessun record ha voto (a niente, è un errore di sintassi non specificare l'uguaglianza tra due entità).

Dopo aver, idealmente, estratto i voti, li conti (quindi se ci fossero 300 record nella tabella voti, la variabile $control_stato è 300) e metti tutto nella variabile $control_stato.

poi controlli la variabile $control_stato e mostri 7 immagini.

ora trova gli errori e corregili, la pappa pronta fa male  ^-^ e si vede :D

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

la correzione è questa :

* aggiungi il campo VOTI alla news nel database, con questo OGNI NEWS ha un suo punteggio.

* usa la query :

"SELECT `voti` as `punteggio` FROM `news` WHERE `id_news`=$id"

* questa query, DEVE restituire un solo record, che NON DEVE essere contato, ma preso, questo può essere svolto in questo modo:

<?php
// [codice di connessione et cetera]
$id = //ID DELLA NEWS selezionata.
$query = "SELECT `voti`as `punteggio` FROM `news` WHERE `id_news`=$id";
$handle = mysql_query($query);
$punteggio_news = mysql_result($handle, 'punteggio');
switch ($punteggio_news) {
    case 0:
    default:
        echo '<img src="img/star_0.gif" alt="" />';
        break;
    case 1:
        echo '<img src="img/star_1.gif" alt="" />';
        break;
    case 2:
        echo '<img src="img/star_2.gif" alt="" />';
        break;
    case 3:
        echo '<img src="img/star_3.gif" alt="" />';
        break;
    case 4:
        echo '<img src="img/star_4.gif" alt="" />';
        break;
    case 5:
        echo '<img src="img/star_5.gif" alt="" />';
        break;
    case 6:
        echo '<img src="img/star_6.gif" alt="" />';
        break;
}

è stato utilizzato mysql_result perchè permette di ottenere un solo elemento dalla query, infatti era noto a priori che il valore restituito dall'interrogazione al database sarebbe stato unico, quindi utilizzare una funzione per l'estrazione di set di dati sarebbe stata inutile.

Se la query che scrivi ritorna piu risultati, dovresti utilizzare una funzione come : mysql_fetch_array o mysql_fetch_rows.

In pseudo codice lo script fa questo:

seleziona dalla tabella delle news il voto per la news con id $id.
in $punteggio metti il punteggio (o voto) della news
scegli $punteggio :
 caso 0:
 predefinito:
    mostra immagine 0;
    fine scelta;
 caso 1:
    mostra immagine 1;
    fine scelta;
 caso 2:
    mostra immagine 2;
    fine scelta;
 [...]
fine scelte;

ulteriori informazioni sulle strutture utilizzate :

http://it.php.net/mysql_result

http://it.php.net/mysql_query

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

ciao e grazie  ti faccio sapere   sei stato gentilissimo

risposto 8 anni fa
roccochiolo
X 0 X

ciao  mi da un errore di sintex  su misql_result

risposto 8 anni fa
roccochiolo
X 0 X

riporta il codice

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ciao il problema e stato risolto    sei stato veramente gentilissimo  comunque  dammi  un tuo parere  secondo te per votare un articolo si fa cosi?

risposto 8 anni fa
roccochiolo
X 0 X

Si. Ma ovviamente ci sono metodi più eleganti che imparerai più in là, con l'esperienza ed il tempo.

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ciao sei veramente gentilissimo   spero d imparare credimi la buona volonta c e e l impegno pure  dai perfavore  un occhiata alla discussione che ho aperto   su l inserimento del bbcode se non ti dispiace  e hai tempo  grazie  ancora

risposto 8 anni fa
roccochiolo
X 0 X

Non andare fuori tema per piacere, se qui non ti serve più una mano non postare.

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda