检查变量的 GET 和 SESSION
Check both GET and SESSION for a variable
我想弄清楚为什么我的 from 没有保留变量。我整个下午都在测试这个,但没有运气。代码似乎是正确的,但我猜一定是有什么问题。
我会把我写代码时的思考过程说明一下,然后复制在下面。如果我coding/thinking不正确,请纠正我。
- 我从 url 获得 $asset 和 $serial。只有一个或另一个会在那里。
- 我检查会话是否已经开始
- 如果 $asset/$serial 不为空(意味着在步骤 1 中找到了一些东西)我将 $asset/$serial 放入会话中。
- 如果会话中有 $asset 或 $serial,我会将它们回显到各自的文本框。
我 运行 遇到的问题是会话似乎只保存 url 中当前的任何变量。我需要将它们保存在会话中,因为 zxing 条形码扫描器一次只能发送一个变量。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<?
//Get Asset/serial tags
$asset = $_GET['asset'];
$serial = $_GET['serial'];
if(isset($_SESSION)){
//session not started
session_start();
}
if($asset!=""){
$_SESSION["asset"]=$asset;
} elseif($serial!=""){
$_SESSION["serial"]=$serial;
}
echo'
<div data-role="page">
<div data-role="main" class="ui-content">
<form method="post" action="addComputer.php" name="newComputerForm">
<label for="asset">Asset Number:</label>
<input type="text" name="asset" id="asset" value="'.$_SESSION["asset"].'">
<a href="zxing://scan/?ret=http://example.com/jquerytest.php?asset=%7BCODE%7D">Scan an Asset</a>
<label for="serial">Serial Number:</label>
<input type="text" name="serial" id="serial" value="'.$_SESSION["serial"].'">
<a href="zxing://scan/?ret=http://example.com/jquerytest.php?serial=%7BCODE%7D">Scan a Serial</a>
</form>
</div>
</div>
</body>
</html>';
你必须使用这样的条件:
if(session_id() == '') {
session_start();
}
此外,也许您的 $_GET 变量未定义,因此请务必检查它们:
$asset = isset($_GET['asset'])? $_GET['asset'] : '';
您正在使用非严格操作数验证您的数据。如果您在 URL 中没有资产,您的 $asset 将为空。使用代码:
//validates true in this scenario.
if($asset!=""){
$_SESSION["asset"]=$asset; // $_SESSION["asset"] contains null.
}
代替 != 使用 !== 来检查空字符串。同时为 $asset 分配 isset:
//Get Asset/serial tags
$asset = isset($_GET['asset']) ? $_GET['asset'] : null;
$serial = isset($_GET['serial']) ? $_GET['serial'] : null;
//check session started. using the comment of Yair.R
if(session_id() == ''){
//session not started
session_start();session_id()
}
if($asset !== null){
$_SESSION["asset"]=$asset;
} elseif($serial !== null){
$_SESSION["serial"]=$serial;
}
有关严格操作数的更多信息:PHP: Comparison Operators
我想弄清楚为什么我的 from 没有保留变量。我整个下午都在测试这个,但没有运气。代码似乎是正确的,但我猜一定是有什么问题。
我会把我写代码时的思考过程说明一下,然后复制在下面。如果我coding/thinking不正确,请纠正我。
- 我从 url 获得 $asset 和 $serial。只有一个或另一个会在那里。
- 我检查会话是否已经开始
- 如果 $asset/$serial 不为空(意味着在步骤 1 中找到了一些东西)我将 $asset/$serial 放入会话中。
- 如果会话中有 $asset 或 $serial,我会将它们回显到各自的文本框。
我 运行 遇到的问题是会话似乎只保存 url 中当前的任何变量。我需要将它们保存在会话中,因为 zxing 条形码扫描器一次只能发送一个变量。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<?
//Get Asset/serial tags
$asset = $_GET['asset'];
$serial = $_GET['serial'];
if(isset($_SESSION)){
//session not started
session_start();
}
if($asset!=""){
$_SESSION["asset"]=$asset;
} elseif($serial!=""){
$_SESSION["serial"]=$serial;
}
echo'
<div data-role="page">
<div data-role="main" class="ui-content">
<form method="post" action="addComputer.php" name="newComputerForm">
<label for="asset">Asset Number:</label>
<input type="text" name="asset" id="asset" value="'.$_SESSION["asset"].'">
<a href="zxing://scan/?ret=http://example.com/jquerytest.php?asset=%7BCODE%7D">Scan an Asset</a>
<label for="serial">Serial Number:</label>
<input type="text" name="serial" id="serial" value="'.$_SESSION["serial"].'">
<a href="zxing://scan/?ret=http://example.com/jquerytest.php?serial=%7BCODE%7D">Scan a Serial</a>
</form>
</div>
</div>
</body>
</html>';
你必须使用这样的条件:
if(session_id() == '') {
session_start();
}
此外,也许您的 $_GET 变量未定义,因此请务必检查它们:
$asset = isset($_GET['asset'])? $_GET['asset'] : '';
您正在使用非严格操作数验证您的数据。如果您在 URL 中没有资产,您的 $asset 将为空。使用代码:
//validates true in this scenario.
if($asset!=""){
$_SESSION["asset"]=$asset; // $_SESSION["asset"] contains null.
}
代替 != 使用 !== 来检查空字符串。同时为 $asset 分配 isset:
//Get Asset/serial tags
$asset = isset($_GET['asset']) ? $_GET['asset'] : null;
$serial = isset($_GET['serial']) ? $_GET['serial'] : null;
//check session started. using the comment of Yair.R
if(session_id() == ''){
//session not started
session_start();session_id()
}
if($asset !== null){
$_SESSION["asset"]=$asset;
} elseif($serial !== null){
$_SESSION["serial"]=$serial;
}
有关严格操作数的更多信息:PHP: Comparison Operators