2016-05-23 7 views
2

Ich versuche, einige Informationen in meine PHP-Datei von Swift zu posten. Meine PHP-Datei wird ausgeführt, aber die geposteten Variablen gelangen einfach nicht zur PHP-Datei. Was mache ich falsch?POST-Daten zu einer PHP-Methode von Swift

Swift Code:

@IBAction func buttonPress(sender: AnyObject) { 

     let request = NSMutableURLRequest(URL: NSURL(string: "http://www.domain.com/php_swift_test/insert.php")!) 
     request.HTTPMethod = "POST" 

     let postString = "a=test&b=bla" 
     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

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

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

      print("response = \(response)") 

      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("responseString = \(responseString)") 
     } 
     task.resume() 
    } 

PHP-Code:

<?php 
    @session_start(); 
    @ob_start(); 

    $host='localhost'; 
    $user='test'; 
    $password='Passw0rd99'; 
    $db_name="mysql_test"; 

    $connection = mysql_connect($host,$user,$password); 

    $a = $_POST['a']; 
    $b = $_POST['b']; 

    if(!$connection){ 
     die('Connection Failed'); 
    } 
    else{ 
     $dbconnect = @mysql_select_db($db_name, $connection); 

     if(!$dbconnect){ 
      die('Could not connect to Database'); 
     } 
     else{ 
      $query = "INSERT INTO res_club (FirstName, LastName) VALUES ('$a','$b')"; 
      mysql_query($query, $connection) or die(mysql_error()); 

      echo 'Successfully added.'; 
      echo $query; 
      echo $a.$b; 
     } 
    } 
?> 

Eine leere Zeile wird in die Datenbank aufgenommen, ohne Vornamen und Nachnamen. Die PHP-Datei erhält nicht die $_Post['a'] und b

Die Echo-Anweisung, echo $a.$b bleibt auch leer. Es werden keine Fehler angezeigt.

+0

Erhalten Sie einen Fehler entdeckt? Wenn ja, zeigen Sie uns, was der Fehler war und/oder was der 'responseString' war. Das wird helfen, grundlegende Probleme zu diagnostizieren. Vielleicht können Sie den PHP-Code teilen, da das Problem dort liegen kann (z. B. sucht er wirklich nach einer Anfrage "application/x-www-formurlencoded"). BTW, hast du die 'NSAppTransportSecurity' in deiner' info.plist' gesetzt? http://stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http/31254874#31254874. Sie können auch den Header "Content-Type" festlegen, obwohl dies normalerweise nicht unbedingt erforderlich ist. – Rob

+0

Keine Fehler angezeigt. Ich habe meinen PHP-Code oben ... in.plist und Inhaltstyp hinzugefügt. Sind das Dinge, die ich in Xcode machen würde? oder auf dem Server? –

+0

Aber Sie sehen die "responseString" Nachricht, die vermutlich "Nachricht erfolgreich hinzugefügt" und Ihre "$ query" zeigt? Wenn Sie "Antwort" drucken, sehen Sie dann einen Statuscode von 200? Re 'info.plist' Änderung, ich bin überrascht, dass es überhaupt funktioniert, wenn Sie' http: // '-Schema auf iOS 9 verwendet haben (wenn Sie' https: // 'haben, obwohl es nicht benötigt wird). Aber das kann nicht das Problem sein, denn das hätte zu einer Fehlermeldung geführt. – Rob

Antwort

2

Das funktionierte für mich.

Video - https://youtu.be/wYkZ47Rz8iU

Swift Code - Beispiel

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.kandidlabs.com/YouTube/SwiftToMySQL/insert.php")!) 
     request.HTTPMethod = "POST" 
     let postString = "a=\(usernametext.text!)&b=\(password.text!)&c=\(info.text!)&d=\(number.text!)" 
     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

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

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

      print("response = \(response)") 

      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("responseString = \(responseString)") 
     } 
     task.resume() 

PHP-Code - Beispiel

<?php 
    $host='localhost'; 
    $user='root'; 
    $password=''; 

    $connection = mysql_connect($host,$user,$password); 

    $usernmae = $_POST['a']; 
    $pass = $_POST['b']; 
    $info = $_POST['c']; 
    $num = $_POST['d']; 

    if(!$connection) 
    { 
     die('Connection Failed'); 
    } 
    else 
    { 
     $dbconnect = @mysql_select_db('YoutubeTutorialDB', $connection); 

     if(!$dbconnect) 
     { 
      die('Could not connect to Database'); 
     } 
     else 
     { 
      $query = "INSERT INTO `YoutubeTutorialDB`.`Users` (`Username`, `Password`, `Info`, `FavoriteNumber`) 
       VALUES ('$username','$pass','$info','$num');"; 
      mysql_query($query, $connection) or die(mysql_error()); 

      echo 'Successfully added.'; 
      echo $query; 
     } 
    } 
?> 
+0

Danke, hat auch für mich gearbeitet –