2015-12-05 10 views
1

Я пытаюсь отправить данные в php и вставить их в базу данных mysql, но она не работает. Я попытался отправить данные на php только для того, чтобы закодировать его на json и вернуть его обратно в swift, и он возвращает результат, поэтому это означает, что файл php получил данные. Однако вставка данных не работает.Быстрые данные httppost, не вставляемые в базу данных MySQL

swift2 HttpPost

func post() { 

    let myUrl = NSURL(string: "http://localhost:8080/json/json.php"); 
    let request = NSMutableURLRequest(URL:myUrl!); 
    request.HTTPMethod = "POST" 
    // Compose a query string 
    let postString = "firstName=James&lastName=Bond"; 

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil 
     { 
      print("error=\(error)") 
      return 
     } 

     // You can print out response object 
     print("response = \(response)") 

     // Print out response body 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 

     //Let’s convert response sent from a server side script to a NSDictionary object: 

     do{ 

      let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary 

      if let parseJSON = myJSON { 
       // Now we can access value of First Name by its key 
       let firstNameValue = parseJSON["firstName"] as? String 
       print("firstNameValue: \(firstNameValue)") 
      } 


     }catch let error as NSError { 
      print("JSON Error: \(error.localizedDescription)") 
     } 

    } 

    task.resume() 

} 

json.php

<?php 
// Read request parameters 
$firstName= $_REQUEST["firstName"]; 
$lastName = $_REQUEST["lastName"];// Store values in an array 

$conn = mysqli("localhost", "root", "root", "notify"); 

$query = mysqli_query($conn, "INSERT INTO user values('', '$firstName', 
'$lastName')"); 

?> 
+0

Где назвать ваши поля? Вы вставляете запрос не права проверки синтаксиса SQL первого –

+0

@RahulSaxena Это не обязательно ошибка SQL (как имена столбцов не являются обязательными, если вы поставляете все столбцы в 'INSERT' заявление). Но вы правы, поскольку лучше всего включать имена столбцов. – Rob

ответ

1

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

<?php 

// specify that this will return JSON 

header('Content-type: application/json'); 

// open database 

$con = mysqli_connect("localhost","user","password","notify"); 

// Check connection 

if (mysqli_connect_errno()) { 
    echo json_encode(array("success" => false, "message" => mysqli_connect_error(), "sqlerrno" => mysqli_connect_errno())); 
    exit; 
} 

// get the parameters 

$field1 = mysqli_real_escape_string($con, $_REQUEST["firstName"]); 
$field2 = mysqli_real_escape_string($con, $_REQUEST["lastName"]); 

// perform the insert 

$sql = "INSERT INTO user (first_name, last_name) VALUES ('{$field1}', '{$field2}')"; 

if (!mysqli_query($con, $sql)) { 
    $response = array("success" => false, "message" => mysqli_error($con), "sqlerrno" => mysqli_errno($con), "sqlstate" => mysqli_sqlstate($con)); 
} else { 
    $response = array("success" => true); 
} 

echo json_encode($response); 

mysqli_close($con); 

?> 

Примечания:

  1. Я не рекомендовал бы входить в систему root.

  2. Убедитесь, что вы используете mysqli_real_escape_string, чтобы защитить себя от атак SQL-инъекций (см. Пункт 1).

  3. Я не знаю, есть ли в вашей таблице user другие поля, но если это так, вы можете указать имена столбцов в инструкции insert. Даже если у вас есть только эти две колонки, это хороший способ «будущего доказательства» вашего кода.

  4. Примечание. Я изменил это для генерации ответа JSON. Я делаю это, потому что это упрощает код клиента для анализа и обработки ответа. Я оставлю вам NSJSONSerialization.

+0

Спасибо, я попробую. – rendell

+0

Излишне говорить, что это не решит проблему, но позволит вам ее диагностировать. Я подозреваю проблему аутентификации или проблему с именами таблиц/столбцов или что в этой таблице есть другие столбцы, которые не были указаны в SQL. Но пока мы не увидим сообщение об ошибке, мы не можем сказать. – Rob