如何在PHP中组合“和”语句和“if”语句?

时间:2012-08-03 18:06:31

标签: php if-statement parentheses and-operator

我正在尝试以我放在一起的形式为供应商和模型编写支票

以下是表格

的相关部分
<table  width="75%">
<form action="?" method="post">
<tr>
<td colspan="6" align="center">
<font size="5"><b>Add new record</b></font>
</td>
</tr>
<tr>
<td align="right">
<b>Vendor:</b>
</td>
<td>
<select name="vendor">
<option value="ClearAccess">ClearAccess</option>
<option value="VisionNet">VisionNet</option>
<option value="Other">Other</option>
</select>
</td>
<td align="right">
<b>Model:</b>
</td>
<td>
<select name="model">
<option value="NotModel">--ClearAccess--</option>
<option value="AG10W">AG10W</option>
<option value="SR100G">SR100G</option>
<option value="SR300N">SR300N</option>
<option value="SR350N">SR350N</option>
<option value="SR500N">SR500N</option>
<option value="NotModel">--VisionNet--</option>
<option value="M404">M404</option>
<option value="M405">M405</option>
<option value="M505">M505</option>
<option value="M505n">M505N</option>
<option value="Legacy">Legacy</option>
</select>
</td>

我的表格很好。我的问题是当我构建我的if循环时。这是我到目前为止所拥有的

if ($_POST['vendor']='ClearAccess') && ($_POST['model']='M404') || ($_POST['model']='M405') || ($_POST['model']='M505') || (_$POST['model']='M505N') || ($_POST['model']='Legacy')
echo "You have not selected a valid vendor/model combination"

我的问题在于何处以及如何放置我的括号。

我还要创建一个与此

类似的if语句
if ($_POST['vendor']='VisionNet') && ($_POST['model']='AG10W') || ($_POST['model']='SR100G') || ($_POST['model']='SR300N') || (_$POST['model']='SR350N') || ($_POST['model']='SR500N')|| ($_POST['model']='Legacy')
echo "You have not selected a valid vendor/model combination"

我完全乐于采取不同的方式。最后,我将把它变成java脚本,你选择一个供应商,只获得该供应商的相关模型。因为我还在学习PHP,甚至没有学习Java的基础知识,但我想以这种方式尝试。

7 个答案:

答案 0 :(得分:3)

减少你的逻辑。从一般陈述中的想要开始。

A = "Vendor is VisionNet"
B = "Model is AG10W"
C = "Model is SR100G"
etc.

然后将您的逻辑写为

if (A and (B or C))

OR

if ((A and B) or C)

然后用等效的PHP替换你的占位符。

在PHP中,如果您正在尝试查看x是否是众多值中的一个,则可以使用in_array()方法:

$models = array('AG10W', 'SR100G', 'SR300N', 'SR350N', 'SR500N', 'Legacy');

// if the vendor is vision net OR the model is in the list of models defined in $models, do something
if ($_POST['vendor'] == 'VisionNet' || in_array($_POST['model'], $models)) {
    // do something.
}

同时考虑operators。作业与比较不同。

请记住,逻辑只是数学的另一个子集。括号很重要,所以如果你提前关闭if语句,那就结束了。之后的所有内容都将成为语法错误。

我提到这是因为你写了这个:

if ($_POST['vendor'] = 'VisionNet') || ...

这是discrete mathematics教程的链接,这是一种说“逻辑数学”的奇特方式。

此外,对于所有感兴趣的人,麻省理工学院(麻省理工学院)免费提供在线开放课程,其中一个是mathematics of computer science,深入讨论离散数学。

答案 1 :(得分:1)

以下是您的问题:

  1. 使用=代替==
  2. 未将()放入if声明
  3. 改变
    if ($_POST['vendor']='ClearAccess') && ($_POST['model']='M404') || ($_POST['model']='M405') || ($_POST['model']='M505') || (_$POST['model']='M505N') || ($_POST['model']='Legacy')
    

    到:

    if (($_POST['vendor']=='ClearAccess') && ($_POST['model']=='M404') || ($_POST['model']=='M405') || ($_POST['model']=='M505') || (_$POST['model']=='M505N') || ($_POST['model']=='Legacy')) 
    

答案 2 :(得分:1)

首先,您需要使用===代替=。单一等于是指分配,而不是比较。

其次,我认为你要做的就是说“如果是这个供应商和其中一个模型,那就做点什么。如果是这样的话,试试这个:

   if($_POST['vendor'] === 'ClearAccess' && (*various models, using ||*))
       //dostuff

这样,如果供应商和至少一个模型相同,它将等同于true

更好的方法是建立各种模型的数组,然后使用PHP的in_array()

答案 3 :(得分:0)

您必须在if条件中使用==代替=

所以而不是:

if ($_POST['vendor']='ClearAccess') && ...

使用

if ($_POST['vendor'] == 'ClearAccess') && ...

最好有这样的if条件:

if ($_POST['vendor'] == 'ClearAccess') &&
    str_replace(array('M404', 'M405', 'M505', 'M505N', 'Legacy'), '', $_POST['model']) 
         != $_POST['model']
   )
   echo "You have not selected a valid vendor/model combination"

答案 4 :(得分:0)

您应该查看if then statements http://php.net/manual/en/control-structures.if.php的php语法,因为您的语法错误。您将发布变量分配给除使用==

之外的值
  

if($ _POST ['vendor'] =='VisionNet')
  此外,您应该重新考虑您的$$和||用法并决定你的程序中实际说的是什么。

答案 5 :(得分:0)

包裹你的&amp;&amp;在它自己的括号内。所以下面的例子说如果POST [供应商]是Clear Acces而POST [model]是M404,或者POST [model]是M405,M505,M505N或Legacy。

if (($_POST['vendor']=='ClearAccess') && ($_POST['model']=='M404')) || ($_POST['model']=='M405') || ($_POST['model']=='M505') || (_$POST['model']=='M505N') || ($_POST['model']=='Legacy') 
echo "You have not selected a valid vendor/model combination"

答案 6 :(得分:0)

你需要把你的()放在正确的位置......

只是为了让您了解语法,这里的代码包含很好的换行符:)

if (
($_POST['vendor'] == 'ClearAccess' && $_POST['model'] = 'M404') || 
$_POST['model'] == 'M405' || 
$_POST['model'] == 'M505' || 
$_POST['model'] == 'M505N' ||
$_POST['model'] == 'Legacy'
) {
echo "You have not selected a valid vendor/model combination"
}

没有换行符:

if (($_POST['vendor'] == 'ClearAccess' && $_POST['model'] == 'M404') || $_POST['model'] == 'M405' ||  $_POST['model'] == 'M505' || $_POST['model'] == 'M505N' || $_POST['model'] == 'Legacy') {
echo "You have not selected a valid vendor/model combination"
}

您的其他陈述也是一样的。