Вставить с помощью PHP и AngularJs

0

Итак, я новичок в AngularJS, и я пытался создать простую веб-страницу для добавления значений в базу данных MySQL с PHP. Вот HTML:

<DOCTYPE html>  
<html lang="pt">
<head>
<meta name="viewport" content="width=device-width">
<meta charset="utf-8">
<script src="js/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<script src="js/pannel.js"></script>
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css"/>
<link rel="stylesheet" href="css/pannel.css" type="text/css"/>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
  <div class="navbar-header">
    <a class="navbar-brand" href="index.html">Garagi Extreme</a>
  </div>
  <div>
    <ul class="nav navbar-nav">
      <li class="active">
        <a href="#">Inserir Carro</a>
      </li>
      <li><a href="#">Alterar/excluir Carro</a></li>
      <li><a href="#">Inserir Montadora</a></li>
      <li><a href="#">Alterar/excluir Montadora</a></li>
    </ul>
  </div>
</div>
</nav>
<div ng-app="garagem" ng-controller="montadora">
  <form>
    <p>Nome da Montadora: <input type="text" ng-model="nomeMont"/></p>
    <input type="button" ng-click="insertMontadora()" value="Enviar" class="btn primary-btn"/>
  </form>
</div>

</body>
</html>

И Мой pannel.js:

var app= angular.module('garagem', []);
app.controller('montadora',["$scope", "$http", function ($scope, $http) {
$scope.insertMontadora=function () {
$http.post("db/insertMont.php", {'nomeMont': $scope.nomeMont})
.success(function (data,status,headers,config) {
  console.log("Inserted");
});
}
}]);

И мою страницу PHP для подключения к базе данных и сделать запрос:

$nomeMont=mysql_real_escape_string($data->nomeMont);

$local_server="localhost";
$usuario= "tkc";
$senha="185478";
$banco="garagiextrem";

mysql_connect($local_server, $usuario, $senha) or die("Nope");
mysql_select_db($banco) or die("Nain");
mysql_query('INSERT INTO montadora(idMontadora,Nome) VALUES ("NULL",'" . $nomeMont . "')');
 ?>

Когда я загружаю страницу в браузере, все работает отлично, и я даже получаю сообщение "Вставлено" на консоли. Но когда я иду проверить phpMyAdmin, в таблице нет записей. Что я здесь делаю неправильно? :(

  • 0
    Вы не проверяете успех или неудачу mysql_query (или других вызовов функций). Попробуйте проверить на наличие ошибок, а не предполагать, что все просто работает. Кроме того, вы должны использовать mysqli так как mysql устарела и будет удалена из будущих выпусков php.
  • 0
    Для mysql вместо mysqli или PDO я следую старому учебнику, по-видимому, XD. Но не могли бы вы сказать мне, как я могу проверить эти ошибки в запросе? Извини я нуб хаха
Показать ещё 1 комментарий

1 ответ

0
Лучший ответ

Если вы проверяете наличие каких-либо ошибок, вы можете отправить результат и отобразить соответствующее сообщение в Angular.

В приведенном ниже PHP-коде используются функции mysqli и проверки на наличие ошибок.

Предполагая, что idMontadora является основным ключом вашей таблицы, и он автоматически увеличивается, вам не нужно включать его в запрос вставки.

Я бы рекомендовал использовать буферизацию вывода, потому что любые уведомления будут загрязнять json, возвращенный в Angular. См. Использование ob_start() в верхней части скрипта и ob_clean() непосредственно перед ob_clean() json.

Я написал небольшую функцию для обработки эха результата process_output() чтобы избежать дублирования кода.

<?php
// start output buffering
ob_start();

// utility function to clean output and echo as json
function process_output($result, $msg)
{
    $out = array('result' => $result, 'msg' => $msg);
    ob_clean();
    echo json_encode($out, JSON_NUMERIC_CHECK);
    exit();
}

$local_server="localhost";
$usuario= "tkc";
$senha="185478";
$banco="garagiextrem";
// setup mysqli
$mysqli = new mysqli($local_server, $usuario, $senha, $banco);
// check connection
if ($mysqli->connect_errno) 
    process_output(0, "Connect failed: ".$mysqli->connect_error);
// define the query
$sql ="INSERT INTO montadora (Nome) VALUES (?)";
// prepare the query
if (!$stmt = $mysqli->prepare($sql)) 
    process_output(0, "Prepare failed: ".$stmt->error);
// bind the parameter
if (!$res = $stmt->bind_param('s', $data->nomeMont))
    process_output(0, "Bind failed: ".$stmt->error);
// execute
if (!$res = $stmt->execute())
    process_output(0, "Execute failed: ".$stmt->error);
// no errors so return true
process_output(1, "Rows inserted: ".$stmt->affected_rows);

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

Приведенная ниже консоль регистрирует данные, полученные из $http.post, но вы можете расширить ее для надлежащего управления успехом или ошибкой.

var app= angular.module('garagem', []);
app.controller('montadora',["$scope", "$http", function ($scope, $http) {
    $scope.insertMontadora=function () {
        $http.post("db/insertMont.php", {'nomeMont': $scope.nomeMont}).then(
            function (data,status,headers,config) {
                console.log(data);
            },
            function(data, status, headers, config) {
                console.log(data);
                console.log(status);
            }
        );
    };
}]);

Бэкэнд отправляет msg которое сообщает вам, что произошло, и ключ result который можно легко использовать для настройки обработки ошибок в контроллере. Например. if (data.result === 0) {//handle the error }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню