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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

1回答

888閲覧

PHPのPDO接続でレコードをDELETE出来ない

scrollman

総合スコア83

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2018/09/03 18:33

編集2018/09/03 22:21

前置き

Wordpressの便利な部分を活用しつつ一つのDBでは不可能/難しい/面倒臭い(と思う)複雑(だと思う)な複数DBシステムを構築し、そちらを外部PHPで操作する、といったことをやっています。

やりたいこと

コース内のプランこと、レコードを消去するSQL文を実行したいです。
コース=テーブル
プラン=レコード
という感じです。

発生している問題

下の実験1はSHOW TABLESでしっかりテーブルの一覧が表示されるので、データベースに接続できてはいるのですが、
上のレコードを消去するSQL文が機能してくれません。

var_dumpによると
bool(false)
だそうです。

PHP

1echo 'プランを消去します'; 2 3try{ 4 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 5 $stmt = $pdo->query('DELETE FROM consumercourse WHERE planid=test'); 6 echo '<br>'; 7 var_dump($stmt); 8}catch(PDOException $e){ 9 echo 'Connection failed: ' . $e->getMessage(); 10 var_dump($e); 11 echo 'エラーが発生しました。'; 12} 13 14 15//実験1⇓ 16if (isset($db_address_3) && isset($db_datebase_6) && isset($db_user) && isset($db_password)) { 17try{ 18 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 19 foreach($pdo->query('SHOW TABLES') as $row) { 20 print_r($row); 21 } 22}catch(PDOException $e){ 23 echo 'Connection failed: ' . $e->getMessage(); 24 var_dump($e); 25 echo 'エラーが発生しました。'; 26} 27} else { 28 echo 'データが格納されていません'; 29}

証拠画像

