【问题标题】:insert in database using php, json and jquery使用 php、json 和 jquery 插入数据库
【发布时间】:2015-04-04 05:16:33
【问题描述】:

我想使用 php 服务和 json 将数据插入到 mysql 数据库,但是当我点击没有任何反应时,它显示没有错误没有消息,并且数据没有添加到数据库中,请帮助 这是保存功能

function save(){
var eml = document.getElementById("tbemail").value;
var mp = document.getElementById("tbmdp").value;
var data = {email: eml, mdp: mp}

$.ajax({
url:"http://localhost:800/test/insert.php",
type: 'POST',
data: data,
dataType: 'json',
success: function() 
    {alert("success");}
error: function()
    {alert("fail");}
});
}

这是我的 php 文件 insert.php

<?php 
$json = $_POST['data'];
$new=json_decode($json, true);

$conn= mysqli_connect("localhost","root","") or die ("could not connect to    mysql"); 

mysqli_select_db($conn,"bd") or die ("no database");   



$sql = "INSERT INTO user (email,mdp) VALUES ($new['email'],$new['mdp'])";

if (mysqli_query($conn, $sql)) {
 echo "created ";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

?> 

【问题讨论】:

  • 您能否在创建按钮或调用保存功能的位置显示您的 html 代码。并尝试找出 em mp 数据中是否存在所有值?
  • 我尝试在单击按钮时仅打印 eml 和 mp 的内容,它工作正常,我确定问题不存在

标签: php jquery mysql json


【解决方案1】:

您的 $_POST 数组中没有“data”键,您有可以直接访问的“email”和“mdp”:

$email = mysqli_real_escape_string($_POST['email']);
$mdp = mysqli_real_escape_string($_POST['mdp']);

这种方式传递的没有json,同样当你得到字符串时,你也不需要解析它。打开报错,你会看到 $_POST['data'] 是未定义的。

顺便说一句,使用 mysqli_real_escape_string 清理输入以防止注入。

【讨论】:

  • 是的,我尝试在 url 中发送数据,它工作正常,但我需要以 json 格式发送它,因为这是一个示例,我应该真正处理的表有 20 列我不能通过url中的所有内容我应该如何传递json然后plz?
  • 好吧,我不是说你应该在 url 中做。像你一样在json中做,但是在php接收端它不再是json而是普通的post数组,在php端你如何发送它没有区别。尝试像我的回答一样获得这些变量。您还可以通过 print_r($_POST); 来检查 post 数组中的内容;
  • 我按照你说的做了,但我仍然遇到同样的问题,当我点击按钮时没有任何反应
  • 我看不到你的 html,你需要一些带有 onclick="save();" 的按钮事件。如果是提交按钮,则需要添加“return false;”。还要确保在调用此函数之前已加载 jquery 脚本。
  • 是的,我当然做到了,这是代码 铭文
【解决方案2】:

"Insert.php" -> 不用于获取数据$json = $_POST['data'];

只用这个试试

$conn= mysqli_connect("localhost","root","") or die ("could not connect to    mysql"); 

mysqli_select_db($conn,"bd") or die ("no database");   

    $email = $_POST['email'];
    $mdp = $_POST['mdp'];

    $new1 = json_encode($email);
    $new2 = json_encode($mdp);

$sql = "INSERT INTO user ('email','mdp') VALUES ('".$new1."','".$new2."')";
$insert = mysqli_query($sql);
if ($insert) {
 echo "created ";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

【讨论】:

  • thnx 兄弟,但现在我有这个错误 $new1 和 $new2 为 null 错误:INSERT INTO user (email,mdp) VALUES (null,null) Column 'email' cannot be null
  • 请使用 ('".$new1."','".$new2."')
  • thnx 现在 php 文件不再显示错误但它仍然无法正常工作
  • php 显示此通知:未定义索引:第 8 行 C:\wamp\www\test\insert.php 中的电子邮件,但它添加到数据库中
  • 请替换它:- $insert = mysqli_query($sql); if ($insert) { echo "created"; } else { 回声“错误:”。 $sql 。 “
    ”。 mysqli_error($conn); }
【解决方案3】:

您的 PHP 代码似乎是正确的,但请尝试以下 jQuery AJAX 代码:

 function save(){

      var eml = document.getElementById("tbemail").value;
      var mp = document.getElementById("tbmdp").value;
      var data = {email: eml, mdp: mp}

            $.ajax({
                url: "http://localhost:800/test/insert.php",
                type: 'POST',
                dataType: 'json',
                data: JSON.stringify(data),
                contentType: "application/json; charset=utf-8", 
                error: function () {
                    alert('fail');
                },        
                success: function (data) {                       
                 alert('success');
                }
            });
        }

在您的数据部分必须作为 JSON 字符串传递,其次您错过了包含数据 contentType。这里内容类型设置为application/json,因此将数据作为JSON字符串传递。

【讨论】:

  • 我按照你说的做了,至少现在它显示了“失败”消息,知道为什么吗?
  • 亲爱的,修改脚本以在ajax脚本代码的错误部分显示错误消息如下,将其更改为错误:function (a,b,c){alert(JSON.stringify(a); JSON.stringify(c); }. 看看显示了什么错误
  • 我不太明白它所显示的内容,请您向我解释一下,它太长了,无法在评论中写出来,请写在 2 {"statusText":"OK","status":200 ,"response":"
    \n\n 行\n
    ( !) 解析错误:语法错误,意外的 '' (T_ENCAPSED_AND_WHITESPACE),期望标识符 (T_STRING) 或变量 (T_VARIABLE)
  • 或 C:\\wamp\\www\\test\\insert.php 中的数字 (T_NUM_STRING) 第 10
  • \n","re​​sponseType":"","re​​sponseXML":null,"responseText":"
    \n\n\n
    ( !) 解析错误:语法错误,意外'' (T_ENCAPSED_AND_WHITESPACE),期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING) 在
  • C:\\wamp\\www\\test\\insert.php 上线 10
  • 字体>\n","upload":{"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror":null,"onabort":null},"withCredentials ":false,"readyState":4,"timeout":0,"ontimeout":null,"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror": null,"onabort":null,"UNSENT":0,"OPENED":1,"HEADERS_RECEIVED":2,"LOADING":3,"DONE":4}
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 2012-06-28
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
相关资源
最近更新 更多