2011-05-17 6 views
2

Ceci est probablement aussi simple que possible, mais je suis novice en PHP et ce n'est pas mon point fort, alors s'il vous plait, faites attention! Je suis coincé!Deux conditions dans une instruction PHP 'if'

J'ai un formulaire mis en place avec une réponse oui ou non comme un bouton radio. Si l'utilisateur clique sur yes, deux autres choix de bouton radio s'affichent: a et b. S'ils avaient cliqué sur no, ils auraient été présentés avec les boutons radio c et d.

Soit dit en passant, j'ai un peu de JavaScript cacher la a et b DIV et la c et d DIV jusqu'à ce yes ou no est cliquée, juste pour garder les choses en ordre. Le no DIV, contenant c et d disparaît et est remplacé par le yes DIV lorsque yes est cliquée après no, et vice versa. Tout fonctionne bien.

Mon problème est avec le PHP. Il est peu probable, mais si l'utilisateur tape no, fait un choix, disons d, puis décide de changer leur réponse à yes, puis sélectionne a, le script renvoie toujours d. Je suppose que c'est parce que d est toujours sélectionné et apparaît en dernier dans le flux HTML. Ce que je voudrais que mon script fasse est ignorer c et d, même s'ils ont été sélectionnés, si yes est sélectionné. De même, j'aimerais que a et b soient ignorés si no est sélectionné.

Un HTML ressemble à ceci:

<label for="yes_or_no">Yes or No?</label> 
    <input type="radio" name="yes_or_no" id="yes" value="yes" /> 
    <label for="yes">Yes</label> 
    <input type="radio" name="yes_or_no" id="no" value="no" /> 
    <label for="no">No</label> 

<div id="yes"> 
    <label for="a_or_b" id="a_or_b">A or B?</label> 
    <input type="radio" name="a_or_b" id="a" value="a" /> 
    <label for="a">A</label> 
    <input type="radio" name="a_or_b" id="b" value="b" /> 
    <label for="b">B</label> 
</div> 

<div id="no"> 
    <label for="c_or_d" id="c_or_d">C or D?</label> 
    <input type="radio" name="c_or_d" id="c" value="c" /> 
    <label for="c">C</label> 
    <input type="radio" name="c_or_d" id="d" value="d" /> 
    <label for="d">D</label> 
</div> 

Mon PHP ressemble à ceci, mais il ne fonctionne pas correctement:

$yes_or_no = $_REQUEST["yes_or_no"] ; 
$a_or_b = $_REQUEST["a_or_b"] ; 
$c_or_d = $_REQUEST["c_or_d"] ; 

if ($yes_or_no="yes" && $a_or_b!="") $result="$a_or_b"; 
if ($yes_or_no="no" && $c_or_d!="") $result="$c_or_d"; 
$feedback = "$result"; 

La $feedback variable est alors m'a envoyé un courriel.

J'espère que cela a du sens! Merci de votre aide!

Martin.

Répondre

5

Utilisation == pour l'égalité des tests:

if ($yes_or_no == "yes" && $a_or_b != "") $result="$a_or_b"; 
if ($yes_or_no == "no" && $c_or_d != "") $result="$c_or_d"; 

Je ne suis pas sûr si cela va complètement résoudre votre problème, mais peut-être il vous lancer. Oh, et vous pouvez faire $result = $a_or_b au lieu de $result="$a_or_b", mais cela n'affectera rien ici.

+1

Cela semble être exactement son problème. Dans cette situation, lorsque vous utilisez un single = dans une instruction IF, vous définissez la valeur de cette variable et elle teste si cette variable n'est pas fausse. Dans cette situation, l'instruction IF réussira toujours. L'utilisation d'un == le réglerait définitivement. De plus, vous n'avez pas besoin de mettre $ result en guillemets doubles. $ feedback = $ résultat fonctionnera très bien. – WhiskeyTangoFoxtrot

+1

@Foxtrot, oui. C'est définitivement un problème. Je voulais simplement dire que je n'ai pas analysé la logique pour voir si elle est correcte même si l'erreur est corrigée. De plus, il est possible que ni if ​​'soit 'true' et' $ result' ne soit jamais défini. Est-ce qu'il gère cette affaire? Je ne sais pas. – Matthew

+1

vient de faire l'ajustement à l'opérateur égal et ça fonctionne comme un charme! Je vais prendre le pouls de cette alouette PHP si ça me tue (ce qui est tout à fait possible!). En attendant, merci à tout le monde (@konforce, @Foxtrot, @joey, @lonesomeday, et tout le monde) qui m'aide! Martin. – Martin

0

Vous êtes actuellement en réglant la variable $yes_or_no à la valeur du if. Utilisez == au lieu de =. L'un est la cession, l'autre est la comparaison.

0
if ($yes_or_no="yes" && $a_or_b!="") $result="$a_or_b"; 

Le problème est avec $yes_or_no = "yes". C'est le assignment operator, pas le .Il dit "mettre $yes_or_no à yes, puis retourner true" (ce n'est pas exactement cela, mais c'est proche). Vous voulez un opérateur qui dit "retour true si $yes_or_no est égal à yes". Remplacez = par == et votre code devrait fonctionner.

(Il y a une autre raison pour laquelle votre code est cassé ici -. = a moins precedence que &&, alors que == a une priorité plus élevée, mais ce n'est pas le plus gros problème)

0

Vous pouvez utiliser js pour effacer tout la sélection de a et b est non est sélectionné et la même chose pour quand l'utilisateur sélectionne oui.

De plus, vous avez des bugs dans votre php que d'autres ont mentionnés.