2012-08-22 148 views
1

我有一个会话变量,当用户提交表单时选择了某个选项时设置。当页面刷新时,我需要测试这个会话变量,如果它存在,那么使某些表单只能读取。这是到目前为止我的代码,PHP:使用Jquery在页面加载时测试php会话变量

<?php 
require("header.php"); 

if(isset($_REQUEST['searching'])){ //check if form has been submitted 

echo"<h2>Submitted</H2><p>"; 
    connect('final');//connect to DB 

    $fName = $_POST['addFname']; 
    $lName = $_POST['addLname']; 
    $address = $_POST['address'] 

    $dropdown = $_POST['field']; // yes or no option 

    $fName = htmlspecialchars($fName); 
    $fName = mysql_real_escape_string($fName); 
    $lName = htmlspecialchars($lName); 
    $lName = mysql_real_escape_string($lName); 
    $address = htmlspecialchars($line2); // stop HTML characters 
    $address = mysql_real_escape_string($line2); //stop SQL injection 


if($dropdown== "no"){ 
    $_SESSION['name'] = "$fName";  
}  
?> 

“场”是我的下拉名与两个选项是和否。

MY JS用于获取变量:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script type = "text/javascript"> 
var session; 
function multi(){ 
    $.ajaxSetup({cache: false}) 
    $.get('getSession.php', {requested: 'foo'}, function (data) { 
     session = data; 
}); 
} 
</script> 

我用它来获取从会话变量,getSession.php有以下几点:

<?php 
session_start(); 
if (isset($_GET['name'])) { 
    // return requested value 
    print $_SESSION[$_GET['name']]; 
} else { 
    print json_encode($_SESSION); 
} 
?> 

终于我有这个功能禁用文本字段

<script language="JavaScript"> 
<!-- 
function enable_text2() 
{ 
if (session !=""){ 
status = "true"; 
document.add.addFname.readonly=readonly; 
document.add.addLname.readonly=readonly; 
} 
} 
//--> 
</script> 

我的HTML的其余部分只是一种形式,这是所有在一个做用顶部的php代码表示,头部标记中的javascript函数。

我在body onload标签中调用了一个包装函数,然后调用了这两个函数,我认为如果第一个函数存在于php文档中,它会得到会话变量,然后第二个函数会测试它是否为不是空的,如果不是那么它会使字段只读。

但是,当我在下拉列表中选择“否”并提交表单时,页面刷新并且没有任何反应,这些字段不是只读的。

+1

它可能无法帮助回答你的问题,但你应该停止使用'mysql_ *'功能。他们正在被弃用。请使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不确定使用哪一个,[阅读本文](http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/)。 – Matt

回答

2

为什么你正在使用JavaScript?

session_start(); 
if (isset($_GET['name'])) { 
    $disable=true; 
} else { 
    $disable=false; 
} 



<input type="text" name="addFname" <?php if($disable) { ?> readonly="readonly" <?php } ?> 

在这里,我已经采取了“addFname”。您可以禁用任何元素的PHP内如果条件

2

假设PHP正在生成你已经有这个“必须禁用”的页面,那么就不需要ajax调用 - PHP可以在构建页面时输出一个JS变量,例如,

<script type="text/javascsript"> 
var disableForm = <?php echo (($_SESSION['somevar'] == 'whatever' ? 'true' : 'false') ?>; 
if (disableForm) { 
    ... 
} 
</script> 
+0

打败我。是的,你可以简单地在JS块中注入PHP代码。 – khaverim