[英]POST isset but not echo'ing out
我有一個表單發布到頁面,我有一個奇怪的問題從POST
數據獲取值。 正如您所看到的,我可以在運行條件之前fb_id_form
是否全部設置了image_id
, vote
和fb_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有點不同。 首先,最明顯的是,它以相反的isset方式工作,但除此之外,還有很多其他功能。 對於PLUS,對於一個空集將返回false,它將返回true,對於空字符串,空數組,字符串“0”,數字0或false,它也將返回true。
您將獲得這些結果,因為即使存儲在變量中的唯一內容是空字符串, isset()
也會返回true。 您的結果可能未被存儲。 這可能是由於您的表單可能具有還原頁面的操作,該頁面清空了將變量留空字符串的字段? 我們必須看到你的HTML代碼才能給出更全面的答案......
從手冊 :
isset —確定是否設置了變量並且不為NULL
如果變量為""
, 0
, false
等,則表示它將返回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.