0

我正在尝试以我整理的表格为供应商和模型写一张支票

这是表格的相关部分

<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 的基础知识,但我想以这种方式尝试。

4

7 回答 7

4

减少你的逻辑。从你想在一般陈述中做的事情开始。

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

然后把你的逻辑写成

if (A and (B or C))

或者

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

还要考虑运营商。分配不同于比较。

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

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

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

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

此外,对于所有感兴趣的人,麻省理工学院(MIT)免费提供在线开放课程,其中之一是计算机科学数学,它深入讨论了离散数学。

于 2012-08-03T18:13:25.093 回答
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')) 
于 2012-08-03T18:10:20.247 回答
1

首先,您需要使用===而不是=. 单个等号意味着分配,而不是比较。

其次,我认为你想做的是说“如果是这个供应商和这些模型之一,做点什么。如果是这样,试试这个:

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

这样,它将等同于true供应商是否与至少一个模型相同。

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

于 2012-08-03T18:10:20.477 回答
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"
于 2012-08-03T18:09:27.380 回答
0

您应该查看 if then 语句的 php 语法http://php.net/manual/en/control-structures.if.php因为您的语法是错误的。您正在将您的帖子变量分配给使用 == 以外的值

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

于 2012-08-03T18:10:51.907 回答
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"
}

你的另一个陈述也是如此。

于 2012-08-03T18:14:43.737 回答
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"
于 2012-08-03T18:11:46.937 回答