2016-02-28 65 views
0
<form action="hi.php" method="post"> 
    <input type="text" name="id" /> 
    <input type="hidden" name="name" value="name" /> 
</form> 

我發送此輸入沒有值。我想更新id列爲NULL更新爲NULL Mysql

$id = $_POST['id']; 
$name = $_POST['name']; 

$mysqli->query("UPDATE table SET id=$id WHERE name='$name'); 

但是,它更新爲空而不是NULL。我如何在$id中插入NULL?

如果我發送一個值爲<input name="id">,它會正確更新它。但是,如果我發送它爲空,列變空,我想它爲NULL

+0

我只是寫它基本上是這樣。我知道表單必須具有'action'和'method'屬性 –

+1

而且沒有WHERE子句也是由於「我剛剛寫了基本的」? – VolkerK

+0

@VolkerK現在可以嗎? –

回答

0

我建議你使用PDO,而不是mysql的(),但是這會給你的想法:

$id = $_POST['id']; 

if($id==''){ 
    $id='NULL'; 
} 
else{ 
    $id = mysql_real_escape_string($id); 
} 

$qr = 'Update table SET id='.$id; 
mysql_query($qr); 
+0

他在第一行寫道:))$ id = $ _POST ['id'];在那裏我把它..最後的問題不是關於那個,關於如何處理NULL,我給他的解決方案。 –

+0

definetelly isset()預檢查。在整個POST或GET過程中,我通常使用trim和mysql_real_escape_string來運行array_map(),如果我不使用PDO –

1

當使用prepared statements和參數,在參數之一NULL值也將被視爲NULL由MySQL服務器。
HTTP參數作爲字符串傳輸。如果沒有給出輸入控件的值,那麼鍵/值對的值將是一個空字符串(!= NULL)。但是你的腳本中仍然可以有像if(emptystring) use NULL這樣的提示。

例如

<?php 
// only for this example; otherwise leave _POST alone.... 
$_POST['id'] = 1; 
$_POST['name'] = ''; 
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test'); 
if ($mysqli->connect_errno) { 
    trigger_error(sprintf('mysqli connect error (%d) %s', $mysqli->connect_errno, $mysqli->connect_error), E_USER_ERROR); 
    die; 
} 
mysqli_report(MYSQLI_REPORT_STRICT|MYSQLI_REPORT_ALL); // that's all the "error handling" for this example.... 
setup($mysqli); 

// even if the user didn't fill in any value, the parameters should be in the request 
// as empty strings 
if (!isset($_POST['name'], $_POST['id'])) { 
    echo 'missing POST paramete'; 
} 
else { 
    // <-- maybe some plausiblity checks here anyway; e.g. some assumptions about the id you can test, leaving it out as optional for now ---> 

    // decision point: applying trim() to _POST[name] and _then_ consider it NULL or not - you might disagree about the specifics, just an example. 
    $name = trim($_POST['name']); 
    if (0===strlen($name)) { 
     $name = NULL; 
    } 

    // <-- actually it would suffice to establish the databse connection here.... 
    $stmt = $mysqli->prepare('UPDATE soFoo set name=? WHERE id=?'); 
    $stmt->bind_param('ss', $name, $_POST['id']); 
    $stmt->execute(); 

    printTable($mysqli); 
} 

function printTable($mysqli) { 
    $result = $mysqli->query('SELECT * FROM soFoo ORDER BY id'); 
    foreach($result as $row) { 
     var_export($row); echo "\r\n"; 
    } 
} 

function setup($mysqli) { 
    $mysqli->query('CREATE TEMPORARY TABLE soFoo (id int, name varchar(32), primary key(id))'); 
    $mysqli->query("INSERT INTO soFoo (id,name) VALUES(1,'oldname1'),(2,'oldname2')"); 
} 

打印

array (
    'id' => '1', 
    'name' => NULL, 
) 
array (
    'id' => '2', 
    'name' => 'oldname2', 
)