2016-10-20 7 views
0

HTMLページのPHPスクリプトにテキスト入力を投稿しようとしています。 iOSにエラーはなく、PHPはSQLデータベースに正常に投稿できます。何らかの理由で、iOSはphpスクリプトに値を正常に渡すことができません。HTTPリクエストでPHPに投稿できませんが、コードにエラーはありません

@IBOutlet weak var header: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    //helps the return button work 
    self.txt1.delegate = self 
    self.txt2.delegate = self 
    self.txt3.delegate = self 
    self.txt4.delegate = self 
    self.txt5.delegate = self 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

//Text Boxes 
@IBOutlet weak var txt1: UITextField! 
@IBOutlet weak var txt2: UITextField! 
@IBOutlet weak var txt3: UITextField! 
@IBOutlet weak var txt4: UITextField! 
@IBOutlet weak var txt5: UITextField! 

//function to make return button work.. 
func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    txt1.resignFirstResponder() 
    txt2.resignFirstResponder() 
    txt3.resignFirstResponder() 
    txt4.resignFirstResponder() 
    txt5.resignFirstResponder() 
    return true 
} 

//button action 

@IBAction func Submit(_ sender: AnyObject) { 
    let requestURL = URL(string: "*****") 

    //You should use `URLRequest` in Swift 3, mutability is represented by `var` 
    var request = URLRequest(url:requestURL!) 

    request.httpMethod = "POST" 

    //UITextField.text can be nil, you should treat nil cases 
    //(Generally avoid using forced unwrapping `!` as far as you can.) 
    let song = txt1.text ?? "" 
    let artist = txt2.text ?? "" 
    let album = txt3.text ?? "" 
    let year = txt4.text ?? "" 
    let genre = txt5.text ?? "" 

    //`song`,... are all Strings, you have no need to add `as String` 
    let songPost = "song=" + song 
    let artistPost = "&artist=" + artist 
    let albumPost = "&album=" + album 
    let yearPost = "&year=" + year 
    let genrePost = "&genre=" + genre 

    //You need to make a single data containing all params 
    //(Creating a concatenated String and getting `data` later would be another way.) 
    var data = Data() 
    data.append(songPost.data(using: String.Encoding.utf8)!) 
    data.append(artistPost.data(using: String.Encoding.utf8)!) 
    data.append(albumPost.data(using: String.Encoding.utf8)!) 
    data.append(yearPost.data(using: String.Encoding.utf8)!) 
    data.append(genrePost.data(using: String.Encoding.utf8)!) 
    request.httpBody = data 
    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)") 
      print(response) 

      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)") 
     } 
     //print response 
     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 

コンソールは、非常に大きなメッセージを出してくれるが、それはステータスコードが200であるべきと言うが、私はHTML上にある送信ボタンをヒットするコードの一部を412

足りませんさページ?ここで

PHPスクリプトです:

<html> 

    <head> 
    <title>Information Gathered</title> 
</head> 

<body> 

    <?php 

    echo "<p>Data Processed!</p>"; 

    $song = $_POST['song']; 
    $artist = $_POST['artist']; 
    $album = $_POST['album'];  
    $year = $_POST['year']; 
    $genre = $_POST['genre']; 

    echo $song . "</br>"; 
    echo $artist . "</br>"; 
    echo $album . "</br>"; 
    echo $year . "</br>"; 
    echo $genre . "</br>"; 

    DEFINE ('DB_USER', '****'); 
    DEFINE ('DB_PASSWORD', '****'); 
    DEFINE ('DB_HOST', '****'); 
    DEFINE ('DB_NAME', '****'); 

    $dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
    OR die('Could not connect to MySQL: ' . 
    mysqli_connect_error()); 

    $sql = "insert into music (song, artist, album, year genre) 
      values('$song', '$artist', '$album', '$year', '$genre',)"; 
    $dbc->query($sql) 
    echo "<p> Data Entered!!!</p>" 

    ?> 

</body> 

答えて

0

あなたがするinfo.plistでHTTPリクエストを許可されていることを確認してください。それ以外の場合は、保護されたAPIを呼び出すことしかできません。 https。 HTTPの

あなたのInfo.plist

add this row and item

412ステータスコードでこれを設定する呼び出しは、412のステータスコードは、要求が下になされた条件の一つが故障していることを示し

について説明しました。 1つ以上のRequest-Headerフィールドで指定された前提条件がfalseを返しました。

サーバは要求者は、要求に置く前提条件の一つを満たしていないが発生する理由。要求されたファイルに適用されない許容可能なファイルに関する情報を指定した要求のヘッダ。

+0

正確にはどういう意味ですか?私は2つの間に間違った通信があるかどうかを確認するためにPHPを追加しました、SQLデータベースは、アプリケーションを拒否している、またはアプリケーションは、PHPスクリプトを拒否ですか? – xteetsx

関連する問題