【问题标题】:Passing HTML5 Local Storage Value to PHP error [duplicate]将 HTML5 本地存储值传递给 PHP 错误 [重复]
【发布时间】:2014-05-01 20:15:36
【问题描述】:

我正在使用 html5 本地存储,我正在尝试读取它并将其传递给 php 变量:

这是代码:

$myphpvar = "<script>document.write(localStorage.getItem('myjsvar'));</script>"; 

当我这样做时:

echo $myphpvar;

值看起来正确(在视觉上离开)

到目前为止,一切看起来都不错,但是当我添加此代码时:

$sql="INSERT INTO `pending` (`id`, `myfield`) VALUES ('', '$myphpvar')";

然后我得到这个错误:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 .. 附近使用的正确语法。

这里的错误点:

$myphpvar = "<script>document.write(localStorage.getItem('myjsvar'));</script>";

有什么想法吗?

【问题讨论】:

  • 有区别......当我回显变量时,我可以看到它在 PHP 中,所以它已经通过了。
  • 不,当您回显变量时,您正在回显 JS。 当它到达浏览器时,JS运行并更改文档,以便您可以看到变量的内容。
  • 这个问题似乎跑题了,因为它反映了对 PHP 和 JavaScript 之间关系的如此深刻的误解。

标签: javascript php local-storage


【解决方案1】:

更新:

这不起作用,因为:

$myphpvar = "<script>document.write(localStorage.getItem('myjsvar'));</script>"; 

现在你的 PHP $myphpvar 变量包含:

  <script>document.write(localStorage.getItem('myjsvar'));</script>

当你 echo 时,就像这样:

echo "<script>document.write(localStorage.getItem('myjsvar'));</script>"

所以这将显示您的 Js 变量,因为它在您的浏览器上运行。

但是当您在 SQL 中执行此操作时:它看起来像下面这样:

$sql="INSERT INTO `pending` (`id`, `myfield`) VALUES ('', '<script>document.write(localStorage.getItem('myjsvar'));</script>')";

为了实现这一目标,您必须将您的localStorage 值传递给URL,并在PHP 上获取它或使用AJAX 发布!

window.location.href = window.location.href+"?local="+localStorage.getItem('myjsvar'));

【讨论】:

    【解决方案2】:

    您不应该这样做,因为 PHP 在服务器端工作,而 html5 在客户端工作。 你当然应该使用带有 ajax 的 js。

    【讨论】:

      【解决方案3】:

      php 是一种后端编程语言。它与您的服务器通信并编译代码。 localstorage 是在用户浏览器上工作的前端对象。您无法将该值作为 php 变量获取。

      不过有个线索,你可以把它作为隐藏输入放在一个表单上,并模拟表单发布。在提交帖子时,您可以将该值作为表单数据或查询字符串发送。所以你可以从那里得到它。

      以你的方式,这是不可能的。

      【讨论】:

        【解决方案4】:

        我认为您的 SQL 查询可能有问题。

        尝试将其更改为:

        $sql="INSERT INTO `pending` (`id`, `myfield`) VALUES ('', '{$myphpvar}')";
        

        【讨论】:

        • @Satch3000 我认为问题可能出在语法上。您正在尝试将 HTML5 localtorage 字符串放入 SQL 查询中。可能有一些字符会破坏 SQL 查询。最好的办法是在屏幕上显示 localstorage 结果,然后手动将带有 localstorage 字符串的 SQL 查询输入到数据库的 SQL 行中。这样你就可以看到 SQL 是否没有被实现的字符串破坏。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多