Может кто-нибудь, пожалуйста, найти причину, по которой происходит вставка пустых строк в базу данных, кроме поля id, которое я установил в автоинкремент? - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь вставить данные в базу данных, используя PHP и Angular JS.Но всякий раз, когда я вставляю, в базу данных вставляются только пустые строки, кроме поля id, для которого установлено автоматическое увеличение.

Я пытался решить эту проблему, даже я искал эту проблему, но не смог найтимного полезного ресурса.Вот мои коды: connection.php и insert.html Пожалуйста, помогите мне найти проблему, пожалуйста.

connection.php

<?php
    $hostname="localhost";
    $dbname="sampledb";
    $username="root";
    $password="";

    $conn=mysqli_connect($hostname, $username, $password, $dbname);
    $info=json_decode(file_get_contents("php://input"));
    $empname=mysqli_real_escape_string($conn, $info['empname']);
    $email=mysqli_real_escape_string($conn, $info['email']);
    $salary=mysqli_real_escape_string($conn, $info['salary']);
    $query="insert into empdetails(empname, email, salary) values 
    ('$empname','$email','$salary')";

    if(mysqli_query($conn, $query))
    {
        echo"Result inserted successfully";
    }
    else
    {
        echo"Oops! Failed to insert.";
    }
?>

insert.html

<html>
    <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/
    angular.min.js" ></script>
    <script>
        var app=angular.module("Myapp",[]);
        app.controller("Mycontroller",function($scope,$http)
        {
            $scope.insert=function()
            {
                $http.post('connection.php',
                {
                    'empname'=$scope.empname;
                    'email'=$scope.email;
                    'salary'=$scope.salary;
                })
                .success(function(data)
                {
                    alert(data);
                    $scope.empname=null;
                    $scope.email=null;
                    $scope.salary=null;
                });
            }
        });
    </script>
    </head>
    <body>
        <center>
        <h1>Insert Records Into Database</h1>
        <hr/>
        <div ng-app="Myapp"ng-controller="Mycontroller">
            Name: <input type="text"ng-model="empname"/><br/>
            Email: <input type="text"ng-model="email"/><br/>
            Salary: <input type="text"ng-model="salary"/><br/>
        <hr/>
        <input type="submit" value="Insert Records"ng-click="Insert()"/>
        </div>
    </center>
    </body>
</html>

1 Ответ

1 голос
/ 31 мая 2019

TL; DR Поставьте true в качестве второго параметра json_decode

$info=json_decode(file_get_contents("php://input"), true);

Здесь много чего не так, я разбью свой комментарий на ответы. Самое большое, что это:

$info=json_decode(file_get_contents("php://input"));
$empname=mysqli_real_escape_string($conn, $info['empname']);
$email=mysqli_real_escape_string($conn, $info['email']);
$salary=mysqli_real_escape_string($conn, $info['salary']);

Декодирование Json возвращает объект, а не массив, если вы не передадите его true так:

$info=json_decode(file_get_contents("php://input"), true);

Далее поговорим о привычках кодирования.

Во-первых, mysqli_real_escape_string - это большое нет, нет, используйте подготовленные операторы, так как экранирующие строки еще можно использовать.

Далее с вашим запросом вам нужно использовать пробел здесь:

$query="insert into empdetails SPACEGOESHERE (empname, email, salary) values 
    ('$empname','$email','$salary')"; 

Наконец, я бы предложил использовать mysqli в качестве объектно-ориентированной, а не процедурной, это будет выглядеть намного лучше и лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...