47019


開発初心者の質問で分かりにくい点が多々あるかと存じますが、ご了承くださいませ。  
「Objective-C」にて「AFNetworking3.0」のライブラリを活用して、サーバー上（centOS7)  
にデータの送信を試みているのですが、Xcodeにて以下のエラーが発生して、データの送信ができません。エラーの原因と解決方法がお分かりになる方、ご教示頂きたく存じます。

> ■エラー内容（ビルド実行後に表示されたエラー）  
>  omain=com.alamofire.error.serialization.response Code=-1011 "Request
> failed: internal server error (500)"
> UserInfo={NSLocalizedDescription=Request failed: internal server error
> (500), NSErrorFailingURLKey=<http://xxx.xxx.xx.xxx/send_request.php>,
> com.alamofire.serialization.response.error.data=<>,
> com.alamofire.serialization.response.error.response= { URL:
> <http://xxx.xxx.xx.xxx/send_request.php> } { Status Code: 500, Headers {  
>  Connection = (  
>  close  
>  );  
>  "Content-Length" = (  
>  0  
>  );  
>  "Content-Type" = (  
>  "text/html; charset=UTF-8"  
>  );  
>  Date = (  
>  "Thu, 26 Jul 2018 05:59:04 GMT"  
>  );  
>  Server = (  
>  "Apache/2.4.6 (CentOS) PHP/7.1.19"  
>  );  
>  "X-Powered-By" = (  
>  "PHP/7.1.19"  
>  );  
>  } }}

■Objective-C（ビルド実行した内容）

[code]

    - (void)send_request
    {
    AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
    NSDictionary* postparam = @{ @"table_name" : @"test_json",
                                 @"addtext1"   : @"add_A",
                                 @"addtext2"   : @"add_B",
                                 @"addtext3"   : @"add_C"};
    [manager POST:@"http://XXX.XXX.XX.XXX/send_request.php"
       parameters:postparam progress:nil
          success:^(NSURLSessionTask* task, id responseObject) {
              //通信成功
              NSLog(@"成功response: %@", responseObject);
          }
          failure:^(NSURLSessionTask* operation, NSError* error) {
              //通信失敗
              NSLog(@"失敗Error: %@", error);
          }];
    }
    
[/code]

> 補足情報  
>  データベース名：test  
>  テーブル名：test_json  
>  フィールド１：field_A  
>  フィールド２：field_B  
>  フィールド３：field_C  
>  Apache/2.4.6 (CentOS)  
>  PHP/7.1.19"  
>  MySQL 5.7.22

■Databaseclass.php（サーバー上にアップしたファイル１）

[code]

    <?php
    mb_language("uni");
    mb_internal_encoding("utf-8");
    mb_http_input("auto");
    mb_http_output("utf-8");
    class Database{
    var $dbServer;
    var $dbName;
    var $dbUser;
    var $dbPass;
    var $link;
    var $db;
    var $query;
    
    function Database1($db_name)
    {
    
        $this->dbServer="localhost";
        $this->dbName=$db_name;
        $this->dbUser="ユーザ名";
        $this->dbPass="パスワード";
    
        $this->link=mysql_connect($this->dbServer,
                                  $this->dbUser,
                                  $this->dbPass)
        or
        die(exit);
    
        $this->db=mysql_select_db($this->dbName,$this->link);
    
        $this->query=mysql_query('SET NAMES utf8',$this->link);
    }
    
    public function close()
    {
        return mysql_close($this->link);
    }
    
    public function select($query)
    {
        $result=mysql_query($query);
        $row=array();
        $row=mysql_fetch_assoc($result);
        return $row;
    }
    
    public function query($query)
    {
        return mysql_query($query);
    }
    
    public function jsonparse($query)
    {
        $row = mysql_fetch_object($query);
        return $row;
    }
    }
    ?>
    
[/code]

■send_request.php（サーバー上にアップしたファイル２）

[code]

    <?php
    include_once "DatabaseClass.php";
    
    if($_POST["table_name"] && $_POST["addtext1"] 
    && $_POST["addtext2"] && $_POST["addtext3"])
    {
    $table_name = $_POST["table_name"];
    $addtext1 = $_POST["addtext1"];
    $addtext2 = $_POST["addtext2"];
    $addtext3 = $_POST["addtext3"];
    
    $database = new Database("test");
    
    $sql = "INSERT INTO {$table_name} (field_A,field_B,field_C) VALUES ('{$addtext1}','{$addtext2}','{$addtext3}');";
    
    $query = $database->query($sql);
    
    $sql = ("SELECT * FROM {$table_name}");
    
    $query = $database->query($sql);
    $json= array();
    
    if(strstr($table_name, 'test_json')){
      while ($row = mysql_fetch_object($query)) {
          $json[] = array(
             'field_A'=> $row->field_A
             ,'field_B'=> $row->field_B
             ,'field_C' => $row->field_C
          );
      }
    }//if(strstr($table_name, 'test_json'))
    
    
    header("Content-Type: application/json; charset=utf-8");
    echo json_encode($json);
    
    $database->close();
    
    }//if($_POST["table_name"])
    ?>
    
[/code]


CC BY-SA 4.0
2018-07-26T05:34:10.677
46981
2018-07-27T05:33:30.767
2018-07-26T07:09:55.760
29466
29466
question
php objective-c
iOSアプリからサーバ上のDBにデータを送信できない件


PHPのコードをざっと見た感じですが、コードに誤りがあります。

Databaseclass.phpの

[code]

    function Database1($db_name)
    
[/code]

は

[code]

    function __construct($db_name)
    
[/code]

だと思います。  
send_request.phpの

[code]

    $database = new Database("test");
    
[/code]

でコンストラクタを呼び出そうとしているようですが、  
コンストラクタの指定が適切ではないため、DBへの接続のコードが実行されていません。  
直接の原因ではないかもしれませんが、参考にしてください。

あと、mysql_*系を利用されていますが、これらのコードは古いです。  
PHP7以降では削除され、利用できなくなっているのでご注意ください。

以下「<http://php.net/manual/ja/function.mysql-query.php>」より

> 警告 この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは  
>  PDO_MySQL を使うべきです。詳細な情報は MySQL: API の選択 や それに関連する FAQ を参照ください。  
>  この関数の代替として、これらが使えます。
>
> mysqli_query()  
>  PDO::query()

ここまで書いて、環境の「PHP/7.1.19」に気が付きました。  
上記の理由の通り、mysql_*系は削除され動作しません。  
そのせいで500が出ている可能性が高いです。


CC BY-SA 4.0
2018-07-27T05:27:36.430
47019
2018-07-27T05:33:30.767
2018-07-27T05:33:30.767
17014
17014
46981
answer