簡體   English   中英

POST雖然但沒有回應

[英]POST isset but not echo'ing out

我有一個表單發布到頁面,我有一個奇怪的問題從POST數據獲取值。 正如您所看到的,我可以在運行條件之前fb_id_form是否全部設置了image_idvotefb_id_form

javascript警報運行,因此我知道已設置了三個變量。 但我得到的是令人困惑的。 我得到第一個警告窗口,顯示“已工作”。 然后,我得到兩個空白的警報窗口。 如果我嘗試提醒他們, fb_id_form如何“設置”(通過條件)但沒有價值?

if(isset($_POST['image_id']) && isset($_POST['vote']) && isset($_POST['fb_id_form'])){
    $image_id = $mysqli->real_escape_string($_POST['image_id']);
    $vote = $mysqli->real_escape_string($_POST['vote']);
    $fb_id_form = $mysqli->real_escape_string($_POST['fb_id_form']);
    echo "<script>alert('worked');</script>";
    echo "<script>alert('".$fb_id_form."');</script>";
    echo "<script>alert('".$_POST['fb_id_form']."');</script>";
}

這是表單數據(在同一頁面上):

echo "<form method=\"post\" action=\"\">
<input type=\"hidden\" name=\"image_id\" value=\"".$id."\" />
<input type=\"hidden\" name=\"vote\" value=\"1\" />
<input type=\"hidden\" name=\"fb_id_form\" value\"".$fb_id."\" />
<input type=\"submit\" name=\"submitvote\" value=\"Vote\" />
</form>";

這是問題所在。 我已經在表單之前回顯了$ fb_id RIGHT的警報,它為我提供了正確的值。 當我提交它時,我想價值會丟失。

因為$_POST['fb_id_form']包含空字符串,所以isset仍然是真的。 你想用empty()

isset vs空鏈接

空與isset有點不同。 首先,最明顯的是,它以相反的isset方式工作,但除此之外,還有很多其他功能。 對於PLUS,對於一個空集將返回false,它將返回true,對於空字符串,空數組,字符串“0”,數字0或false,它也將返回true。

設置變量( isset()為true),而不是NULL。 這意味着,包含空字符串(“”)的變量實際上,設置。 文檔

要檢查變量是否為空,請使用empty() ,或使用$mystr === ""檢查。

您將獲得這些結果,因為即使存儲在變量中的唯一內容是空字符串, isset()也會返回true。 您的結果可能未被存儲。 這可能是由於您的表單可能具有還原頁面的操作,該頁面清空了將變量留空字符串的字段? 我們必須看到你的HTML代碼才能給出更全面的答案......

從手冊

isset —確定是否設置了變量並且不為NULL

如果變量為""0false等,則表示它將返回false。在您的示例中,通過發布此數據很容易繞過您的健全性檢查

image_id=&vote=&fb_id_form=

您需要額外的數據驗證,並且可以使用PHP過濾器功能 檢查$_POST包含三個參數的示例代碼,它們是整數:

$params = filter_input_array(INPUT_POST, array(
'image_id'   => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'vote'       => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'fb_id_form' => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL))
));

例如,有人將此數據發布到您的網頁:

image_id=&vote=hello+world&fb_id_form=12345

然后上面的代碼將返回:

array(3) {
  ["image_id"]=>
  NULL
  ["vote"]=>
  NULL
  ["fb_id_form"]=>
  int(12345)
}

PS: mysqli->real_escape_string不驗證您的數據。

我認為這與分隔前后的單引號有關。

echo "<script>alert(".$fb_id_form.");</script>";

echo "<script>alert(".$_POST['fb_id_form'].");</script>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM