AJAX HTML PHP问题

Jor*_*rge -1 html php ajax

这是我的scripts.js

function showHint(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","inputProcess.php?q="+str,true);
xmlhttp.send();
}

这是我的HTML

<script type="text/javascript" src="scripts.js"></script>
<form>
  Type your name here : <input type="text" onkeypress="showHint(this.value)" name="name" />
</form>

这是我的PHP文件

<?php
$q = $_GET['q'];

$dbc=mysql_connect("localhost","root","") or die (mysql_error()); mysql_select_db('input_oop') or die (mysql_error()); $sql = "INSERT INTO users set name = '".$q."'"; mysql_query($sql) or die (mysql_error()); ?>

这是问题:当我在文本框中只键入一个值时,它将多次保存在我的数据库中.

EG:我输入"Jordan".当我签入我的数据库时,它显示为

userid 1 J
userid 2 Jo
userid 3 Jor
Run Code Online (Sandbox Code Playgroud)

等等

Mar*_*c B 5

即使你在那个盒子里做,也会为每个按键开启onkeypress.所以这是发生的事情:

  1. 你输入'j'
  2. 触发showHint(),将'j'发送到服务器
  3. 该脚本将'j'插入到用户表中
  4. 输入'o',文本字段中现在有'jo'
  5. showHint()被触发,将'jo'发送到服务器
  6. 该脚本将'jo'插入到用户表中
  7. 等等...

换句话说,您根本没有显示提示,只是盲目地将用户输入的内容插入到数据库中.

如果您想显示提示,那么您应该至少执行"SELECT"查询并将结果返回到您的页面.

您还应该使用MootoolsjQuery之类的东西来进行AJAX调用.他们将处理构建/发送请求的难点,而不必担心用户使用的浏览器.

同样,在将诸如你的脚本发布到野外之前,先阅读有关SQL注入的信息.

您还有一个格式错误的插入查询.要插入新记录,基本语法是:

INSERT INTO sometable (field1, field2, field3, ...) VALUES (value1, value2, value3, ...)
Run Code Online (Sandbox Code Playgroud)

你在那里混合了一些部分的'更新'查询,其格式是

UPDATE sometable SET field1=value1, field2=value2, ....
Run Code Online (Sandbox Code Playgroud)

我无法看到您的查询如何像现在一样将任何内容插入数据库,因为语法完全被破坏了.