【问题标题】:MySQL table display empty value after insert data into it by using AngularJS and PHPMySQL表使用AngularJS和PHP插入数据后显示空值
【发布时间】:2017-04-15 11:06:39
【问题描述】:

我是 AngularJS 和 PHP 新手,我正在尝试将一些数据添加到 MySQL 中。但是 MySQL 表显示的是空值,而不是我要插入的数据。

HTML:

<form data-ng-controller="myCtrl">
     <label for="roomName">Room Name: </label>
     <input type="text" name="roomName" data-ng-model="roomName" id="roomName" />

     <br />

     <label for="maxPerson">Maximum Person: </label>
     <input type="text" name="maxPerson" data-ng-model="maxPerson" id="maxPerson" />
     <button type="submit" class="btn btn-default" data-ng-click="addRoom()">Add</button>
</form>

app.js(控制器)

app.controller("myCtrl", function ($scope, $http) {
     "use strict";

     $scope.addRoom = function () {
         $http.post("add_library_room.php", {'roomName': $scope.roomName, 'maxPax': $scope.maxPerson})
             .then(function (response) {
                 $scope.msg = "Room is inserted into database.";
             });
     };
});

add_library_room.php(插入数据)

<?php

define("HOSTNAME","localhost");
define("USERNAME","root");
define("PASSWORD","");
define("DATABASE", "booking_db");

$dbhandle=new mysqli(HOSTNAME, USERNAME, PASSWORD, DATABASE) or die ("Unable to Connect to the Database");

$data=json_decode(file_get_contents("php://input"));

$room_Name=$dbhandle->real_escape_string($data->roomName);
$max_Pax=$dbhandle->real_escape_string($data->maxPax);

$query="INSERT INTO library_discussion_room (room_name, max_pax) VALUES ('$room_Name', '$max_Pax')";

$dbhandle->query($query);

?>

phpMyAdmin MySQL 数据库(我插入的值为空): Image Link

我不知道我做错了什么。希望你们能帮我解决这个问题。谢谢。

【问题讨论】:

  • 它是否显示您将数据发布到 php 文件的成功消息?对我来说,看起来你甚至没有从角度发送正确的数据。 (至少在 Ionic fw 中我使用 {key: value} 语法而不是 {"key":value},但也许没关系,只是一个提示)。尝试打印你的 $data 数组。
  • 我可以收到我的成功信息。但是看起来数据是空的。
  • print_r 你的 $data 变量,然后 console.log 'response' 参数。
  • 控制台中显示以下消息: 注意:未定义的属性:stdClass::$room_name in C:\xampp\htdocs\BookingSystem\add_library_room.php 第 8 行 注意:未定义的属性:stdClass:: C:\xampp\htdocs\BookingSystem\add_library_room.php 中的 $max_pax 第 9 行 stdClass Object ( )
  • 我仍然认为,您将空属性传递给您的 php 文件。

标签: php mysql angularjs http-post


【解决方案1】:

这是因为您直接尝试在示波器上写入数据。 Angular JS 经常在指令内创建子作用域以避免混淆更高级别的数据。 所以如果你直接写ng-model="something",那么它只会变成一个distinct,而不是一个reference。

为了使其工作,您需要创建一个对象,并引用它的属性,因为 Angular 也会在父范围内搜索该对象。

所以解决方案是这样的:

ng-model="object.property"

然后在你的控制器中

$scope.object = {};
$scope.addRoom = function () {
     $http.post("add_library_room.php", {'roomName': $scope.object.roomName, 'maxPax': $scope.object.maxPerson})
         .then(function (response) {
             $scope.msg = "Room is inserted into database.";
         });
 };

【讨论】:

    【解决方案2】:

    你确定不是使用

    $data=json_decode(file_get_contents("php://input"));
    

    你不能简单地使用

    $data=$_POST;
    

    只需通过执行 a 来打印您的 $data 变量

    print_r($data);
    

    您必须将 $data 设为空。

    【讨论】:

    • 那么我将如何获取数据并插入到 mysql 表中呢?我还是 AngularJS 和 PHP 的新手。
    • 而不是使用 $data=json_decode(file_get_contents("php://input"));尝试 $data=$_POST;然后做 print_r($data);检查数据是否已分配给 $data 变量。您可能需要检查浏览器调试器的“网络”选项卡以查看此输出
    • 我收到此错误消息:注意:尝试在第 8 行的 C:\xampp\htdocs\BookingSystem\add_library_room.php 中获取非对象的属性 注意:尝试获取非对象的属性在第 9 行的 C:\xampp\htdocs\BookingSystem\add_library_room.php 中 致命错误:在第 16 行调用 C:\xampp\htdocs\BookingSystem\add_library_room.php 中的未定义函数 print_f()
    • 将函数名更正为print_r
    • 我更正为print_r后,这2条错误信息仍然存在。注意:尝试在第 8 行获取 C:\xampp\htdocs\BookingSystem\add_library_room.php 中的非对象属性 注意:尝试在 C:\xampp\htdocs\BookingSystem\add_library_room.php 中获取非对象的属性第 9 行数组 ( )
    猜你喜欢
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多