質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

データベースから取得したデータをテーブルビューに表示させたい!!

SERA0_0b
SERA0_0b

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

741閲覧

投稿2022/01/05 18:34

前提・実現したいこと

php経由でデータベースから取得したデータをswiftを使ってtableviewに一覧表示させたいです。
以下に記載されてるMySQLのデータ内のlidの列に保存されてるデータをswiftのテーブルビューに表示させたいです。
下に画像を載せましたが、プログラムを実行するとテーブルビューの部分が真っ白になって何も出てきません。
テーブルビューのコードの辺りがおかしいのか、JSONデータを解析する所あたりで間違っているのか、よくわからなくて困っております。
解決方法をご教示頂ければ幸いです。

エラーメッセージはありません。

該当のソースコード

swift

import UIKit class CourseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { let URL_COURSE_DATA = "https://hogehoge/dbApi.php" var courses: [String] = [] var sid:String! = "000" override func viewDidLoad() { super.viewDidLoad() let requestURL = NSURL(string: URL_COURSE_DATA) let request = NSMutableURLRequest(url: requestURL! as URL) request.httpMethod = "POST" let postParameters = "sid="+sid!; request.httpBody = postParameters.data(using: String.Encoding.utf8) let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in if error != nil { print("error is (error!)") return; } do { let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String:[String:String]] if let parseJSON = myJSON { for (key, value) in parseJSON { print(key) for (key2, value2) in value{ print(key2) self.courses.append(value2) } } } }catch{ print(error) } } task.resume() // Do any additional setup after loading the view. } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return courses.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // セルを取得する let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "coursecell", for: indexPath) // セルに表示する値を設定する cell.textLabel!.text = courses[indexPath.row] return cell }

PHP

<?php //dbApi.php //dbOperation.phpは下に記載してあります。 $response = array(); if($_SERVER['REQUEST_METHOD']=='POST'){ $sid = $_POST['sid']; require_once 'dbOperation.php'; $db = new dbOperation(); if($db->selectSQL($sid)){ $response = $db->selectSQL($sid)->fetchAll(); }else{ $response['error'] = true; } }else{ $response['error'] = true; } echo json_encode($response); ?>

PHP

<?php //dbOperation.php //config.phpにはデータベース名やデータベースhostの設定を記述 //dbConnect.phpにはPDOでの接続処理を記述 class dbOperation{ private $conn; function __construct(){ require_once 'config.php'; require_once 'dbConnect.php'; $db = new dbConnect(); $this->conn = $db->connect(); } public function selectSQL($sid){ $sql = "select lid from course where sid = ?"; $result = $this->conn->prepare($sql); $result->execute(array($sid)); return $result; } } ?>

MySQL

sid | lid 000 | hogehoge 000 | hagehage 000 | hugehuge

試したこと

テーブルビューのデリゲートやデータソースのアウトレットは紐付けました。

補足情報(FW/ツールのバージョンなど)

最終的にMySQLのlidに格納されてるhogehogeとかの一覧をテーブルビューで表示したいです。
イメージ説明
実行したらテーブルビューの部分が真っ白くなって何も出てきません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2022/01/05 19:17

まず、どこがうまくいってないのかを突き止める必要がありますね。 ・PHP + データベース: Postman や curl コマンドなどで直接アクセスして確認 ・Swift 通信処理: dataTask の結果 (data, response, error) や JSON への変換結果を print やデバッガなどを使って確認 ・テーブルビューの表示: とりあえず通信部分をいったん外して、ダミーのデータを直接セットして表示を確認
hoshi-takanori

2022/01/05 19:18

っと、よくみたら tableView を reloadData してないのでは。
m.ts10806

2022/01/05 21:11

PHPをデバッグするところからですね。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています