【问题标题】:AJAX Contact Form is sending empty parameters?AJAX 联系表单发送空参数?
【发布时间】:2011-05-25 09:14:44
【问题描述】:

不是我想问的问题,但我真的需要另一双眼睛,因为它一定是我想念的一些愚蠢的东西。

我以前使用过相同的脚本,所以我不知道出了什么问题。

这是前端结束代码:http://jsfiddle.net/fU3Q3/1/

而后端PHP是:

<?php 
require("../db.php");

// get the posted values
$email=$_POST['email'];
$password=$_POST['password'];

// now validating the username and password
$sql="SELECT * FROM admin WHERE email='".$email."'";
$result=mysql_query($sql) or die ("No such username exists!");
$row=mysql_fetch_array($result);

// if username exists
if(mysql_num_rows($result)>0)
{
// compare the password
if(strcmp($row['password'],$password)==0)
{
    echo "yes";
    // set the session from here
    $_SESSION['email']=$email; 
}
else
    echo "no"; 
}
else
echo "no"; // invalid Login
?>

使用 firebug,发送到 ajax-login.php 的 url 似乎是 email=&amp;password=&amp;rand=0.636999888626322 显然最后的位是随机数。

非常感谢任何帮助。

马丁

【问题讨论】:

  • 另外:您忘记了数据库输入转义。
  • 这里还有一些您需要在生产前更改的内容。密码至少应该存储为哈希,你的会话应该被加密,会话也应该包含足够的信息来比较每个页面加载时的登录,以确保它们没有被劫持,你的 num_rows() 应该比较为 1 不 > 0 为唯一的电子邮件字段添加另一层强制执行(尽管这应该在很久以前在用户注册时进行检查)
  • 这仅适用于我正在修改的个人网站,但我同意将密码存储为 md5 和 &gt;0==1。我不确定你是如何加密会话的?

标签: php jquery post forms


【解决方案1】:
$.post("ajax-login.php",{ email:$("input#email").val(),password:$("input#password").val
(),rand:Math.random() } ,function(data)

您有 2 个相同类型的 id,一个电子邮件的 div id,一个电子邮件的输入 id,例如,您不能调用 #email,因为它会在第一次出现时停止

为了进一步解释...没有关联类名的 id 被认为是唯一的,但是如果您有,则只能使用 1 个 id:

<div class='content' id='email'>
<input class='content' id='email'>

您可以使用以下示例在 jquery 中调用它们:

正式声明,类型> classname '.' > id '#'

$("div.content#email");
$("input.content#email");

如果不匹配第一个标签,这将不起作用

$(".content#email");
$(".content#email");

【讨论】:

  • 啊,谢谢,我没有注意到具有相同 id 的 div ......我知道这会很愚蠢。非常感谢您的帮助。
【解决方案2】:

正如其他人所说,不要共享 id 并尝试以下操作:

替换:

{ email:$("#email").val(),password:$("#password").val(),rand:Math.random() }

$(this).parents("form").serialize()

http://jsfiddle.net/sjD9q/

【讨论】:

  • 谢谢,如果我更改它,我会得到missing : after property id,因为我试图将其更改为$('#login_form').serialize() 并得到同样的错误:(
【解决方案3】:

您的密码和电子邮件输入与包含它们的父 div 共享一个 ID,如果您更改 div id,那么表单应该可以工作。

注意:拥有多个同名 ID 是不好的做法,因为这会破坏许多浏览器中相关的 CSS 和 Javascript。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多