2017-12-23 17 views
2

Swift 3.0を使用しているXcodeに問題があります。私はPHPでmysqlデータベースに情報を保存したいと思います。 phpコードに達しましたが、挿入リクエストで常に失敗を返します。私は知らない、それはアンドロイドでうまく動作します。ここに私のコードは次のとおりです。POSTが動作しないSWIFT PHP

スウィフト:

@IBAction func SignUp(_ sender: UIButton) { 
    var Name1: String = Name.text! 
    var Prenom: String = PRENAME.text! 
    var add: String = Addr.text! 
    var code:String = CP.text! 
    var mail:String = Email.text! 
    var pass:String = password.text! 


    var request = URLRequest(url: URL(string: "http://www.example.com/myscript.php")!) 
    request.httpMethod = "POST" 
    let postString = "name=\(Name1)&pname=\(Prenom)&add=\(add)&pc=\(code)&mail=\(mail)&pass=\(pass)" 
    request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data, error == nil else {             // check for fundamental networking error 
      print("error=\(error)") 
      return 
     } 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 
     } 

     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 
} 

そして、私のPHPコード:

<?php 

$reponse = array(); 



$pseudo = $_POST['name']; 
$score = $_POST['pname']; 
$add = $_POST['add']; 
$pc = $_POST['pc']; 
$mail = $_POST['mail']; 
$password = $_POST['pass']; 
$mysqli = new MySQLi("host","root","pass","user"); 

$result = $mysqli->query("INSERT INTO compte (Name,Name2,Ad,code,maiil,pass) VALUES('$pseudo','$score','$add','$pc','$mail','$password')"); 
if ($mysqli->connect_error){ 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
     . $mysqli->connect_error); 
} 
if($result){ 

    $response["success"] = 1; 
    $response["message"] = "SUCCESS!"; 

    echo json_encode($response); 
} 
else{ 
    $response["success"] = 0; 
    $response["message"] = "FAILURE!"; 

    echo json_encode($response); 
} 
+0

アプリケーションは、問題が何であるかを教えていないとの事は時々データベース作業で挿入ですが、時々ではありません。だから、私は完全に失われています... –

+0

失敗した場合、あなたはクエリを返します。エラーコードは返されていません。 '' FAILURE! ''の代わりに' $ mysqli-> error'を返すことをお勧めします。また、失敗した接続のテストは、クエリを実行する前に実行する必要があります。 – Rob

+0

ありがとう!私は私のデータベースのメールを複製することを忘れてしまった、すべてがうまくいけば、それは完璧に動作します、ありがとう! –

答えて

0

思考のカップル:失敗した

  1. 、あなたの代わりにちょうど"FAILURE!"$mysqli->errorからmessageを設定する必要があり、それが失敗した理由を確認できます。

  2. クエリを実行する前に、「接続が失敗しました」というロジックを移動することをお勧めします。また、これを変更して、接続が失敗して終了したことを示すJSONを出力することをお勧めします。dieを実行するだけではありません。後でSwiftコードを改善してエラーを解析すると、すべてのサーバーメッセージをJSONとして保持すると便利です。

  3. real_escape_stringを使用してパラメータをエスケープするようにPHPを変更する必要があります。それがない場合、いずれかの値に'文字が含まれていると、SQLは失敗します。

  4. 要求のhttpBodyに含まれている値をエスケープする割合をSwiftに変更する必要があります。例はhttps://stackoverflow.com/a/28027627/1271826を参照してください。または、あなたのためにこれを処理するAlamofireのようなものを使用してください。それはスタンドとしてしかし:

    • をこれらの値のいずれかが+の文字が含まれている場合、それはおそらくスペースに置き換えられます。

    • これらの値のいずれかに&文字が含まれていると、そのフィールドが切り捨てられます。

    • これらの値のいずれかに他の予約文字が含まれていると、クエリ全体が失敗する可能性があります。

  5. 必須ではないが、私がお勧めしたい:スウィフトコードで

    • を、application/x-www-form-urlencodedへの要求とapplication/jsonへの要求のAcceptヘッダのContent-Typeヘッダを設定します。

      header("Content-Type: application/json"); 
      

      後で検証を実行Alamofire、同様に、ライブラリーを採用した場合、これは、任意であるが:PHPコードで

      request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
      request.setValue("application/json", forHTTPHeaderField: "Accept") 
      
    • は、あなたechoapplication/jsonにJSONをContent-Typeヘッダを設定しますこれらの標準ヘッダのために、あなたの人生を楽にします。

0

は、あなたができるよう

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

をInfo.plistファイルするためにこれを追加することを忘れないでくださいhttpまたはhttpsリクエストを送信する

- いずれかのパラメータに&が含まれていないことを確認して、値を正常に送信するか、%26で置き換えてください。

+0

申し訳ありませんが、私のURLは100%です。私はXcodeに正しく入力していますが、機密性のためにmyscript.phpを使用しています。また、PHPコードに達しても常に失敗を返します。 –

+0

更新を参照してください。 。 。 。 。 –

+0

私はinfo.plistでこれを行っています –

0

申し訳ありませんが、私の悪いことはすべてOKです。エラー、私は私のデータベース内のメールを複製することを忘れてしまった。大変ありがとうございます。そして良い週末を!

関連する問題