Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá criei este código para exibir estrelas de feedback.
E tudo resulta bem. Se o feedback for 3,4,5 porem se o feeback for 1 ou 2
As estrelas 3,4,5aparecem vazias(sem a class “teste” .como deveria) porem a estrela 1 e 2 não aparecem nem cheias nem vazias. Simplemente só aparece 3 estrelas vazias (a 3 a 4 e a 5) podem ajudar por favor?
if ($feed['nota']==5){
echo ' <input type="radio" id="star5" name="rating" value="5" /><label class="teste" for="star5" title="5 estrelas!">5 estrelas</label>';
} else {
echo '<input type="radio" id="star5" name="rating" value="5" /><label for="star5" title="5 estrelas!">5 estrelas</label>';
}
if ($feed['nota']>=4){
echo ' <input type="radio" id="star4" name="rating" value="4" /><label class="teste" for="star4" title="4 estrelas">4 estrelas</label>';
} else {
echo '<input type="radio" id="star4" name="rating" value="4" /><label for="star2" title="4 estrelas">4 estrelas</label>';
} if ($feed['nota']>=3){
echo ' <input type="radio" id="star3" name="rating" value="3" /><label class="teste" for="star3" title="3 estrelas">3 estrelas</label>';
} else {
echo '<input type="radio" id="star3" name="rating" value="3" /><label for="star3" title="3 estrelas!">3 estrelas<label>';
} if ($feed['nota']>=2){
echo ' <input type="radio" id="star2" name="rating" value="2" /><label class="teste" for="star2" title="2 estrelas">2 estrelas</label>';
} else {
echo '<input type="radio" id="star2" name="rating" value="2" /><label for="star2" title="2 estrela!">2 estrelas</label>';
} if ($feed['nota']>=1){
echo ' <input type="radio" id="star1" name="rating" value="1" /><label class="teste" for="star1" title="1 estrelas">1 estrelas</label>';
} else {
echo '<input type="radio" id="star1" name="rating" value="1" /><label for="star1" title="1 estrelas!">1 estrelas</label>';
}>
Pq você não faz apenas assim?
if ($feed['nota'] == 1) {
echo ' <input type="radio" id="star1" name="rating" value="1" /><label class="teste" for="star1" title="1 estrelas">1 estrelas</label>';
} else if ($feed['nota'] == 2) {
echo ' <input type="radio" id="star2" name="rating" value="2" /><label class="teste" for="star2" title="2 estrelas">2 estrelas</label>';
} else if ($feed['nota'] == 3) {
echo ' <input type="radio" id="star3" name="rating" value="3" /><label class="teste" for="star3" title="3 estrelas">3 estrelas</label>';
} else if ($feed['nota'] == 4) {
echo ' <input type="radio" id="star4" name="rating" value="4" /><label class="teste" for="star4" title="4 estrelas">4 estrelas</label>';
} else if ($feed['nota'] == 5) {
echo ' <input type="radio" id="star5" name="rating" value="5" /><label class="teste" for="star5" title="5 estrelas!">5 estrelas</label>';
}
Em primeiro lugar obrigado pela resposta.
Porém o que sugere não faz sentido neste caso pois se aplicar o código que sugeriu o que irá acontecer é que só aparecerá uma estrela independentemente do número de estrelas que que estiver na base de dados,
Imagine que o cliente dá 4 estrelas. O seu código está dizendo que caso a coluna ‘notas’ tenha o valor de 4 então deve aparecer a estrela relativa ao número 4.
No meu código é dito que se a coluna tiver o valor 4 entrão deve as três estrelas anteriores devem aparecer e ainda deve aparecer a 4
Se mais alguém quiser ajudar eu agradeço
Olha só...
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
echo ' <input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" /><label class="teste" for="star"star'.$feed['nota'].'"" title="'.$html.'">'.$html.'</label>';
}
Algo assim , não seria suficiente, não?!
>
Olha só...
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
echo ' <input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" /><label class="teste" for="star"star'.$feed['nota'].'"" title="'.$html.'">'.$html.'</label>';
}
Algo assim , não seria suficiente, não?!
Em primeiro lugar obrigado pela resposta.
O que sugere para mim faz todo o sentido. Repliquei 5 vezes o seu código (são 5 estrelas) porém ele está a colocar a class”teste”(responsável por estrelas cheias.) em todas as estrelas independentemente do valor da nota.
Desde já agradecido. se tiver mais alguma ideia diga por favor.
Existem classes especificas para cada qtd de estrela?
não. todas as estrelas são iguais e não existe classes individuais. tenho é uma class que é responsável por preencher (mudar de cor) a estrela á qual dei o nome de teste. essa class deve ser adicionada somente quando a estrela está ceia. isto é se a nota for 5 então essa class deve ser adicionada a todas as estrelas.se a nota for 4 então essa class deve ser adicionada somente ás 4 primeiras estrelas e assim sucessivamente.
muito obrigado pela sua resposta. se tiver mais alguma sugestão agradeceria
Então...
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
if($fees['nota'] == 5) $class = 'class="teste"'; else $class = '';
echo '<input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" />';
echo '<label '.$class.' for="star'.$feed['nota'].'" title="'.$html.'">'.$html.'</label>';
}
Será que chegou num resultado satisfatório?>
Então...
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
if($fees['nota'] == 5) $class = 'class="teste"'; else $class = '';
echo '<input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" />';
echo '<label '.$class.' for="star'.$feed['nota'].'" title="'.$html.'">'.$html.'</label>';
}
Será que chegou num resultado satisfatório?
ainda não resultou . veja aqui o print . mesmo replicando 5 vezes o código de um lado aparecem todas cheias do outro todas vazias .
obrigado pela ajuda. se tiver mais alguma ideia por favor comparti-lhe
Jokita, cada input desse eh uma estrela?
Sim inputinput é uuma estela queque tiver a class teste fica cheia se não tiver fica vazia
Deixa ver se entendi... Se $feed['nota'] for 5, ele o laço vai ter 5 inputs e labels. Mas não cinco class teste. Então, como saber quem tem a class teste ?
Acho que se vc me responder isso, agente chega num consenso aqui
>
Deixa ver se entendi... Se $feed['nota'] for 5, ele o laço vai ter 5 inputs e labels. Mas não cinco class teste. Então, como saber quem tem a class teste ?
Acho que se você me responder isso, agente chega num consenso aqui
Olha o Meu primeiro código aqui no post tem cinco inputs e cada input tem uma condição para se nota for maior ou igual a valor do input (ou seja a nota for 4 eu quero que todos os inputs ou estrelas menores ou iguais a 4 acrescentem a classe teste para que a estrela fique cheia) Esse primeiro código está a funcionar se a nota for igual ou superior a 3 porém se for 2 ou 1 desapareceu as estrelas correspondentes ao 1 e 2 (a 345 aparecem vazias tal como deviam) mas a 12 não aparecem nem cheias nem vazias .obrigado pela ajuda
if (isset($feed['nota'])){
for($i=1;$i<=5;$i++){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
if($feed['nota'] >= $i) $class = 'class="teste"'; else $class = '';
echo '<input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" />';
echo '<label '.$class.' for="star'.$feed['nota'].'" title="'.$html.'">'.$html.'</label>';
}
}
Bom, pelo que percebi cinco estrelas sempre serão exibidas, mas a classe teste só será setada para quem tiver para a quantidade de estrelas do total de sua nota...
Não precisa copiar o codigo cinco vezes... apenas testa e diz pra gente...
Ou coloca o label fora do for....
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
for($i=1;$i<=5;$i++){
if($feed['nota'] >= $i) $class = 'class="teste"'; else $class = '';
echo '<input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" />';
}
echo '<label '.$class.' for="star'.$feed['nota'].'" title="'.$html.'">'.$html.'</label>';
}
foi malz..
O raciocínio parece certo. Obrigado por ter colocado o for (eu tenha tinha tentado mas não deu certo)
Só consigo testar o código amanhã (aqui em Portugal já é de madrugada). Amanhã darei feedback. Obrigado por toda a ajuda
>
Ou coloca o label fora do for....
if (isset($feed['nota'])){
if($feed['nota'] > 1) $html = $feed['nota']." estrelas"; else $html = $feed['nota']." estrela";
for($i=1;$i<=5;$i++){
if($feed['nota'] >= $i) $class = 'class="teste"'; else $class = '';
echo '<input type="radio" id="star'.$feed['nota'].'" name="rating" value="'.$feed['nota'].'" />';
}
echo '<label '.$class.' for="star'.$feed['nota'].'" title="'.$html.'">'.$html.'</label>';
}obrigado.. funcionou perfeitamente coloquei a label dentro do for pois é ele que estava recebendo racebendo a class teste
obrigado mais uma vez
Pq vc não faz apenas assim?