代码之家  ›  专栏  ›  技术社区  ›  Salman

无法使用AngularJS&PHP发布

  •  8
  • Salman  · 技术社区  · 7 年前

    我在开安格拉 app .

    我以前在本地运行过,可以投递到本地服务器。

    现在我在live服务器上尝试,得到以下错误:

    Unable to create Reservation.
    

    此错误是从 create.php 页,当它无法发送到服务器时。

    有人知道我的密码怎么了吗?

    create.php页面

      <?php
    // required headers
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Max-Age: 3600");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    
    // get database connection
    include_once '../config/database.php';
    
    // instantiate reservation object
    include_once '../objects/reserve.php';
    
    $database = new Database();
    $db = $database->getConnection();
    
    $reservation = new Reservation($db);
    
    // get posted data
    $data = json_decode(file_get_contents("php://input"));
    
    // set product property values
    $reservation->name = $data->name;
    $reservation->eMail = $data->eMail;
    $reservation->phoneNumber = $data->phoneNumber;
    $reservation->colorScooter = $data->colorScooter;
    $reservation->amountScooters = $data->amountScooters;
    $reservation->inputDate = $data->inputDate;
    $reservation->returnDate = $data->returnDate;
    $reservation->category_id = $data->category_id;
    $reservation->created = date('Y-m-d H:i:s');
    
    // create the reservation
    if($reservation->create()){
        echo '{';
            echo '"message": "Reservation was created."';
        echo '}';
    }
    
    // if unable to create the reservation, tell the user
    else{
        echo '{';
            echo '"message": "Unable to create Reservation."';
        echo '}';
    }
    ?>
    

    编辑02-08-18

    似乎它没有设置属性值。

        // set product property values
    $reservation->name = $data->name;
    $reservation->eMail = $data->eMail;
    $reservation->phoneNumber = $data->phoneNumber;
    $reservation->colorScooter = $data->colorScooter;
    $reservation->amountScooters = $data->amountScooters;
    $reservation->inputDate = $data->inputDate;
    $reservation->returnDate = $data->returnDate;
    $reservation->category_id = $data->category_id;
    $reservation->created = date('Y-m-d H:i:s');
    

    我可以看到这个当运行打开 创建.php 现场vs本地

    本地

    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>24</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>27</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>28</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>29</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>30</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>31</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>32</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>33</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>34</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api2\reserve\update.php</b> on line <b>35</b><br />
    {"message": "Unable to update reservation."}
    

    活的

     {"message": "Unable to update reservation."}
    

    在现场看来,它并不是在寻找房产价值

    在HP 7.0(7.0.28)上运行

    补充:

    ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

    现在显示了

    Trying to get property of non-object in /var/www/vhosts/128/313118/webspace/httpdocs/e-citywheels.com/new/api2/reserve/create.php on line 32
    

    编辑ADDED RESERVE.PHP

    <?php
    class Reservation{
    
        // database connection and table name
        private $conn;
        private $table_name = "reservations";
    
        // object properties
        public $id;
        public $name;
        public $eMail;
        public $phoneNumber;
        public $colorScooter;
        public $amountScooters;
        public $inputDate;
        public $returnDate;
        public $category_name;
        public $created;
    
        // constructor with $db as database connection
        public function __construct($db){
            $this->conn = $db;
        }
    
        // read reservations
        function read(){
    
            // select all query
            $query = "SELECT
                        c.name as category_name, p.id, p.name, p.eMail, p.phoneNumber,  p.colorScooter, p.amountScooters, p.inputDate, p.returnDate, p.category_id, p.created
                    FROM
                        " . $this->table_name . " p
                        LEFT JOIN
                            categories c
                                ON p.category_id = c.id
                    ORDER BY
                        p.created DESC";
    
            // prepare query statement
            $stmt = $this->conn->prepare($query);
    
            // execute query
            $stmt->execute();
    
            return $stmt;
        }
        // create product
        function create(){
    
            // query to insert record
            $query = "INSERT INTO
                        " . $this->table_name . "
                    SET
                        name=:name, eMail=:eMail, phoneNumber=:phoneNumber, colorScooter=:colorScooter, amountScooters=:amountScooters, inputDate=:inputDate, returnDate=:returnDate,category_id=:category_id, created=:created";
    
            // prepare query
            $stmt = $this->conn->prepare($query);
    
            // sanitize
            $this->name=htmlspecialchars(strip_tags($this->name));
            $this->eMail=htmlspecialchars(strip_tags($this->eMail));
            $this->phoneNumber=htmlspecialchars(strip_tags($this->phoneNumber));
            $this->colorScooter=htmlspecialchars(strip_tags($this->colorScooter));
            $this->amountScooters=htmlspecialchars(strip_tags($this->amountScooters));
            $this->inputDate=htmlspecialchars(strip_tags($this->inputDate));
            $this->inputDate=htmlspecialchars(strip_tags($this->returnDate));
            $this->category_id=htmlspecialchars(strip_tags($this->category_id));
            $this->created=htmlspecialchars(strip_tags($this->created));
    
            // bind values
            $stmt->bindParam(":name", $this->name);
            $stmt->bindParam(":eMail", $this->eMail);
            $stmt->bindParam(":phoneNumber", $this->phoneNumber);
            $stmt->bindParam(":colorScooter", $this->colorScooter);
            $stmt->bindParam(":amountScooters", $this->amountScooters);
            $stmt->bindParam(":inputDate", $this->inputDate);
            $stmt->bindParam(":returnDate", $this->returnDate);
            $stmt->bindParam(":category_id", $this->category_id);
            $stmt->bindParam(":created", $this->created);
    
            // execute query
            if($stmt->execute()){
                return true;
            }
    
            return false;
    
        }
        // used when filling up the update product form
        function readOne(){
    
            // query to read single record
            $query = "SELECT
                        c.name as category_name,  p.id, p.name, p.eMail, p.phoneNumber,  p.colorScooter, p.amountScooters, p.inputDate, p.returnDate, p.category_id, p.created
                    FROM
                        " . $this->table_name . " p
                        LEFT JOIN
                            categories c
                                ON p.category_id = c.id
                    WHERE
                        p.id = ?
                    LIMIT
                        0,1";
    
            // prepare query statement
            $stmt = $this->conn->prepare( $query );
    
            // bind id of product to be updated
            $stmt->bindParam(1, $this->id);
    
            // execute query
            $stmt->execute();
    
            // get retrieved row
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
            // set values to object properties
            $this->name = $row['name'];
            $this->eMail = $row['eMail'];
            $this->phoneNumber = $row['phoneNumber'];
            $this->colorScooter = $row['colorScooter'];
            $this->amountScooters = $row['amountScooters'];
            $this->inputDate = $row['inputDate'];
            $this->returnDate = $row['returnDate'];
            $this->category_id = $row['category_id'];
            $this->category_name = $row['category_name'];
        }
    
        // update the product
        function update(){
    
            // update query
            $query = "UPDATE
                        " . $this->table_name . "
                    SET
                        name = :name,
                        eMail = :eMail,
                        phoneNumber = :phoneNumber,
                        colorScooter = :colorScooter
                        amountScooters = :amountScooters,
                        inputDate = :inputDate,
                        returnDate = :returnDate,
                        category_id = :category_id
                    WHERE
                        id = :id";
    
            // prepare query statement
            $stmt = $this->conn->prepare($query);
    
            // sanitize
            $this->name=htmlspecialchars(strip_tags($this->name));
            $this->eMail=htmlspecialchars(strip_tags($this->eMail));
            $this->phoneNumber=htmlspecialchars(strip_tags($this->phoneNumber));
            $this->colorScooter=htmlspecialchars(strip_tags($this->colorScooter));
            $this->amountScooters=htmlspecialchars(strip_tags($this->amountScooters));
            $this->inputDate=htmlspecialchars(strip_tags($this->inputDate));
            $this->inputDate=htmlspecialchars(strip_tags($this->returnDate));
            $this->category_id=htmlspecialchars(strip_tags($this->category_id));
            $this->id=htmlspecialchars(strip_tags($this->id));
    
    
    
    
    
            // bind new values
            $stmt->bindParam(":name", $this->name);
            $stmt->bindParam(":eMail", $this->eMail);
            $stmt->bindParam(":phoneNumber", $this->phoneNumber);
            $stmt->bindParam(":colorScooter", $this->colorScooter);
            $stmt->bindParam(":amountScooters", $this->amountScooters);
            $stmt->bindParam(":inputDate", $this->inputDate);
            $stmt->bindParam(":returnDate", $this->returnDate);
            $stmt->bindParam(':category_id', $this->category_id);
            $stmt->bindParam(':id', $this->id);
    
            // execute the query
            if($stmt->execute()){
                return true;
            }
    
            return false;
        }
    
        // delete the product
        function delete(){
    
            // delete query
            $query = "DELETE FROM " . $this->table_name . " WHERE id = ?";
    
            // prepare query
            $stmt = $this->conn->prepare($query);
    
            // sanitize
            $this->id=htmlspecialchars(strip_tags($this->id));
    
            // bind id of record to delete
            $stmt->bindParam(1, $this->id);
    
            // execute query
            if($stmt->execute()){
                return true;
            }
    
            return false;
    
        }
    
        // search products
        function search($keywords){
    
            // select all query
            $query = "SELECT
                        c.name as category_name, p.id, p.name, p.eMail, p.phoneNumber,  p.colorScooter, p.amountScooters, p.inputDate, p.returnDate, p.category_id, p.created
                    FROM
                        " . $this->table_name . " p
                        LEFT JOIN
                            categories c
                                ON p.category_id = c.id
                    WHERE
                        p.name LIKE ? OR p.description LIKE ? OR c.name LIKE ?
                    ORDER BY
                        p.created DESC";
    
            // prepare query statement
            $stmt = $this->conn->prepare($query);
    
            // sanitize
            $keywords=htmlspecialchars(strip_tags($keywords));
            $keywords = "%{$keywords}%";
    
            // bind
            $stmt->bindParam(1, $keywords);
            $stmt->bindParam(2, $keywords);
            $stmt->bindParam(3, $keywords);
    
            // execute query
            $stmt->execute();
    
            return $stmt;
        }
    
        // read products with pagination
        public function readPaging($from_record_num, $records_per_page){
    
            // select query
            $query = "SELECT
                        c.name as category_name, p.id, p.name, p.eMail, p.phoneNumber,  p.colorScooter, p.amountScooters, p.inputDate, p.returnDate, p.category_id, p.created
                    FROM
                        " . $this->table_name . " p
                        LEFT JOIN
                            categories c
                                ON p.category_id = c.id
                    ORDER BY p.created DESC
                    LIMIT ?, ?";
    
            // prepare query statement
            $stmt = $this->conn->prepare( $query );
    
            // bind variable values
            $stmt->bindParam(1, $from_record_num, PDO::PARAM_INT);
            $stmt->bindParam(2, $records_per_page, PDO::PARAM_INT);
    
            // execute query
            $stmt->execute();
    
            // return values from database
            return $stmt;
        }
    
        // used for paging products
        public function count(){
            $query = "SELECT COUNT(*) as total_rows FROM " . $this->table_name . "";
    
            $stmt = $this->conn->prepare( $query );
            $stmt->execute();
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
            return $row['total_rows'];
        }
    
    }
    

    新增日期:2018年8月11日

    添加 var_dump($product); 结果显示变量 $product 是否返回表和 $data 实际上是问题所在。

    结果 var_dump($产品);

     ["table_name":"Product":private]=>
      string(8) "products"
      ["id"]=>
      NULL
      ["name"]=>
      NULL
      ["email"]=>
      NULL
      ["phone"]=>
      NULL
      ["amount"]=>
      NULL
      ["description"]=>
      NULL
      ["pickup"]=>
      NULL
      ["back"]=>
      NULL
      ["category_id"]=>
      NULL
      ["category_name"]=>
      NULL
      ["created"]=>
      NULL
    

    现状

    如果我打开create.php文件,它确实创建了一个产品,但是如果我使用表单,则会得到一个错误:无法创建产品。

    另外,当我打开create.php文件时,会收到以下错误消息:

    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>37</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>38</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>39</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>40</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>41</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>42</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>43</b><br />
    <br />
    <b>Notice</b>:  Trying to get property of non-object in <b>C:\xampp\htdocs\api\product\create.php</b> on line <b>44</b><br />
    

    似乎找不到“name”属性。

    我知道是什么导致了这个问题,

    工厂

    // create product
    factory.createProduct = function($scope){
        return $http({
            method: 'POST',
            data: {
                'name' : $scope.name,
                'email' : $scope.email,
                'phone' : $scope.phone,
                'amount' : $scope.amount,
                'description' : $scope.description,
                'pickup' : $scope.pickup,
                'back' : $scope.back,
                'category_id' : 1
            },
            url: 'http://localhost/api/product/create.php'
    
        });
    };
    

    我的控制器

    // create new product
    $scope.createProduct = function(){
    
        productsFactory.createProduct($scope).then(function successCallback(response){
    
            // tell the user new product was created
            $scope.showToast(response.data.message);
    
            // refresh the list
            $scope.readProducts();
    
            // close dialog
            $scope.cancel();
    
            // remove form values
            $scope.clearProductForm();
    
        }, function errorCallback(response){
            $scope.showToast("Unable to create record.");
        });
    }
    

    产品.php

        // create product
    function create(){
    
        // query to insert record
        // $query = "INSERT INTO " . $this->table_name . 
        // "(name, email, phone, amount, description, pickup, back, created, modified)" .
        // " VALUES(:name, :email, :phone, :amount, :description, :pickup, :back, :created, :modified)";
    
        $query = "INSERT INTO
                    " . $this->table_name . "
                SET
                    name=:name, email=:email, phone=:phone, amount=:amount, description=:description, pickup=:pickup, back=:back, category_id=:category_id, created=:created";
    
        // prepare query
        $stmt = $this->conn->prepare($query);
    
        // sanitize
        $this->name=htmlspecialchars(strip_tags($this->name));
        $this->email=htmlspecialchars(strip_tags($this->email));
        $this->phone=htmlspecialchars(strip_tags($this->phone));
        $this->amount=htmlspecialchars(strip_tags($this->amount));
        $this->description=htmlspecialchars(strip_tags($this->description));
        $this->pickup=htmlspecialchars(strip_tags($this->pickup));
        $this->back=htmlspecialchars(strip_tags($this->back));
        $this->category_id=htmlspecialchars(strip_tags($this->category_id));
        $this->created=htmlspecialchars(strip_tags($this->created));
    
        // bind values
        $stmt->bindParam(":name", $this->name);
        $stmt->bindParam(":email", $this->email);
        $stmt->bindParam(":phone", $this->phone);
        $stmt->bindParam(":amount", $this->amount);
        $stmt->bindParam(":description", $this->description);
        $stmt->bindParam(":pickup", $this->pickup);
        $stmt->bindParam(":back", $this->back);
        $stmt->bindParam(":category_id", $this->category_id);
        $stmt->bindParam(":created", $this->created);
    
        // execute query
        if($stmt->execute()){
            return true;
        }
    
        return false;
    
    }
    

    创建.php

    <?php
    
    
    // required headers
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Max-Age: 3600");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    
    // get database connection
    include_once '../config/database.php';
    
    // instantiate product object
    include_once '../objects/product.php';
    
    $database = new Database();
    $db = $database->getConnection();
    
    $product = new Product($db);
    
    // get posted data
    $data = json_decode(file_get_contents("php://input"));
    
    echo $data;
    
    var_dump($data);
    
    var_dump($product);
    
    
    print_r($data);
    
    var_dump($product->name);
    
    // set product property values
    $product->name = $data->name;
    $product->email = $data->email;
    $product->phone = $data->phone;
    $product->amount = $data->amount;
    $product->description = $data->description;
    $product->pickup = $data->pickup;
    $product->back = $data->back;
    $product->category_id = $data->category_id;
    $product->created = date('Y-m-d H:i:s');
    
    
    
    var_dump($product->name);
    var_dump($data->name);
    
    echo is_array($product->name) ? 'Array' : 'not an Array';
    
    echo json_last_error();
    // create the product
    if($product->create()){
        echo '{';
            echo '"message": "Product was created."';
        echo '}';
    }
    
    // if unable to create the product, tell the user
    else{
        echo '{';
            echo '"message": "Unable to create product."';
    
        echo '}';
    }
    
    
    ?>
    

    更新日期:08-12-2018

    运行createproduct()它会 post 它变成 创建.php

    我用google chrome的inspector network标签查过了。

    {name: "test", email: "test", phone: "test", amount: "test", description: "test", pickup: "test",…}
    amount
    :
    "test"
    back
    :
    "test"
    description
    :
    "test"
    email
    :
    "test"
    name
    :
    "test"
    phone
    :
    "test"
    pickup
    :
    "test"
    

    它还返回代码:200

    根据这个 link 指:

    200好 此响应代码表示请求成功。

    创建201 这表示请求成功并创建了资源。它用于确认PUT或POST请求的成功。

    它似乎没有创造新的资源,也没有发布任何内容。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Jason Aller    7 年前

    为什么使用php://input?您没有使用$_POST来访问已发布的数据是有原因的吗?如果POST请求命中php,则创建全局关联数组$_POST。每个索引将匹配表单中的一个名称属性并包含其值。

    显示的错误可能来自这种方法,因为php://input可以是任何东西,所以$data可以是。如果是这种情况,则尝试从实际不是对象的对象中分配值($reservation->name=$data->name;)。

    // get posted data
    $data = json_decode(file_get_contents("php://input"));
    
    // set product property values
    $reservation->name = $data->name;
    $reservation->eMail = $data->eMail;
    $reservation->phoneNumber = $data->phoneNumber;
    $reservation->colorScooter = $data->colorScooter;
    $reservation->amountScooters = $data->amountScooters;
    $reservation->inputDate = $data->inputDate;
    $reservation->returnDate = $data->returnDate;
    $reservation->category_id = $data->category_id;
    $reservation->created = date('Y-m-d H:i:s');
    

    澄清$data的数据类型,并确保无论发生什么,它都保持不变。(尝试使用var_dump而不是echo或print_r,授予附加信息)

        2
  •  1
  •   LahiruTM    7 年前

    确保在执行任何事务之前检查所有变量值和数组值。您可以使用

    isset() 
    

    is_array()
    

    所以,你会清楚的知道为什么一个没有被设置在正确的地方。所以你可以很清楚地追踪到它。否则你会把时间浪费在追踪问题上。

        3
  •  1
  •   arczinosek    7 年前
    1. 看看你穿什么 file_get_contents("php://input") (变量转储)
    2. 在factory.createProduct中 url: 'http://localhost/api/product/create.php' . 这就是你想要的吗?从远程呼叫到本地主机?你不用吗 '/api/product/create.php' ?
    推荐文章