2012-08-03 132 views
0

我想写的供应商和型号支票的形式我已经把如何在PHP中结合“和”语句和“if”语句?

这里是形式

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

我的形式是很好的relavent一部分。我的问题是当我构建我的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的基础知识,但我想以这种方式尝试。

+0

_“valid”_ should be _“invalid”_ – radikaos 2012-08-03 18:09:08

+4

确保您了解'='和'=='之间的区别。 'if($ _POST ['vendor'] ='VisionNet')'将始终返回true,因为您正在执行任务,而不是比较。 – 2012-08-03 18:09:09

+0

@TimFountain in'if($ _ POST ['vendor'] ='VisionNet')'左括号也结束了'if语句 – Matt 2012-08-03 18:14:44

回答

0

您必须在您若条件下使用==代替=

所以不是:

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

使用

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

最好有你的,如果这样的情况:

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" 
+0

这是真的,但OP的问题最少。 – Matt 2012-08-03 18:10:35

+1

@Matt:我不知道“OP的问题最少”;这是失败的一个非常重要的原因。无论原始值是什么,“条件”都会始终返回true,因为所有东西都被设置为真值(作为表达式的值返回)。所以,即使|| s和&& s和括号是正确的,条件仍然会被打破。 – cHao 2012-08-03 18:14:19

1

这是你们的问题:

  1. 使用的=代替==
  2. 没有放置()if声明

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')) 
1

首先,你需要使用===代替的=。单个等于意味着分配,而不是比较。

其次,我认为你正在试图做的是说“如果是这个供应商和这些车型之一,做一些事情。如果是这样的话,试试这个:

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

这样一来,它将等同于true如果供应商是平等的,以及模型中的至少一个。

一个更好的方式来做到这将是建立各种型号的数组,然后使用PHP的in_array()

+0

为什么'==='而不是'=='? – mlishn 2012-08-03 18:12:55

+0

这是最佳做法。 '=='会进行类型转换,这会导致奇怪的错误。 http://stackoverflow.com/questions/80646/how-do-the-equality-double-equals-and-identity-triple-equals-comparis – SomeKittens 2012-08-03 18:17:16

+0

呵呵,从来不知道,谢谢:) – mlishn 2012-08-03 18:18:21

0

你应该看看if的php语法然后陈述http://php.net/manual/en/control-structures.if.php,因为你的语法是错误的。你是不是使用==

分配您的帖子变量为其他值,如果($ _ POST [ '供应商'] == 'VisionNet')
此外,你应该重新考虑你的$$和||用法并决定你程序中实际说的是什么。

0

将您的& &包裹在它自己的括号内。所以下面的例子说明了如果POST [vendor]是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" 
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 ($_POST['vendor'] = 'VisionNet') || ... 

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

此外,对于那些有兴趣,MIT(麻省理工学院)提供网上公开课程免费,其中之一是讨论深入的离散数学的mathematics of computer science

+1

无法写得比这更好。 – Oussama 2012-08-03 18:15:53

+0

@Yazmat我试图尽可能明确。这个问题不一定是PHP,但缺乏关于逻辑如何工作的知识。 OP需要一个离散数学课程。 – Matt 2012-08-03 18:29:20

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" 
} 

而且没有linebreaks:

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" 
} 

您的其他陈述也采用相同的方式。