看不到 php 变量的值
Can not see the value of php variable
我有一个 php 文件,单击按钮时从该文件运行 save_match()
:
function save_match() {
...
$.post('url2', {elements: elements});
...
}
并运行另一个 php 文件,其中包含:
<?php
$tok = 1024;
if($_POST['elements'])
{
echo '<script>foo("'.$tok.'") </script>';
...
?>
<html>
<body>
<script type="text/javascript">
function foo(p1) {
//alert(p1);
document.write("|"+p1+"|");
}
</script>
</body>
</html>
我之所以这样做,是因为 echo
我什么都看不到。好吧,现在我看到了更多东西。
我也在新标签页中打开了 url2
。但是,在我按下 url1 中的按钮并转到第二个 url 的选项卡后,没有任何变化。我刷新了,还是没有任何变化!
我能做什么?我需要这个来调试。
您可以通过以下方式查看令牌的价值。
- 从您的 php 文件中删除所有 html 标签,因为它们不是必需的。
- 删除函数 foo。和脚本
将您的代码更改为以下内容。
<?php
if (isset($_POST['elements'] && $_POST['elements']))
echo $tok;
.....
将您的 javascript 更新为:
function save_match() {
...
$.post('url2', {elements: elements}, function($token) {
console.log($token); // will print your token in javascript console
});
...
}
<html>
<body>
<?php
$tok = 1024;
if(isset($_POST['elements']))
{
echo $tok;
}
?>
</body>
</html>
这应该有效。确保设置了 doctype 和所有其他内容,并且还设置了 POST 中的变量元素。也许 if 函数总是失败,因为没有设置元素。
对于您正在尝试做的事情,您并不需要 javascript。
等待异步操作的函数示例:
function save_match(){
var somethingToReturn, pushTo = [];
$.post('url2.php', {saveMatch:1, simple:'column_value_here', anotherProp:'Example'}, function(phpComesBackHere){
$.each(phpComesBackHere, function(i, o){
pushTo.push(o.object_property);
});
somethingToReturn = pushTo;
});
while(1){
if(somethingToReturn){
return somethingToReturn;
}
}
}
在 url2.php 上喜欢:
<?php
include 'secure_database_connection.php'; $db = db(); // function db is returning `new mysqli('host', 'username', 'password', 'database');`
if(isset($_POST['saveMatch'])){
if(+$_POST['saveMatch'] === 1){
if(isset($_POST['simple'], $_POST['anotherProp'])){
if($qry = $db->query("SELECT * FROM table_name WHERE column={$_POST['simple']}")){
if($qry->num_rows > 0){
while($r = $qry->fetch_object()){
$returnArray[] = array('object_property' => $r->your_property_here, 'anotherProp' => $r->and_another_property);
}
echo json_encode($returnArray);
}
$qry->free();
}
}
else{
// simple and/or anotherProp hack
}
}
else{
// saveMatch hack
}
}
elseif(isset($_POST['somethingElse'])){
// this could be separate $.post on same page
}
$db->close();
?>
我有一个 php 文件,单击按钮时从该文件运行 save_match()
:
function save_match() {
...
$.post('url2', {elements: elements});
...
}
并运行另一个 php 文件,其中包含:
<?php
$tok = 1024;
if($_POST['elements'])
{
echo '<script>foo("'.$tok.'") </script>';
...
?>
<html>
<body>
<script type="text/javascript">
function foo(p1) {
//alert(p1);
document.write("|"+p1+"|");
}
</script>
</body>
</html>
我之所以这样做,是因为 echo
我什么都看不到。好吧,现在我看到了更多东西。
我也在新标签页中打开了 url2
。但是,在我按下 url1 中的按钮并转到第二个 url 的选项卡后,没有任何变化。我刷新了,还是没有任何变化!
我能做什么?我需要这个来调试。
您可以通过以下方式查看令牌的价值。
- 从您的 php 文件中删除所有 html 标签,因为它们不是必需的。
- 删除函数 foo。和脚本
将您的代码更改为以下内容。
<?php if (isset($_POST['elements'] && $_POST['elements'])) echo $tok; .....
将您的 javascript 更新为:
function save_match() { ... $.post('url2', {elements: elements}, function($token) { console.log($token); // will print your token in javascript console }); ... }
<html>
<body>
<?php
$tok = 1024;
if(isset($_POST['elements']))
{
echo $tok;
}
?>
</body>
</html>
这应该有效。确保设置了 doctype 和所有其他内容,并且还设置了 POST 中的变量元素。也许 if 函数总是失败,因为没有设置元素。
对于您正在尝试做的事情,您并不需要 javascript。
等待异步操作的函数示例:
function save_match(){
var somethingToReturn, pushTo = [];
$.post('url2.php', {saveMatch:1, simple:'column_value_here', anotherProp:'Example'}, function(phpComesBackHere){
$.each(phpComesBackHere, function(i, o){
pushTo.push(o.object_property);
});
somethingToReturn = pushTo;
});
while(1){
if(somethingToReturn){
return somethingToReturn;
}
}
}
在 url2.php 上喜欢:
<?php
include 'secure_database_connection.php'; $db = db(); // function db is returning `new mysqli('host', 'username', 'password', 'database');`
if(isset($_POST['saveMatch'])){
if(+$_POST['saveMatch'] === 1){
if(isset($_POST['simple'], $_POST['anotherProp'])){
if($qry = $db->query("SELECT * FROM table_name WHERE column={$_POST['simple']}")){
if($qry->num_rows > 0){
while($r = $qry->fetch_object()){
$returnArray[] = array('object_property' => $r->your_property_here, 'anotherProp' => $r->and_another_property);
}
echo json_encode($returnArray);
}
$qry->free();
}
}
else{
// simple and/or anotherProp hack
}
}
else{
// saveMatch hack
}
}
elseif(isset($_POST['somethingElse'])){
// this could be separate $.post on same page
}
$db->close();
?>