2012-05-17 53 views
1

我有一个php脚本,它正在编辑mysql表中的记录。通过传递记录号码来刷新使用javascript的页面时遇到问题。下面从php脚本问题调用javascript

PL检查是我的PHP脚本的几行:

if ($mode == "edit") 
{ 
$ids=$_POST[prs_rid]; 
$edt1=mysql_query("SELECT * FROM ECRDTL_edit WHERE id='$ids'"); 
$edt2=mysql_fetch_assoc($edt1); 

echo "<script>var x=document.getElementById('prs_rid').value</script>"; 
    echo "<script> alert (x);</script>"; 
echo "<script>document.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 
} 

我已经使用警告一下变数“x”是获取记录值或没有,这工作正常。但是当我在下一行使用相同的内容时,它不会在我的php的编辑模式下显示相同的记录。

但如果我把这样的浏览器的地址栏中同一行,它工作正常: http://www.mydomain.com/ecr-detail-edit.php?prs_mode=edit&prs_id=27

请检查可能是什么问题,或者是有提神传递记录页面的任何其他方式数。

+1

备注:请务必清理用户输入。目前,您基本上将POST变量插入到MySQL查询中。你也可以向公众发布你的数据库用户名和密码!看看[mysql_real_escape_string](http://php.net/manual/en/function.mysql-real-escape-string.php)。 –

+0

检查我的答案,你有几个错误,我已经修复它。 –

回答

0

当分配到相对URL的不工作location.href,它应该是绝对的或完全合格的。

在你的情况,绝对会做:

location.href = location.pathname + '?prs_mode=edit&prs_id=' + 
    encodeURIComponent(x) 

location.pathname给出了路径(以/)到查询分离器(问号)。

我也加了encodeURIComponent(x)以确保x的值在必要时可以正确转义。

实施

echo "<script>location.href = location.pathname + '?prs_mode=edit&prs_id=' + encodeURIComponent(x);</script>"; 
+0

千斤顶你的代码上面不是很清楚的实现,请给出一个精确的代码来实现,这将有所帮助。 – user1114409

+0

@ user1114409更新了答案 –

+0

非常感谢你,这工作正常。 – user1114409

0
document.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 

应该

location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 

,你也应该使用mysql_real_escape_string()逃脱恶意数据的用户可以上传递给您的脚本。

因此改变

$ids = $_POST['prs_rid']; 

$ids = mysql_real_escape_string($_POST[prs_rid]); 

你缺少脚本类型,当你想使用JavaScript,你需要告诉该声明的代码浏览器的JavaScript,你需要改变

<script> 

<script type="text/javascript"> 

您在POST数据中缺少单引号。在下面添加单引号。

$ids = $_POST['prs_rid']; 

最后一件事是我永远不会输出javascript的PHP。最好让JavaScript和PHP保持不同。例如你的上面的代码可以更改为。

<?php 
if ($mode == "edit"): 
    $ids = mysql_real_escape_string($_POST['prs_rid']); 
    $result = mysql_query("SELECT * FROM ECRDTL_edit WHERE id='$ids'") or die(mysql_error()); 
    $row = mysql_fetch_assoc($result); 
?> 
<script type="text/javascript"> 
    var x = document.getElementById('prs_rid').value 
    alert(x); 
    location.href = 'ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 
</script> 
<?php endif; ?> 
+0

没有事件,这不起作用,效果是一样的。我已根据您的线路进行了更改。 – user1114409

+0

您正在使用哪个浏览器,如果您使用的是谷歌浏览器,请启动开发者控制台并检查是否有任何javascript错误。确保你的html代码放在你的html代码之后,否则会给你HTML dom错误。 –

+0

即使这没有帮助,警报显示正确的记录号,但问题仍然在下一行。 – user1114409

0

问题是window.location需要一个绝对的http:// URL。使用以下代码:

window.location=window.location=location.protocol+'//'+location.host+location.pathname+"?get_variables_here"; 
+0

你给出的代码不是很清楚。你能否更精确地为我实施? – user1114409

0

只需使用它(如在MDN window.location指定)location.href对象所属的window对象,而不是document

所以,你的代码最后一行应该象:

echo "<script>location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 

在另一方面,你使用脚本标记将得到更好的浏览器支持,<script type="text/javascript">

+0

事件不起作用。效果是相同的document.location.href或只是location.href,所以我还可以尝试什么。 – user1114409

0

试试这个..

echo "<script type='text/javascript'>window.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 
+0

如果你可以解释_为什么OP应该这样做,这个答案会好得多。 – Ben

0

对于此行成功执行,在PHP var x=document.getElementById('prs_rid').value的HTML DOM应先加载否则它会给出一个错误,这可能是这里的问题。