2016-07-22 6 views
1

В настоящее время я разрабатываю проект AngularJS, который имеет форму и в форме отправки данных формы помещается в базу данных sql.Вставить данные в базу данных с помощью AngularJS

Мне удалось получить проект AngularJS, подключающийся к базе данных sql, но данные из формы не вставляются в столбцы таблицы и вместо этого отображаются пустым - см. Прилагаемое для визуального объяснения.

Вопрос: Почему мои данные не вставляются в sql и как я могу исправить свой код, чтобы заставить это работать?

Любой совет будет оценен, спасибо.

AngularJS

$scope.submit = function() { 
    console.log($scope.form); 
    $http.post('XXX/submit.php', {'id':'3','coachName':'1','contractArea':'2','attendance':'4'}) 
    .success(function(data,status,headers,config){ 
    console.log('Success'); 
    }); 
}; 

PHP

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

    $coachName = mysql_real_escape_string($data->coachName); 
    $contractArea = mysql_real_escape_string($data->contractArea); 
    $id = mysql_real_escape_string($data->id); 
    $attendance = mysql_real_escape_string($data->attendance); 

    mysql_connect('XXX','XXX','XX'); 
    mysql_select_db('XX'); 
    mysql_query("INSERT INTO participants(`id`, `coachName`, `contractArea`, `attendance`)VALUES('".$id."','".$coachName."','".$contractArea."','".$attendance."')"); 

SQL enter image description here

enter image description here

PHP, Update 1

$servername = "XXX"; 
    $username = "XXX"; 
    $password = "XXX"; 
    $dbname = "XXX"; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $stmt = $conn->prepare("INSERT INTO participants (id,coachName, contractArea, attendance) VALUES (?, ?, ?, ?)"); 
    $stmt->bind_param("ssss", $iddb, $coachName, $contractArea, $attendance); 

    $id = "1"; 
    $coachName = "2"; 
    $contractArea = "3"; 
    $attendance = "4"; 
    $stmt->execute(); 

    echo "Success"; 

    $stmt->close(); 
    $conn->close(); 

AngularJS, Update 2

var variableName = {id:'1', coachName:'AA', contractArea:'BB', attendance:'CC'}; 
    $http({ 
    method: 'POST', 
    url: "xxx/submit.php", 
    data: variableName, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    }).then(function(){ 
    console.log('Success'); 
    },function(){ 
    console.log('Error'); 
    }); 

PHP, Update 2

$servername = 'xxx'; 
$username = 'xxx'; 
$password = 'xxx'; 
$dbname = 'xxx'; 

$conn = new Mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    mail("[email protected]", "DB connect error", $db->connect_errno . ": " . $db->connect_error); 
} 

$id = '1'; 
$coachName = $_POST['coachName']; 
$contractArea = $_POST['contractArea']; 
$attendance = $_POST['attendance']; 

$stmt = $conn->prepare('INSERT INTO participants (id, coachName, contractArea, attendance) VALUE(?, ?, ?, ?)'); 
$stmt->bind_param('ssss', $id, $coachName, $contractArea, $attendance); 

$stmt->execute(); 

echo 'Success'; 

$stmt->close(); 


$conn->close(); 
+1

OMG перестает использовать расширение 'mysql_' уже –

+0

Я следую онлайн-учебнику, https://www.youtube.com/watch?v=h9KLLXtJZZM Я извиняюсь! –

+0

У вас есть лучшие предложения @AlonEitan? –

ответ

0

Потребовалось пару часов, много сообщений и поддержки со стороны сообщества Stack, но я, наконец, понял это.

Это то, что я закончил с:

AngularJS

/* Submit */ 
$scope.submit = function() { 
    var request = $http({ 
    method: "post", 
    url: 'xxx/submit.php', 
    data: { 
     id: '1', 
     coachName: 'B', 
     contractArea: '2', 
     attendance: 'C', 
    }, 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    }); 
}; 

PHP

