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

您的其他陳述也採用相同的方式。