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

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

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

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

Q&A

解決済

2回答

3094閲覧

気づけばプロ並みPHPでデータベースを更新できない

windowsaa

総合スコア16

PHP

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

0グッド

1クリップ

投稿2019/10/01 14:42

編集2019/10/04 01:52

「気づけばプロ並みPHP(リックテレコム」を使って勉強しています。わからないところがありまして質問させていただきます。

XAMPPを使って勉強しています。
スタッフの編集を実行する画面でつまづいてます。

実際に修正する画面になり、編集が完了しましたと出てもデーターベース上に反映されません。

以下に
編集画面(staff_edit.php)、編集確認(staff_edit_check.php)、編集実行(staff_edit_done.php)のソースコードを載せておくのでアドバイスお願いします。

また他に気づいた点があればご指摘いただけると嬉しいです。

追記ーーーーー
データベースの設定はできていて、データベース上では削除、編集を行うことはできています。 またXAMPPのバージョンは7.3.9です。

イメージ説明
イメージ説明

staff_edit.php

1<!DOCTYPE HTML> 2<html> 3 4<head> 5 <meta http-equiv="content-type" content="text/html;charset = UTF-8"> 6 <title>php基礎</title> 7</head> 8 9<body> 10 <?php 11 try { 12 $staff_code = $_GET['staffcode']; 13 14 // データベースに接続 15 $pdo = new PDO( 16 'mysql:dbname=shop;host=localhost;charset=utf8', 17 'root', 18 '', 19 [ 20 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 21 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 22 ] 23 ); 24 25 $sql = 'SELECT name FROM mst_staff WHERE mst_staff.code=?'; 26 $stmt = $pdo->prepare($sql); 27 $data[] = $staff_code; 28 $stmt ->execute($data); 29 30 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 31 $staff_name = $rec['name']; 32 33 $pdo = null; 34 35 /* データベースから値を取ってきたり, データを挿入したりする処理 */ 36 } catch (PDOException $e) { 37 38 // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する 39 // - もし手抜きしたくない場合は普通にHTMLの表示を継続する 40 // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい 41 header('Content-Type: text/plain; charset=UTF-8', true, 500); 42 echo 'ただいま障害により大変ご迷惑をおかけしています'; 43 exit($e->getMessage()); 44 } 45 46 // Webブラウザにこれから表示するものがUTF-8で書かれたHTMLであることを伝える 47 // (これか <meta charset="utf-8"> の最低限どちらか1つがあればいい. 両方あっても良い.) 48 header('Content-Type: text/html; charset=utf-8'); 49 50 ?> 51 52 スタッフ修正<br/> 53 <br/> 54 スタッフコード<br/> 55 <?php echo $staff_code;?> 56 <br/> 57 <br/> 58 <form method = "post" action = "staff_edit_check.php"> 59 <input type = "hidden" name = "code" value = "<?php $staff_code;?>"> 60 スタッフ名<br/> 61 <input type = "text" name = "name" style = "width:200px" value = "<?php echo $staff_name;?>"> <br/> 62 パスワードを入力してください<br/> 63 <input name = "pass" type = "password" style = "width:100px"><br/> 64 パスワードをもう一度入力してください<br/> 65 <input name = "pass2" type = "password" style = "width:100px"><br/> 66 <br/> 67 68 <input type = "button" onclick = "history.back()" value = "戻る"> 69 <input type = "submit" value ="OK"> 70 </form> 71 72 73</body> 74 75</html> 76

staff_edit_check.php

1<!DOCTYPE HTML> 2<html> 3 4<head> 5 <meta http-equiv="content-type" content="text/html;charset = UTF-8"> 6 <title>php基礎</title> 7</head> 8 9<body> 10 <?php 11$staff_code = $_POST['code']; 12$staff_name = $_POST['name']; 13$staff_pass = $_POST['pass']; 14$staff_pass2 = $_POST['pass2']; 15 16$staff_name = htmlspecialchars($staff_name); 17$staff_pass = htmlspecialchars($staff_pass); 18$staff_pass2 = htmlspecialchars($staff_pass2); 19 20if($staff_name == ''){ 21 echo 'スタッフ名が入力されていません<br/>'; 22} 23else{ 24 echo 'スタッフ名'; 25 echo $staff_name; 26 echo '<br/>'; 27} 28 29if($staff_pass == ''){ 30 echo 'パスワードが入力されていません<br/>'; 31} 32 33if($staff_pass != $staff_pass2){ 34 echo 'パスワードが一致しません<br/>'; 35} 36 37if($staff_name == '' || $staff_pass == ''|| $staff_pass != $staff_pass2){ 38 echo '<form>'; 39 echo '<input type = "button" onclick = "history.back()" value = "戻る">'; 40 echo '</form>'; 41} 42 43else{ 44 $staff_pass = md5($staff_pass); 45 echo '<form method = "post" action = "staff_edit_done.php">'; 46 echo '<input type = "hidden" name = "name" value = "'.$staff_name.'">'; 47 echo '<input type = "hidden" name = "code" value = "'.$staff_code.'">'; 48 echo '<input type = "hidden" name = "pass" value = "'.$staff_pass.'">'; 49 echo '<br/>'; 50 echo '<input type = "button" onclick = "history.back()" value = "戻る">'; 51 echo '<input type = "submit" value = "OK">'; 52 echo '</form>'; 53} 54 ?> 55</body> 56 57</html> 58

staff_edit_done.php

1<!DOCTYPE HTML> 2<html> 3 4<head> 5 <meta http-equiv="content-type" content="text/html;charset = UTF-8"> 6 <title>php基礎</title> 7</head> 8 9<body> 10 <?php 11 12 $staff_code = $_POST['code']; 13 $staff_name = $_POST['name']; 14 $staff_pass = $_POST['pass']; 15 16 $staff_name = htmlspecialchars($staff_name); 17 $staff_pass = htmlspecialchars($staff_pass); 18 19 try { 20 // データベースに接続 21 $pdo = new PDO( 22 'mysql:dbname=shop;host=localhost;charset=utf8', 23 'root', 24 '', 25 [ 26 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 27 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 28 ] 29 ); 30 31 $sql = 'UPDATE mst_staff SET name=?,password=? WHERE mst_staff.code=?'; 32 $stmt = $pdo->prepare($sql); 33 $data[] = $staff_name; 34 $data[] = $staff_pass; 35 $data[] = $staff_code; 36 $stmt->execute($data); 37 38 $pdo = null; 39 40 /* データベースから値を取ってきたり, データを挿入したりする処理 */ 41 } catch (PDOException $e) { 42 43 // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する 44 // - もし手抜きしたくない場合は普通にHTMLの表示を継続する 45 // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい 46 header('Content-Type: text/plain; charset=UTF-8', true, 500); 47 echo 'ただいま障害により大変ご迷惑をおかけしています'; 48 exit($e->getMessage()); 49 } 50 51 // Webブラウザにこれから表示するものがUTF-8で書かれたHTMLであることを伝える 52 // (これか <meta charset="utf-8"> の最低限どちらか1つがあればいい. 両方あっても良い.) 53 header('Content-Type: text/html; charset=utf-8'); 54 55 56 57 ?> 58 修正しました<br/> 59 <br/> 60 <a href = "staff_list.php">戻る</a> 61</body> 62 63</html> 64

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/10/01 23:23

データベースのしょきこうたくがおわってないからかな?
退会済みユーザー

退会済みユーザー

2019/10/01 23:26

それに、同件の質問過去にあるのに確認しましょう。してるのであれはやったこととしてあげよう
m.ts10806

2019/10/02 00:15

XAMPPのバージョン(というよりPHP、MariaDBのバージョン)をご提示ください。 それに、本当にhtmlspecialchars()をそこで使っている書籍なら参考にしてはいけません。
windowsaa

2019/10/04 01:46

データベースの設定はできていて、データベース上では削除、編集を行うことはできています。 またXAMPPのバージョンは7.3.9です。
m.ts10806

2019/10/04 01:48

質問本文に追記してください
guest

回答2

0

ベストアンサー

staff_edit.php

php

1<input type = "hidden" name = "code" value = "<?php $staff_code;?>">

echoされていないようです。

投稿2019/10/04 09:25

nnnnkkkk

総合スコア11

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

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

0

なんともいえませんが、ちゃんと設定できているならupdateに失敗すれば
エラーが変えるので、エラーになっていないなら

$sql = 'UPDATE mst_staff SET name=?,password=? WHERE mst_staff.code=?';

で指定するcodeに合致するものが存在しないか、想定するcodeと別のものを指定しているかでしょうかね

投稿2019/10/02 01:44

yambejp

総合スコア114968

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

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

windowsaa

2019/10/04 01:52

画像を追加しましたがスタッフコードの指定はできていると思います。
yambejp

2019/10/04 01:59

$stmt->execute($data); の後ろに print_r($data); して、中身を確認し、その値をスタティックに指定して テーブルからデータが取れるか確認してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問