<?php 

    $postdata = file_get_contents("php://input"); 
    $request = json_decode($postdata); 
    $id = $request->id; 
    $coachName = $request->coachName; 
    $contractArea = $request->contractArea; 
    $attendance = $request->attendance; 

    $servername = 'xxx'; 
    $username = 'xxx'; 
    $password = 'xxx'; 
    $dbname = 'xxx'; 

    $conn = new Mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_error) { 
    mail("[email protected]", "DB connect error", $db->connect_errno . ": " . $db->connect_error); 
    } 
    $stmt = $conn->prepare('INSERT INTO participants (id, coachName, contractArea, attendance) VALUES (?, ?, ?, ?)'); 
    $stmt->bind_param('ssss', $id, $coachName, $contractArea, $attendance); 

    $stmt->execute(); 

    echo 'Success'; 

    $stmt->close(); 

    $conn->close(); 

?> 

УСПЕХ
enter image description here

-1

Обновленный ответ

Угловая:

$scope.submit = function() { 
    $http.post('test.php', {'id':'3','coachName':'1','contractArea':'2','attendance':'4'}) 
     .success(function(data,status,headers,config){ 
      if(!data.success) 
       alert(data.message) 
      console.log(data); 
     }); 
} 

PHP

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    header('Content-Type:application/json'); 

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

    $servername = 'xxx'; 
    $username = 'xxx'; 
    $password = 'xxx'; 
    $dbname = 'xxx'; 

    try { 
    $dbh = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 

    $sql = 'INSERT INTO participants (id,coachName, contractArea, attendance) VALUES (?, ?, ?, ?)'; 
       $sth = $dbh->prepare($sql); 

    try { 

     $dbh->beginTransaction(); 

     $sth->execute(array(
         $data->id,//if id is string replace $data->id to '".$data->id."' 
         '".$data->coachName."', 
         '".$data->contractArea."', 
         '".$data->attendance."' 
        )); 

     $dbh->commit(); 

     echo json_encode(['success'=> true,'data'=>$sth->fetch(PDO::FETCH_ASSOC)]); 

    } catch(PDOExecption $e) { 
     $dbh->rollback(); 
     echo json_encode(['success'=>false,'message'=>$e->getMessage()]); 
    } 
} catch(PDOExecption $e) { 
    echo json_encode(['success'=>false,'message'=>$e->getMessage()]); 
} 

Он должен работать

+0

'$ _POST' будет пуст, если не изменить внешний конец для отправки данных с кодировкой формы – charlietfl

+0

@charlietfl Я считаю, что это то, что происходит, если я заменю $ _POST значениями, например, «2», это подталкивается к базе данных, но при использовании $ _POST ничего не подталкивает база данных - даже пустое значение. Есть ли у вас дополнительные предложения? –

+0

@Adam с использованием 'file_get_contents()' должен работать нормально. Попробуйте положить echo json_encode ($ data); exit, 'сразу после него и посмотреть, что возвращается в качестве данных ответа ... должно быть идентично тому, что вы отправили. – charlietfl

1

Я также использовал AngularJS и PHP в одном из моего проекта и столкнулся с той же проблемой, то Я наткнулся на что-то подобное. попробуйте добавить параметр headers в ваш запрос. Может быть, это поможет вам.

var variableName = {'id':'3','coachName':'1','contractArea':'2','attendance':'4'}) 
$http({ 
     method : 'POST', 
     url : "XXX/submit.php", 
     data : variableName, 
     headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function(){ 
       console.log('Success'); 
      },function(){ 
       console.log('Error'); 
     }); 

Я просто пытаюсь, если это не решит вашу проблему, пожалуйста, дайте мне знать.

+0

вы должны сами сериализовать данные, если вы переключите тип контента – charlietfl

+0

@GirdhariAgrawal на отправке консоль говорит об успехе, но при анализе базы данных ничего не добавляется, если только я не заменю значения $ _POST, например $ id = '1', после того как я заменил все значения $ _POST, данные успешно будут перенесены в базу данных. –

Смежные вопросы