检查GET和SESSION是否有变量

时间:2015-02-02 20:56:32

标签: php session get session-variables

我试图找出为什么我的来自不保留变量。我整个下午一直在测试,没有运气。代码似乎是正确的,但我猜想必须关闭一些东西。

我会在编写代码时解释我的思考过程,然后我将在下面复制它。如果我编码/思考错误,请纠正我。

  1. 我从网址获得$ asset和$ serial。只有一个或那个会在那里。
  2. 我检查会话是否已启动
  3. 如果$ asset / $ serial不是空白(意味着在步骤1中找到了某些内容),我将$ asset / $ serial放入会话中。
  4. 如果会话中有$ asset或$ serial,我会将它们回显到各自的文本框。
  5. 我一直遇到的问题是,会话似乎只保存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>';
    

2 个答案:

答案 0 :(得分:0)

你必须使用这样的条件:

if(session_id() == '') {
    session_start();
}

另外,也许您的$ _GET变量未定义,所以请经常检查它们:

$asset = isset($_GET['asset'])? $_GET['asset'] : '';

答案 1 :(得分:0)

您正在使用非严格操作数验证数据。如果您在URL中没有资产,则您的$ asset将为null。使用代码:

//validates true in this scenario.
if($asset!=""){
    $_SESSION["asset"]=$asset; // $_SESSION["asset"] contains null.
}

而不是!= use!==检查空字符串。同时使用isset:

分配$ asset
//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