2013-03-25 142 views
-1

我正在通过jQuery $.post函数调用一个使用外部php脚本(do.php,say)的php(index.php,say)编写一个页面。无法通过jQuery从外部php脚本访问php cookie

我传递一个名为doit的post变量,它决定脚本将执行的操作。例如,如果doit为1,它将为用户分配一个唯一的ID并将其存储在一个名为uid的cookie中,并使用setcookie()函数。如果doit为2,则它将另一个称为msg的发布数据输入到表中,它通过名称t + uid创建。例如。如果uid是14,它将创建一个名为t14的表并将msg放入其中。

我用下面的代码行设置cookie:

setcookie("uid", $val, time()+3600, '/'); 

而此行的代码来创建表:

$q = "create table t".$_COOKIE["uid"]." (sl int primary key auto_increment, msg varchar(1000), seen int);"; 
mysql_query($q); 

现在我的问题是这样的: SQL查询正确执行,但我没有从cookie变量中获得任何价值。创建的表格简单地命名为t。

我的问题是: 我在做什么错?我应该怎么做才能正确地获得一个值?

P.S:当我检查我的页面设置的cookie时,我在那里看到cookie。我尝试清除cookie并再次尝试,但每次cookie都设置正确,但不是表格。

还有另一个问题。 sql查询只有在我刷新页面后才会执行。例如,我有另一个名为uu的表,其中存储当前用户的uid和其他信息。该表中的最后一行包含前面的uid,而不是现在的那个。如果uid这次是10,并且我刷新页面并将uid设置为11,那么uid = 10的信息会在表uu中更新。

任何帮助都非常感谢:-)谢谢。

+2

您正在使用[an **过时的**数据库API](http://stackoverflow.com/q/12859942/19068)并应使用[现代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻击](http://bobby-tables.com/)**,现代的API会使[防御]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己从。 – Quentin 2013-03-25 14:18:21

+2

这里有很多问题,但为什么要为每个用户创建一个新表?更糟糕的是,这是从一个可操作性很大的cookie设置的。最好有一个带有用户标识,消息标识,消息文本,时间戳等字段的“消息”表。另外,您不能将POST存储在cookie中吗?一切取决于你的应用程序设计,但听起来像需要一些更多的想法 – okyanet 2013-03-25 14:29:40

+0

我知道这些漏洞。重点不在于构建完善而安全的网站,而是要学习mySQL和PHP的基础知识。我是这两个人的小白菜。无论如何感谢信息;我会记住:-) @Quentin。 – rktcool 2013-03-26 16:58:51

回答

0

PHP的setcookie函数在响应头中发送cookie。如果您的AJAX调用在您收到来自index.php的响应之前执行,那么您可能无法在请求中获取cookie。

您可以尝试将$ .post请求放在按钮/链接点击上,并检查您是否在请求中获取了cookie。如果可能,请提供完整的代码(PHP和JavaScript)

+0

我在'$(document).ready()'中放置了发布请求。那么不应该确保AJAX调用在页面准备好后(即在响应头和东西之后)执行吗? – rktcool 2013-03-26 17:05:07