2012-01-09 99 views
25

以下是我的HTML表單中的一個片段,它相應地從表格行中選擇選項。是否可以使用PHP將HTML SELECT/OPTION值設置爲NULL?

我想要做的是將第一個選項值設置爲NULL,所以當沒有選擇時,將表單提交到數據庫時輸入NULL。

<td>Type</td> 
    <td>:</td> 
    <td><select name="type_id" id="type_id" class="form"> 
    <option value=""></option> 
     <?php 
      $sql = mysql_query("SELECT type_id, type FROM $tbl_add_type") or die(mysql_error()); 
      while ($row = mysql_fetch_array($sql)) 
       { 
        echo "<option value=".$row['type_id'].">" . $row['type'] . "</option>"; 
       } 
     ?> 
    </select>*</td> 

這可能嗎?或者可以有人提出一個更簡單/更好的方式來做到這一點?

感謝

更新:感謝您的回答,我用下面詳述將其轉換爲NULL的方法。

if ($_POST['location_id'] === '') 
        { 
         $_POST['location_id'] = 'NULL'; 
        } 

但是,當試圖在下面的查詢中使用此NULL值時,它不起作用。

UPDATE addresses SET location_id='NULL' WHERE ipid = '4791' 

我知道它需要location_id=NULL代替,但不知道如何做到這一點?

更新2:這是我的查詢是如何工作的:

if ($_POST['location_id'] === '') 
{ 
$_POST['location_id'] = 'NULL'; // or 'NULL' for SQL 
} 

$notes=isset($_POST['notes']) ? mysql_real_escape_string($_POST['notes']) : ''; 
//$location_id=isset($_POST['location_id']) ? mysql_real_escape_string($_POST['location_id']) : ''; 
$ipid=isset($_POST['ipid']) ? mysql_real_escape_string($_POST['ipid']) : ''; 


$sql="UPDATE addresses 
    SET notes='$notes', location_id='$location_id' 
    WHERE ipid = '$ipid'"; 


mysql_query($sql) or die(mysql_error()); 

回答

27

沒有, POST/GET值永遠不會是null。他們可以做的最好的是一個空字符串,您可以將其轉換爲null/'NULL'

if ($_POST['value'] === '') { 
    $_POST['value'] = null; // or 'NULL' for SQL 
} 
+0

真的嗎? '的var_dump($ _ GET [ 'missingKey']); // NULL' http://codepad.org/2s7jCBbc – AlienWebguy 2012-01-10 00:38:36

+0

謝謝deceze - 我已經使用了你的答案,但仍然有問題得到它的權利NULL - 如果你看到我更新。有任何想法嗎? – Bernard 2012-01-10 01:17:11

+0

@Alien這不是一個POST/GET值,這是*不存在*值。 – deceze 2012-01-10 01:24:52

3

所有你需要的是檢查後的東西。

<?php 
if(empty($_REQUEST['type_id']) && $_REQUEST['type_id']!=0) $_REQUEST['type_id'] = null; 
+0

這是危險的。如果'type_id = 0'是一個有效的ID呢? – AlienWebguy 2012-01-09 23:41:24

+0

的確如此。實際上,我會提出一種不同的方法,但實際上對於提問者來說,這很可能太麻煩。 – Jason 2012-01-09 23:46:04

0

是的,這是可能的。你必須做這樣的事情:

if(isset($_POST['submit'])) 
{ 
    $type_id = ($_POST['type_id'] == '' ? "null" : "'".$_POST['type_id']."'"); 
    $sql = "INSERT INTO `table` (`type_id`) VALUES (".$type_id.")"; 
} 

它檢查$_POST['type_id']變量有一個空值。 如果是,則將NULL作爲字符串賦值給它。 如果不是,它將賦值爲'SQL表示法

+0

PHP語法錯誤:意外的']'行3 – Jason 2012-01-09 23:47:33

+0

thx,提示。我修正了這個問題 – 2012-01-10 00:25:29

0

這就是爲什麼Id不喜歡數據庫中的NULL值。
我希望你對有一個理由。

if ($_POST['location_id'] === '') { 
    $location_id = 'NULL'; 
} else { 
    $location_id = "'".$_POST['location_id']."'"; 
} 
$notes = mysql_real_escape_string($_POST['notes']); 
$ipid = mysql_real_escape_string($_POST['ipid']); 

$sql="UPDATE addresses 
    SET notes='$notes', location_id=$location_id 
    WHERE ipid = '$ipid'"; 

echo $sql; //to see different queries this code produces 
// and difference between NULL and 'NULL' in the query 
相關問題