2012-01-09 5 views
25

Sau đây là một đoạn trích từ biểu mẫu HTML của tôi, kéo các tùy chọn từ các hàng trong bảng phù hợp.Có thể có giá trị SELECT/OPTION HTML là NULL bằng cách sử dụng PHP không?

Điều tôi muốn làm là có giá trị tùy chọn đầu tiên là NULL nên khi không có lựa chọn nào được thực hiện, NULL được nhập khi biểu mẫu được gửi đến cơ sở dữ liệu.

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

Điều này có thể không? Hoặc ai đó có thể đề xuất một cách dễ dàng hơn/tốt hơn để làm điều này?

Cảm ơn

Cập nhật: Cảm ơn câu trả lời, tôi đang sử dụng phương pháp trình bày chi tiết dưới đây để chuyển đổi nó để NULL.

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

Tuy nhiên khi cố gắng sử dụng giá trị NULL này với truy vấn sau thì nó không hoạt động.

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

Tôi biết nó cần phải được location_id=NULL thay nhưng không biết làm thế nào để làm điều này ...

Cập nhật 2: đây là cách truy vấn của tôi làm việc:

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()); 

Trả lời

27

Không, Giá trị POST/GET không bao giờ là null. Điều tốt nhất họ có thể là một chuỗi rỗng, mà bạn có thể chuyển đổi thành null/'NULL'.

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

Thật sao? 'var_dump ($ _ GET ['missingKey']); // NULL' http://codepad.org/2s7jCBbc – AlienWebguy

+0

Cảm ơn lừa dối - Tôi đã sử dụng câu trả lời của bạn nhưng vẫn gặp sự cố khi tải đúng NULL - nếu bạn thấy tôi cập nhật. Bất kỳ ý tưởng? – Bernard

+0

@Alien Đó không phải là giá trị POST/GET, đó là giá trị * nonexistent *. – deceze

3

Tất cả những gì bạn cần là kiểm tra ở mặt sau của sự vật.

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

Cái đó nguy hiểm. Điều gì sẽ xảy ra nếu 'type_id = 0' là một ID hợp lệ? – AlienWebguy

+0

Đúng vậy. Trong thực tế, tôi sẽ đề xuất một cách tiếp cận khác nhưng thực tế nó rất có thể sẽ là quá phiền hà cho người hỏi câu hỏi. – Jason

0

Có, điều đó là có thể. Bạn phải làm điều gì đó như sau:

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

Kiểm tra nếu biến số $_POST['type_id'] có giá trị rỗng. Nếu có, nó gán NULL làm chuỗi. Nếu không, nó gán giá trị với 'cho nó cho ký hiệu SQL

+0

Lỗi cú pháp PHP: bất ngờ ']' dòng 3 – Jason

+0

thx, cho gợi ý. tôi đã sửa nó –

0

đó là lý do tại sao không giống như giá trị NULL trong cơ sở dữ liệu.
Tôi hy vọng bạn đang gặp vấn đề này vì lý do là .

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