2016-06-20 18 views
1

同じ問題を報告している他のトピックが見つかりましたが、それらのどれも私を助けませんでした。HTTP PostメソッドがAngularJS + PHP + MySQLで動作しない

私はAngularJSを学び、MySQLデータベースにデータを挿入しようとしました。私は本当にシンプルなHTMLファイルを持っています。ユーザーは名前と年齢を入力し、このデータをMySQLデータベースに入れるSubmitボタンをクリックすることができます。

学習目的にすぎないので、私はデータベースとテーブル "test"の名前を付けました。

私はサーバー言語としてPHPを使用しています。 私が持っている:
- 私は、MySQLデータベース
にデータを挿入するAngularJS HTTP POSTメソッドを使用しscript.jsファイル - - ビュー
ためのindex.htmlファイルconfig.phpを私がサーバーとの接続とデータベースへのデータの挿入を処理するファイル。

また、私のテーブルは、ID(ユニーク、自動インクリメント)、「名前」(テキスト)、「年齢」(int)の3つの列で構成されています。

各ファイルのコードはここにある:

index.htmlを

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>AngularJS-PHP-MySQL</title> 
    <!-- AngularJS CDN--> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
    <!-- script.js with implementation of Module and Controller --> 
    <script src="script.js" ></script> 
    </head> 
    <body> 

<div ng-app="myApp" ng-controller="formCtrl"> 
    <form id="myForm" action="" method="post"> 
    <input type="text" name="name" id="name" value="" placeholder="Name" ng-model="nameModel"> 
    <input type="text" name="age" id="age" value="" placeholder="Age" ng-model="ageModel"> 
    <input type="button" name="sub" id="sub" value="Submit" ng-click="insertData()"> 
    </form> 
</div> 


    </body> 
</html> 

script.js

var app = angular.module('myApp', []); 
app.controller('formCtrl', function($scope,$http){ 
    $scope.insertData = function(){ 
    $http.post("config.php",{'name': $scope.nameModel, 'age': $scope.ageModel}) 
     .success(function(data, status, headers, config){ 
      console.log("inserted Successfully"); 
     }); 
    } 
}); 

config.phpの

<?php 
$servername = "127.0.0.1"; 
$username  = "root"; 
$password  = ""; 
$Table_name = "test"; 

mysql_connect($servername, $username, $password); 
mysql_select_db($Table_name) or die(mysql_error()); 

$name = $_POST['name']; 
$age = $_POST['age']; 

mysql_query("INSERT INTO $Table_name('name', 'age') VALUES('$name', '$age')"); 

?> 

POSTメソッドが成功したが、データをテーブルに挿入しなかったという警告が表示されます。私はなぜ、私は答えをオンラインで見つけられないのか分かりません。

+0

**危険**:あなたは[削除されました](http:// php。2)[**古い**データベースAPI](http://stackoverflow.com/q/12859942/19068)を使用しています。 net/manual/en/mysql.php)をPHPから入手してください。 [現代的な代替品](http://php.net/manual/en/mysqlinfo.api.choosing.php)を選択する必要があります。あなたは** [SQLインジェクション攻撃](http://bobby-tables.com/)**に対して脆弱です**現代のAPIは、[防御]を容易にします(http://stackoverflow.com/questions/60174/最良の方法からSQLへのPHPインジェクション)をあなた自身から守ってください。 – Quentin

+0

私はすぐにそれを変更します!警告ありがとう! –

答えて

2

私はanother topic hereそのAngularJSで発見され、PHPのようないくつかのサーバーサイド言語はデータをシリアル化して送信するためのさまざまな方法があります。記事のように、PHPはAngularJSの透過性をネイティブで理解できないという問題があります。

script.js私はまたに私のconfig.phpファイルを変更し

var app = angular.module('myApp', []); 
app.controller('formCtrl', function($scope,$http){ 
    $scope.insertData = function(){ 
    var request = $http({ 
      method: "post", 
      url: "config.php", 
      data: { 
       name: $scope.nameModel, 
       age: $scope.ageModel, 
      }, 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    }); 
    } 
}); 

ことを回避するために、私は明示的に私のinserDataに()関数をヘッダを構築しました

<?php 

$servername   = "127.0.0.1"; 
$username   = "root"; 
$password   = ""; 
$dbname    = "test"; 

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

$name = $request->name; 
$age = $request->age; 

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

$sql = "INSERT INTO test(name, age) VALUES('$name', '$age')"; 

if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} 
else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 

?> 

互換性のあるデータを送信できるようになりました。変数への接続を割り当ててから、データを照会するために使用しました。

HTMLは同じです。これらの変更により、ここのすべてが正しく機能しています。

0

あなたのPHP/MYSQLコードがOKであるかわかりません。

次のコードを試してください。

<?php 
$servername = "127.0.0.1"; 
$username  = "root"; 
$password  = ""; 
$Table_name = "test"; 

$connection = mysql_connect($servername, $username, $password); 
mysql_select_db($Table_name, $connection) or die(mysql_error()); 

$name = $_POST['name']; 
$age = $_POST['age']; 

$sqlQuery = "INSERT INTO $Table_name('name', 'age') VALUES('$name', '$age')"; 
mysql_query($sqlQuery, $connection); 
?> 
+0

AngularJSとPHPがデータを送信する方法に問題があることがわかりました。私は今働いているコードで答えを投稿しました。ご協力いただきありがとうございます! –