我正在嘗試將 URL 中列出的引數保存到我的變數中。您可以在此處查看程式:
<?php
$browser;
$version;
$page;
foreach($_GET as $key => $value) {
if (strcmp($key, "browser")) {
$browser = $value;
}
elseif (strcmp($key, "version")) {
$version = $value;
}
elseif (strcmp($key, "page")) {
$page = $value;
}
}
echo $browser;
echo $version;
echo $page;
?>
但不幸的是,它只列印出瀏覽器和版本。頁面不出現。是的,頁面引數肯定是寫在 URL 中的。如果我像這樣更改代碼,變數會正確列印出來:
<?php
foreach($_GET as $key => $value) {
if (strcmp($key, "browser")) {
echo $value;
}
elseif (strcmp($key, "version")) {
echo $value;
}
elseif (strcmp($key, "page")) {
echo $value;
}
}
?>
鏈接 shematik:./bglink/addstats.php?browser=Chrome&version=96&page=index
提前致謝。菲利普。
uj5u.com熱心網友回復:
strcmp 不會做你認為它會做的事情。
根據兩個字串的比較,它可以回傳 -1、0 或 1 ,而不是 true 或 false。你的回圈沒有找到相等的字串,它實際上會列印第一個$key 不等于你所詢問的字串的情況,因為 -1 和 1 都會評估為真。
使用一些額外的除錯輸出運行原始代碼表明您實際上正在用回圈中的其他元素覆寫變數:
Browser: my page
Version: my browser
Page:
見https://3v4l.org/QFSAl
uj5u.com熱心網友回復:
為什么不寫這樣的東西?
$browser = $_GET['browser'];
$version = $_GET['version'];
$page = $_GET['page'];
uj5u.com熱心網友回復:
安全的閱讀$_GET方式是使用filter_input()
$browser = filter_input(INPUT_GET, 'browser');
$version = filter_input(INPUT_GET, 'version');
$page = filter_input(INPUT_GET, 'page');
https://www.php.net/manual/en/function.filter-input.php
但隨著regurads到原來的問題,這個問題是(strcmp($key, "browser"))應該是(strcmp($key, "browser") == 0)其中0表示匹配。但如果沒有指定條件,if()則 0 將讀取 FALSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382385.html
