【问题标题】:PHP INSERT to hosting databasePHP INSERT 到托管数据库
【发布时间】:2013-11-27 05:29:04
【问题描述】:

我有这个插入 id、名字和姓氏的 PHP 代码:

<?php
header('Access-Control-Allow-Origin: *');

$conn = mysql_connect('localhost', 'happy', '***');
$db   = mysql_select_db('dbtest');


$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

mysql_query("INSERT INTO tbltry (firstname, lastname) VALUES('$firstname', '$lastname')");
?>

我有这个带有 AJAX 的 HTML:

<script>
function save(){
var xmlhttp;

         if (window.XMLHttpRequest)
         {
            xmlhttp=new XMLHttpRequest();
         }
         else
         {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
         }


        xmlhttp.open("POST", " **url** ", true);
        console.log("added");
        xmlhttp.send();

        xmlhttp.onreadystatechange=function()
         {
         if (xmlhttp.readyState==4 && xmlhttp.status==200)
             {

             }
         }
}
</script>
</head>
<body>

Firstname: <input type="text" name="firstname" id="firstname">
Lastname: <input type="text" name="lastname" id="lastname">
<button onclick="save()">Save</button>
</body>

这两个工作正常,它在数据库中插入一个新行,但插入的唯一数据是 id 列上的 id 和列 firstname 和 lastname 是空白的。

有人能告诉我我错过了什么吗?任何帮助将不胜感激。

【问题讨论】:

  • 你能把这个拼写 $fisrtname 改成 $firstname
  • 旁注:您的 PHP 脚本已公开邀请进行 SQL 注入攻击。
  • 也请尝试从 mysql* 扩展转移到 PDO,因为 mysql* 扩展已正式弃用
  • 您的 javascript 函数 save 需要知道在发布请求中要发送哪些数据(您的输入)。
  • 这可能是您的代码中的错字;你有 VALUES('$fisrtname', '$lastname') 而不是 VALUES('$firstname', '$lastname') 。看看能不能解决。

标签: php mysql ajax


【解决方案1】:

试试这个

<script>
function save(){
var xmlhttp;

var fname = document.getElementById("firstname").value;
 var lname = document.getElementById("lastname").value;

var data = {firstname:fname,lastname:lname};
         if (window.XMLHttpRequest)
         {
            xmlhttp=new XMLHttpRequest();
         }
         else
         {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
         }


        xmlhttp.open("POST", " **url** ", true);
        console.log("added");
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xmlhttp.send(data);

        xmlhttp.onreadystatechange=function()
         {
         if (xmlhttp.readyState==4 && xmlhttp.status==200)
             {

             }
         }
}

【讨论】:

  • 试过这个但还是空白。
【解决方案2】:

试试这样的,

function save(){
 var fname = document.getElementById("firstname").value;
 var lname = document.getElementById("lastname").value;
 var data = "firstname="+fname+"&lastname="+lname;  
    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)
        {

            alert(xmlhttp.responseText);

        }
      }

    xmlhttp.open("POST","url?"+data,true);
    xmlhttp.send();

}

你的测试文件应该是这样的

<?php

$conn = mysql_connect('localhost', 'happy', '***');
$db   = mysql_select_db('dbtest');


$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

mysql_query("INSERT INTO tbltry (firstname, lastname) VALUES('$firstname', '$lastname')");
?>

最好使用jQuery.Ajax,而不是使用旧的xmlhttp,并且不推荐使用mysql函数使用PDO

为了安全起见,您应该使用任何 mysql 转义函数。

希望对你有帮助..

【讨论】:

  • 我试过这个,但名字和姓氏仍然是空白,没有警报。我不确定我这样做是否正确:xmlhttp.open("GET","http://url.com/dir/testing.php?"+data,true); 而这个在这里:var data = "firstname="+fname+"&amp;lastname="+lname; 因为姓氏有 '&' 而名字没有。
  • 它的查询字符串参数然后整个 url 将像 url.com/dir/testing.php?firstname=your name&lastname=your name ,第二个需要并检查我的更新代码你在查询中的名字有错字(拼写问题)。
  • 完全试试我的代码。 alert() 没有任何数据,因为该页面没有任何输出。
  • 它仍然没有插入只有名字和姓氏的 id。我会尝试更多,然后会回到这里。非常感谢我朋友的帮助。我真的很感激。
猜你喜欢
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多