![証拠画像
PHPMyAdminによるとこのようになっています。
testの行が消去されるはずなんですが…

環境

  • ロリポップ
  • MYSQL
  • Wordpress

+の質問

回答者様によってレコードの消去方法が判明しましたが、次はちょっと別のトラブルが発生しました。

やりたい事

SQL文への変数代入方法が知りたいです。

PHP

1 2echo 'プランを消去します'; 3//コース=テーブルの取得 4$select = $_GET['courseselect']; 5//レコード=プランの取得 6$planid = $_GET['p_delete']; 7 8echo '<br>'; 9echo "$select"; 10echo '<br>'; 11echo "$planid"; 12//しっかり取得できてはいる↑ 13 14try{ 15 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 16 //テーブル(コース)とレコード(プラン)の変数をSQL文に代入したい↓ 17 $stmt = $pdo->query("DELETE FROM ' . $select . ' WHERE planid='' . $planid . ''"); 18 //foreach($pdo->query('DELETE FROM consumercourse WHERE planid=test') as $row) { 19 echo '<br>'; 20 var_dump($stmt); 21 //} 22}catch(PDOException $e){ 23 //ここで補足される例外はコネクションだけではない 24 // 25 echo 'Connection failed: ' . $e->getMessage(); 26 var_dump($e); 27 echo 'エラーが発生しました。'; 28} 29 30echo '<br>'; 31 32if (isset($db_address_3) && isset($db_datebase_6) && isset($db_user) && isset($db_password)) { 33try{ 34 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 35 foreach($pdo->query('SHOW TABLES') as $row) { 36 print_r($row); 37 echo '<br>'; 38 var_dump($row); 39 } 40}catch(PDOException $e){ 41 //ここで補足される例外はコネクションだけではない 42 //echo 'Connection failed: ' . $e->getMessage(); 43 var_dump($e); 44 echo 'エラーが発生しました。'; 45} 46} else { 47 echo 'データが格納されていません'; 48} 49

こちらが↑のファイルの上位にあるファイルです

PHP

1$select = $_GET['courseselect']; 2$db_address_1 = 'hogehoge.phy.lolipop.lan'; 3$db_address_2 = 'hogehoge.phy.lolipop.lan'; 4$db_address_3 = 'hogehoge.phy.lolipop.lan'; 5 6$db_user = 'hogehogehoge'; 7$db_password = 'hogehogehoge'; 8 9$db_datebase_1 = 'hogehoge-hogehogehoge'; 10$db_datebase_2 = 'hogehoge-hogehogehoge'; 11$db_datebase_3 = 'hogehoge-hogehogehoge'; 12$db_datebase_4 = 'hogehoge-hogehogehoge'; 13$db_datebase_5 = 'hogehoge-hogehogehoge'; 14$db_datebase_6 = 'hogehoge-hogehogehoge'; 15 16//接続方法が原始的なのはお許しください 17$conn = mysql_connect($db_address_3, $db_user, $db_password); 18 19if (!$conn) { 20 echo "データベースに接続できません: " . mysql_error(); 21 exit; 22} 23 24if (!mysql_select_db($db_datebase_6)) { 25 echo "データベースを選択できません: " . mysql_error(); 26 exit; 27} 28$result = mysql_query('SET NAMES utf8', $conn); 29$sql = "SELECT planid, planname, plandescription, initialfee, monthlycost, video, consultation 30 FROM $select"; 31 32$result = mysql_query($sql); 33 34if (!$result) { 35 echo "データベース/テーブルを読み込めません ($sql) from DB: " . mysql_error(); 36 exit; 37} 38 39if (mysql_num_rows($result) == 0) { 40 echo "このコースにはまだプランがないようです。"; 41} 42 43print('<table class="wp-list-table widefat fixed striped pages">'); 44while ($row = mysql_fetch_assoc($result)) { 45 print('<tr>'); 46 print('<td>'); 47 print $row["planid"]; 48 print('</td>'); 49 print('<td>'); 50 print $row["planname"]; 51 print('</td>'); 52 print('<td>'); 53 print $row["plandescription"]; 54 print('</td>'); 55 print('<td>'); 56 print $row["initialfee"]; 57 print('</td>'); 58 print('<td>'); 59 print $row["monthlycost"]; 60 print('</td>'); 61 print('<td>'); 62 print $row["video"]; 63 print('</td>'); 64 print('<td>'); 65 print $row["consultation"]; 66 print('</td>'); 67 print('<td>'); 68 $planid = $row["planid"]; 69 $url = admin_url(); 70 print '<a href=admin.php?page=hogehoge_system_setting&courseselect=' . $select . '&p_edit=' . $planid . ' ”>プランを編集する</a>'; 71 print('</td>'); 72 print('<td>'); 73 print '<a href=admin.php?page=hogehoge_system_setting&courseselect=' . $select . '&p_delete=' . $planid . ' ”>プランを消去する</a>'; 74 print('</td>'); 75 print('</tr>'); 76} 77print('</table>'); 78 79$p_edit = $_GET['p_edit']; 80$p_delete = $_GET['p_delete']; 81 82mysql_free_result($result); 83if (isset($p_edit) or isset($p_delete)) { 84 if (isset($p_edit)) { 85 require_once ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/planedit.php'); 86 87 } 88 if (isset($p_delete)) { 89 require ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/plandelete.php'); 90 91 } 92} else { 93 require_once ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/planadd.php'); 94}

これ↑の更に上位のファイルに、

PHP

1 $client = $_GET['adminsystempage']; 2 if (is_null($client)) { 3 4 $db_address_1 = 'hogehoge.phy.lolipop.lan'; 5 $db_address_2 = 'mysql103.phy.lolipop.lan'; 6 $db_address_3 = 'mysql132.phy.lolipop.lan'; 7 8 $db_user = 'hogehoge'; 9 $db_password = 'hogehoge'; 10 11 $db_datebase_1 = 'hogehoge-hogehoge'; 12 $db_datebase_2 = 'hogehoge-hogehoge'; 13 $db_datebase_3 = 'hogehoge-hogehoge'; 14 $db_datebase_4 = 'hogehoge-hogehoge'; 15 $db_datebase_5 = 'hogehoge-hogehoge'; 16 $db_datebase_6 = 'hogehoge-hogehoge'; 17 try{ 18 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 19 $stmt = $pdo->query('SHOW TABLES'); 20 print('<table class="wp-list-table widefat fixed striped pages">'); 21 while($a_course = $stmt->fetch(PDO::FETCH_ASSOC)){ 22 print('<tr>'); 23 print('<td>'); 24 $course = $a_course["Tables_in_LAA0547874-familiacours"]; 25 echo "$course"; 26 print('</td>'); 27 print('<td>'); 28 $title1 = 'コースを編集する'; 29 $url = admin_url(); 30 print '<a href="' . $url . 'admin.php?page=familia_system_setting&courseselect=' . $course . '">'.$title1.'</a><br />'; 31 print('</td>'); 32 print('<td>'); 33 $title2 = 'コースを消去する'; 34 $url = admin_url(); 35 print '<a href="' . $url . 'admin.php?page=familia_system_setting&coursedelete=' . $course . '">'.$title2.'</a><br />'; 36 print('</td>'); 37 print('</tr>'); 38 echo '<br>'; 39 } 40 print('</table>'); 41 }catch(PDOException $e){ 42 //ここで補足される例外はコネクションだけではない 43 //echo 'Connection failed: ' . $e->getMessage(); 44 var_dump($e); 45 echo 'エラーが発生しました。'; 46 } 47 }else { 48 $coursename = $_POST['coursename']; 49 if (is_null($coursename)) { 50 echo ' 51 <form action="" method="POST"> 52 <label>コース名</label><br> 53 <input type="text" name="coursename"><br> 54 <input type="submit" value="コースを追加する" /><br> 55 </form 56 '; 57 }else { 58 59 try { 60 var_dump($coursename); 61 $db_address_1 = 'hogehoge.phy.lolipop.lan'; 62 $db_address_2 = 'mysql103.phy.lolipop.lan'; 63 $db_address_3 = 'mysql132.phy.lolipop.lan'; 64 65 $db_user = 'hogehoge'; 66 $db_password = 'hogehoge'; 67 68 $db_datebase_1 = 'hogehoge-hogehoge'; 69 $db_datebase_2 = 'hogehoge-hogehoge'; 70 $db_datebase_3 = 'hogehoge-hogehoge'; 71 $db_datebase_4 = 'hogehoge-hogehoge'; 72 $db_datebase_5 = 'hogehoge-hogehoge'; 73 $db_datebase_6 = 'hogehoge-hogehoge'; 74 75 $conn = new PDO("mysql:host=$db_address_3;dbname=$db_datebase_6", $db_user, $db_password); 76 // set the PDO error mode to exception 77 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 78 79 // sql to create table 80 $sql = "CREATE TABLE $coursename ( 81 planid TEXT(30), 82 planname TEXT(30), 83 plandescription TEXT(50), 84 initialfee INT(20), 85 monthlycost INT(20), 86 video INT(20), 87 consultation INT(20) 88 89 )"; 90 91 // use exec() because no results are returned 92 $conn->exec($sql); 93 echo "新規コーステーブルを作成しました。"; 94 } 95 catch(PDOException $e) 96 { 97 echo $sql . "<br>" . $e->getMessage(); 98 } 99 $conn = null; 100 } 101 }

とあります

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/03 22:04 編集

蒸し返したいわけじゃないんですが、WordPressで導入されたテーブル・データなのであればWordPressの機能による操作が基本なのでは・・。WordPress詳しいわけではないですが、自前で処理をガッツリ組む必要があるようには思えません。
scrollman

2018/09/03 22:10 編集

よく分からずに使っているので曖昧な事しかいえませんが、Wordpressのシステムで使っているDBとは別のデータベースを作成して使っているので、自前で作ったDBに接続して処理するには自前でここまで書かなきゃいけないのかなと思ってこうなりました。WPの中核となるDBと分けて使っているけど要所で併用しているといいますか…。WPの関数に複数のデータベースを選択可能な便利なものがあるのかもしれませんけど。
m.ts10806

2018/09/03 22:12

なるほど。であればその経緯は書かれた方が良いですね。WordPressがタグと環境情報にあるとWordPress配下にあるテーブルに対するアプローチという印象を受けます。何に重きを置くかというところなのでそれで結構回答の方向性が変わってきます。別のテーブルではなく別のDBなのであればむしろWordPressという情報提示は蛇足にも感じます。
scrollman

2018/09/03 22:15

確かにですね。前置きにそこの説明を追記しようと思います。
退会済みユーザー

退会済みユーザー

2018/09/03 23:33

にしてもsqlインジェクションがマッハなソース
scrollman

2018/09/04 17:53 編集

今セキュリティの知識を入れようとしたらパンクしちゃいますし、セキュリティはとりあえず全部を組み終わってからじっくり見直しかなーと…。
guest

回答1

0

ベストアンサー

クエリが間違っているからですね。

sql

1$stmt = $pdo->query("DELETE FROM consumercourse WHERE planid='test'");

php

1$pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

↑ 第4引数を設定しましょう。


サンプル

すぐに理解は難しいかもしれませんが、ざっくりと動きがわかればOKかと。

php

1<?php 2 3/** 4 * common.php 5 * 6 * @author Kosuke Shibuya <kosuke@jlamp.net> 7 * @since 2018/09/04 8 */ 9function h($string) 10{ 11 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 12} 13 14function get_pdo($host, $dbname) 15{ 16 $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8mb4' 17 , $host 18 , $dbname 19 ); 20 $user = 'root'; 21 $password = 'password'; 22 $options = [ 23 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 24 ]; 25 return new PDO($dsn, $user, $password, $options); 26} 27 28function select($host, $dbname, $sql, $params = []) 29{ 30 $pdo = get_pdo($host, $dbname); 31 $stmt = $pdo->prepare($sql); 32 $stmt->execute($params); 33 return $stmt->fetchAll(); 34} 35 36function delete($host, $dbname, $sql, $params = []) 37{ 38 $pdo = get_pdo($host, $dbname); 39 $stmt = $pdo->prepare($sql); 40 return $stmt->execute($params); 41} 42 43function get_hosts() 44{ 45 return [ 46 'hogehoge.phy.lolipop.lan' 47 , 'hogehoge.phy.lolipop.lan' 48 , 'hogehoge.phy.lolipop.lan' 49 ]; 50} 51 52function get_database() 53{ 54 return [ 55 'LAA0547874-hogehogehoge' 56 , 'LAA0547874-hogehogehoge' 57 , 'LAA0547874-hogehogehoge' 58 , 'LAA0547874-hogehogehoge' 59 , 'LAA0547874-hogehogehoge' 60 ]; 61} 62 63function get_courses() 64{ 65 $host = filter_input(INPUT_GET, 'host'); 66 $dbname = filter_input(INPUT_GET, 'dbname'); 67 68 if ($host == '' || $dbname == '') { 69 return; 70 } 71 72 $sql = 'SELECT * FROM `consumercourse`'; 73 return select($host, $dbname, $sql); 74} 75 76function delete_course() 77{ 78 $host = filter_input(INPUT_GET, 'host'); 79 $dbname = filter_input(INPUT_GET, 'dbname'); 80 $planid = filter_input(INPUT_GET, 'planid'); 81 82 if ($host == '' || $dbname == '' || $planid == '') { 83 throw new Exception('パラメーターが不正です。'); 84 } 85 86 $sql = 'DELETE FROM consumercourse WHERE planid = :planid'; 87 $params = []; 88 $params[':planid'] = $planid; 89 return delete($host, $dbname, $sql, $params); 90} 91

php

1<?php 2/** 3 * index.php 4 */ 5// 開発時にエラーを表示する 6ini_set('display_errors', true); 7error_reporting(E_ALL); 8 9// 共通関数読み込み 10require_once 'common.php'; 11 12$hosts = get_hosts(); 13$databases = get_database(); 14$courses = get_courses(); 15?> 16<!DOCTYPE HTML> 17<html lang="ja"> 18 <head> 19 <meta charset="UTF-8"> 20 <title></title> 21 </head> 22 <body> 23 <div> 24 <form action=""> 25 <p> 26 <label for="host">ホスト</label> 27 <select name="host" id="host"> 28 <?php foreach ($hosts as $host) : ?> 29 <option value="<?php echo h($host); ?>"><?php echo h($host); ?></option> 30 <?php endforeach; ?> 31 </select> 32 </p> 33 <p> 34 <label for="dbname">データベース</label> 35 <select name="dbname" id="dbname"> 36 <?php foreach ($databases as $db) : ?> 37 <option value="<?php echo h($db); ?>"><?php echo h($db); ?></option> 38 <?php endforeach; ?> 39 </select> 40 </p> 41 </form> 42 </div> 43 <div> 44 <p>コース一覧</p> 45 <?php if (!is_null($courses)) : ?> 46 <table> 47 <thead> 48 <tr> 49 <th>planid</th> 50 <th>planname</th> 51 <th>plandescription</th> 52 <th>initialfee</th> 53 <th>monthlycost</th> 54 <th>video</th> 55 <th>consultation</th> 56 <th></th> 57 <th></th> 58 </tr> 59 </thead> 60 <tbody> 61 <?php foreach ($courses as $course): ?> 62 <tr> 63 <td><?php echo h($course['planid']); ?></td> 64 <td><?php echo h($course['planname']); ?></td> 65 <td><?php echo h($course['plandescription']); ?></td> 66 <td><?php echo h($course['initialfee']); ?></td> 67 <td><?php echo h($course['monthlycost']); ?></td> 68 <td><?php echo h($course['video']); ?></td> 69 <td><?php echo h($course['consultation']); ?></td> 70 <td> 71 <a href="delete.php?host=<?php echo filter_input(INPUT_GET, 'host'); ?>&dbname=<?php echo filter_input(INPUT_GET, 'dbname'); ?>&planid=<?php echo h($course['planid']); ?>">削除する</a> 72 </td> 73 </tr> 74 <?php endforeach; ?> 75 </tbody> 76 </table> 77 <?php else: ?> 78 <p>ホスト、データベースを選択してください。</p> 79 <?php endif; ?> 80 </div> 81 </body> 82</html>

php

1<?php 2 3/** 4 * delete.php 5 */ 6// 開発時にエラーを表示する 7ini_set('display_errors', true); 8error_reporting(E_ALL); 9 10// 共通関数読み込み 11require_once 'common.php'; 12 13delete_course();

投稿2018/09/03 18:35

編集2018/09/03 19:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scrollman

2018/09/03 18:42 編集

お早い回答ありがとうございます。 お陰様で動きました。 引数のほうは了解です。 ちなみに、SQL文の変数代入はどのようにすればよろしいのでしょうか? $stmt = $pdo->query("DELETE FROM consumercourse WHERE planid='' . $planid . ''"); このようにしてみたのですが、動かなくて…
退会済みユーザー

退会済みユーザー

2018/09/03 18:40

「変数代入」とはなんのことを言っているんですか?
scrollman

2018/09/03 18:50 編集

差し支えなければ、 $stmt = $pdo->query("DELETE FROM consumercourse WHERE planid='' . $planid . ''"); planのほうに変数を代入する方法を教えていただきたいです。
退会済みユーザー

退会済みユーザー

2018/09/03 18:50 編集

質問するのはいいんだけど、ちゃんと説明すべきことを説明してくれないかな? $planid ってだいたいどこに由来するもの?ユーザーが任意で番号を指定する?フォームからくる? その辺の説明なしに何をしてくれと言うんだい? だいたいのコード、今突然出てきているんだが。質問文にそのコード書かれてないよ。
scrollman

2018/09/03 18:55 編集

申し訳ございません。 元々このPHPファイルはレコード消去用のものでして、 URLパラメーターから planidを取得し、 それをSQL文に代入して処理をする、ようにするのが最終到達時点だったのです。 取得するところまでは出来ているので、後はそれをSQL文に当てはめる方法を教えていただければ助かります。 新しい質問のほうで質問したほうがよかったでしょうか…?
退会済みユーザー

退会済みユーザー

2018/09/03 18:57

質問文に追記してください。HTMLからパラメータを渡すところから。
scrollman

2018/09/03 18:57

了解いたしました。
scrollman

2018/09/03 19:08

これで質問できますでしょうか?
退会済みユーザー

退会済みユーザー

2018/09/03 19:11 編集

function とか、require はまだ使ったことない感じですか? 使ったことなくてもいいけど、理解できる範囲ですかね?
scrollman

2018/09/03 19:12

function ⇨関数作れたりして他でいろいろ使えるんだなー require ⇨別のPHPファイル読み込めるんだなー という認識です…。
退会済みユーザー

退会済みユーザー

2018/09/03 19:16

PHP以外に理解できる言語もない感じですか?
scrollman

2018/09/03 19:17

そうですね、 昔ちょっとだけVBSやったなー ぐらいなものです。
退会済みユーザー

退会済みユーザー

2018/09/03 19:22

直すべきところが多すぎるので、ほぼ全面書き直しになるけど構わないですかね?
scrollman

2018/09/03 19:24

少しでも学べればと思います。 差し支えなければお願いいたします。
退会済みユーザー

退会済みユーザー

2018/09/03 19:37

$_GET['courseselect'];の由来が不明です
scrollman

2018/09/03 19:43

上位のファイル内容を追記いたしました。
退会済みユーザー

退会済みユーザー

2018/09/03 20:02 編集

DBやホストを外部から与えられると言う仕様は危険なので、バリデーションを加える必要があります。なのでリストでもって、チェック可能な拡張ができるようにしています。get_pdo() の中でチェックすればOKでしょう。
scrollman

2018/09/03 20:04

夜遅くに(もう夜明けか)こんなに長いコードを書いてくれてありがとうございました。 すぐに応用!とかは難しいですが、じっくり読んでいつかはものにできればと思います。
退会済みユーザー

退会済みユーザー

2018/09/03 20:08 編集

コピペして動いた!ラッキーで終わらせないでくださいね。 データベースまでは作って試してはいないので、多少ミスはあるだろうけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問