我正在学习Javascript和PHP,我正在尝试这样做, 我已经在PHP会话中存储了一些变量,我试图将会话中存在的值设置为表单输入字段中的值,我已经使用javascript来实现这一目的,
PHP:
<html>
<head>
<link rel='stylesheet' type='text/css' href='http://localhost/Matrix/frameCSS.css' />
<script lang='text/javascript' src='http://localhost/Matrix/gd.js'></script>
</head>
<body>
<?php
// ------- --------- -------- -------- ------
$debug=true;
dBug("Started Code Execution ... ");
function dBug($text)
{
global $debug;
if($debug) { echo "<p class='status'>debug : $text</p>"; }
else { return; }
}
// ------ ----------- ------------ -----------
$db = mysqli_connect("127.0.0.1","user","xyz","sample");
if(mysqli_connect_errno())
{
die(mysqli_connect_error());
}
session_start();
if($_SESSION['is_open']==true)
{
$username = $_SESSION['username'];
dBug('retreived username > '.$username);
}
?>
<table class="content">
<form method="POST" action="http://localhost/gen_det.php" onload="load_data()">
<tr>
<td>
Full Name :
</td>
<td>
<input type="text" class="txtbox" id='name'/>
</td>
</tr>
<tr>
<td>
Age :
</td>
<td>
<input type="text" class="txtbox" id='age' />
</td>
</tr>
<tr>
<td>
<p class='status' id='status'> </p>
</td>
</tr>
<tr>
<td colspan="2" align='center'>
<input type="submit" class="btn" onclick="return validateData();" value="save" />
<input type="button" class="btn" onclick="redirect()" value="cancel" />
</td>
</tr>
</form>
</table>
</body>
Javascript:
function load_data()
{
var name = document.getElementById('name');
var age = document.getElementById('age');
name.value = " <?php echo ''.$_SESSION['username']; ?> ";
age.value = " <?php echo ''.$_SESSION['username']; ?> ";
}
此页面实际上位于另一个页面中的iframe内(如果这很重要)。当我打开此页面时,它会打开,但文本字段中的值不会填充。我做错了什么?
答案 0 :(得分:2)
您的<form>
代码无法拥有 onload 属性。这根本不可能。
尝试将 onload 事件分配给<body>
元素:
<body onload="load_data();">
更好的解决方案是直接在JavaScript代码中注册事件:
window.addEventListener("load", load_data);
答案 1 :(得分:2)
首先,您错误地插入了PHP数据。您可以通过直接将任意PHP值转储到JS上下文中来轻松生成JS语法错误。您应该始终使用json_encode()来生成有效的JS文本:
name.value = <?php echo json_encode($_SESSION'username']); ?>;
json编码将处理任何必要的引用/转义。
您没有提及此JS如何包含在您的网站中。如果它在(比方说)外部.js文件中,那么默认情况下该文件不会通过PHP解释器传递,并且您将向浏览器发送原始未执行的PHP代码,JS将在其中看到它解析器并作为彻底的语法错误而被拒绝。这会杀死整个脚本块,你的JS代码就会在那里死掉。
如果它以某种方式被服务器解析/执行,那么你应该直接用你的浏览器点击那个JS脚本文件,看看输出的是什么。可能存在导致JS忽略整个脚本的其他结构问题。
答案 2 :(得分:2)
这是方法
<body onload="javascript: load_data('<?php echo $_SESSION['name']; ?>', '<?php echo $_SESSION['age']; ?>') >
在JS文件中,您可以定义函数
function load_data(param_name, param_age)
{
var name = document.getElementById('name');
var age = document.getElementById('age');
name.value = param_name;
age.value = param_age;
}
答案 3 :(得分:1)
如果您已经拥有PHP变量中的数据值,则可以使用已包含的值构建所需的input元素
<input type="hidden" id="foo" name="foo" value="<?php echo $_SESSION['foo']; ?>"/>
当你的事件(点击/提交)触发时,目标元素将包含值
foo = document.getElementById('foo');
console.log(foo.value);
答案 4 :(得分:1)
很简单,当网页加载时,加载顺序如下:
HTML-&GT; CSS-&GT; Javascript成为&GT; PHP
因此,如果你想在js文件中获取该变量,你必须这样做......
<html>
<head>
<link rel='stylesheet' type='text/css' href='http://localhost/Matrix/frameCSS.css' />
<script lang='text/javascript' src='http://localhost/Matrix/gd.js'></script>
<script>
function load_data()
{
var name = document.getElementById('name');
var age = document.getElementById('age');
name.value = "<?php echo ''.$_SESSION['username']; ?>";
age.value = "<?php echo ''.$_SESSION['username']; ?>";
}
</script>
</head>
<body>
...
</body>
</html>