Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jokita18

operadores php agem de forma estranha

Recommended Posts

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>';
                    }    

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq vc 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>';
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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>';   
 } 
foi malz..

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado.. funcionou perfeitamente coloquei a label dentro do for pois é ele que estava recebendo racebendo a class teste

obrigado mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.