【问题标题】:PHP form details are not stored in mysql [closed]PHP表单详细信息未存储在mysql中[关闭]
【发布时间】:2017-06-14 17:23:42
【问题描述】:

我正在 AngularJS 中创建一个表单,使用它我必须将人员详细信息存储在 phpMyAdmin(mysql) 中。但是,一旦我在填写表格后点击提交按钮,详细信息并没有添加到数据库中,谁能帮我解决这个问题。

HTML页面代码:

<!DOCTYPE html>
<html>
<script 
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js">
</script>
<title> Home </title>
<body>

<div ng-app="myapp" ng-controller="myCtrl">
<form>
<br>
<h1 align="left">ID : <input type="text" ng-model="id"></h1>
<h1 align="left">Name : <input type="text" ng-model="name"></h1>

<h1 align="left">Address : <input type="text" ng-model="address"></h1>

<h1 align="left">Phone : <input type="text" ng-model="phone"></h1>

<input type="button" value="Submit" ng-click="insertData()" />
</br>
</form>

<script>
var app = angular.module('myapp',[]);
app.controller('myCtrl', function($scope, $http){

$scope.insertData = function(){
$http.post("insert.php",{
'id':$scope.id, 
'name':$scope.name, 
'address':$scope.address, 
'phone':$scope.phone})
.then(function successCallback(data,status,headers,config) {
console.log(data);
});
}
});

PHP 代码:insert.php

 <?php
 $servername = "localhost";
 $username   = "root";
 $password   = "bulbul";
 $dbname     = "angularjs";

 // Create connection
 $conn = new mysqli($servername, $username, $password, $dbname);
 // Check connection
 if ($conn->connect_error) {
 die("Connection failed: " . $conn->connect_error);
 }


 $json = file_get_contents('php://input');
 $php_array = json_decode($json, TRUE);
 $id = $php_array['id'];
 $name = $php_array['name'];
 $address = $php_array['address'];
 $phone = $php_array['phone'];

 $sql = "INSERT INTO employee(id,name,address,phone) VALUES(?,?,?,?)";
 $stmt = $conn->prepare($sql);
 $stmt->bind_param("isss", $id, $name, $address, $phone);
 if ($stmt->execute()) {

  echo "data inserted";
 }
 ?>

【问题讨论】:

  • 你收到错误了吗?
  • 没有我得到的错误
  • 尝试打印mysql_error() 并发布错误。此外,您应该使用 mysqli 或 PDO,因为不推荐使用 mysql
  • 停止使用mysql_*函数!它们已弃用,请改用 MySQLi 或 PDO。并使用准备好的查询来避免如此容易受到 SQL 注入攻击!
  • 先尝试调试。问题可能是数据库问题,也可能是 POST 请求,也可能是表单本身。

标签: php html mysql angularjs


【解决方案1】:

为什么没有在数据库中添加表单详细信息? 好吧,因为你有以下错误:

$http.post(...).success 不是函数

使用您的浏览器控制台。

问题是.success $http 成功和错误方法在旧版本的 Angular 1.x 中可用,但它们已被弃用一段时间并在 Angular 1.6 中被删除。见:https://docs.angularjs.org/api/ng/service/

你应该使用.then()

这是你需要的

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js">
</script>
<title> Home </title>
<body>

<div ng-app="myapp" ng-controller="myCtrl">
<form>
<br>
<h1 align="left">ID : <input type="text" ng-model="id"></h1>
<h1 align="left">Name : <input type="text" ng-model="name"></h1>

<h1 align="left">Address : <input type="text" ng-model="address"></h1>

<h1 align="left">Phone : <input type="text" ng-model="phone"></h1>

<input type="button" value="Submit" ng-click="insertData()" />
</br>
</form>

<script>
var app = angular.module('myapp',[]);
app.controller('myCtrl', function($scope, $http){

    $scope.insertData = function(){
    $http.post("insert.php",{
    'id':$scope.id, 
    'name':$scope.name, 
    'address':$scope.address, 
    'phone':$scope.phone})
    .then(function successCallback(data,status,headers,config) {
    console.log(data);
    });
    }
    });
    </script>

    </div>
    </body>
    </html>

然后是你的 insert.php

停止使用折旧的函数并停止使用危险代码使用准备好的语句:

<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$dbname     = "angularjs";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$data = json_decode(file_get_contents("php://input"));
$id = $data->id;
$name = $data->name;
$address = $data->address;
$phone = $data->phone;

$sql = "INSERT INTO employee(id,name,address,phone) VALUES(?,?,?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("isss", $id, $name, $address, $phone);
if ($stmt->execute()) {

    echo "data inserted";
}
?>

【讨论】:

  • 嘿,按照您所说的进行更新后...我收到通知:(!)注意:尝试在 C:\wamp64\www\HomeMade\insert 中获取非对象的属性.php 在第 16 行。
  • @BleedCode 告诉我哪一行是 16?使用我的 insert.php 代码,因为它只是更改服务器凭据
  • $id = $data->id; name; 中遇到错误$地址= $数据->地址; $phone = $data->手机;
  • 发布您的完整代码,我没有收到任何这些错误,它在我身边工作完美@BleedCode
  • 更新的 insert.php 代码使用与给出的相同
【解决方案2】:

使用 .then 而不是 .success 因为 .success 在最新的 Angular 1.x 版本中已被弃用

http://www.codelord.net/2015/05/25/dont-use-%24https-success/

在 php 代码中使用 die 来检查任何服务器端问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多