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

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

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

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

PHP

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

Q&A

解決済

1回答

2575閲覧

就労移行のタイムカードの出勤ページで削除と追加がうまく動作しない

rura

総合スコア70

MySQL

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

PHP

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

0グッド

0クリップ

投稿2016/10/04 09:52

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
就労移行施設のタイムカードを作成してますが,
どうしても、出勤押した後に内容が反映されないのと
対象列の削除がうまく出来ません
###発生している問題・エラーメッセージ

Notice: Undefined variable: rows in C:\xampp\htdocs\roumu\Attendance.php on line 224 Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\roumu\Attendance.php on line 224

###該当のソースコード

<?php ini_set('display_errors', 'On'); error_reporting(E_ALL); $dsn = 'mysql:dbname=mfdb;host=localhost'; $user = 'root'; $password = ''; //日本語の曜日配列 $weekjp = array( '日', //0 '月', //1 '火', //2 '水', //3 '木', //4 '金', //5 '土' //6 ); //現在の曜日番号(日:0 月:1 火:2 水:3 木:4 金:5 土:6)を取得 $weekno = date('w'); try { if (filter_input_array(INPUT_POST)) { $id = filter_input(INPUT_POST, 'id');//利用者ID $first_name = filter_input(INPUT_POST, 'first_name');//利用者名 $startyear = filter_input(INPUT_POST, 'startyear');//今年度の開始年 $startmonth = filter_input(INPUT_POST, 'startmonth');//今年度の開始月 $startday = filter_input(INPUT_POST, 'startday');//今年度の開始日 $startweek = filter_input(INPUT_POST, 'startweek');//今年度の開始曜日 $startsituation = filter_input(INPUT_POST, 'startsituation');//勤怠内容 $field2 = filter_input(INPUT_POST, 'field2');//出勤時間 $err = array();//エラー内容 if (empty($id)) { $err['id'] = "会員番号を入力してください"; } if (empty($first_name)) { $err['first_name'] = "名前を入力してください"; } if (empty($startyear)) { $err['startyear'] = "今年度の開始年を入力してください"; } if (empty($startmonth)) { $err['startmonth'] = "今年度の開始月を入力してください"; } if (empty($startday)) { $err['startday'] = "今年度の開始日を入力してください"; } if (empty($startweek)) { $err['startweek'] = "今年度の開始曜日を入力してください"; } if (empty($startsituation)) { $err['startsituation'] = "今年度の開始曜日を入力してください"; } if (empty($field2)) { $err['field2'] = "勤務開始する現在時間を入力してください"; } // エラーの数を数えて、エラーがなければインサート if (0 == count($err)) { //DB連携とDB接続できなくばエラー $db = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); if (isset($_POST["delete"])) { $did = $_POST["delete"]; $qry = "DELETE FROM attendanse WHERE attendanceid =:did"; $stmt = $db->prepare($qry); $stmt->execute(); }else if (isset($_POST["insert"])) { $did = $_POST["insert"]; //attendanse(出勤用テーブル)を追加 $sql = "INSERT INTO attendanse ("; $sql .= "id, first_name, startyear, startmonth, startday, startweek,startsituation,field2 "; $sql .= ") VALUES ("; $sql .= ":id,:first_name,:startyear,:startmonth,:startday,:startweek,:startsituation,:field2"; $sql .= ")"; $stmt = $db->prepare($sql); // パラメータのセットの仕方はマニュアルで確認してください。 $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->bindParam(':first_name', $first_name, PDO::PARAM_INT); $stmt->bindParam(':startyear', $startyear, PDO::PARAM_STR); $stmt->bindParam(':startmonth', $startmonth, PDO::PARAM_STR); $stmt->bindParam(':startday', $startday, PDO::PARAM_STR); $stmt->bindParam(':startweek', $startweek, PDO::PARAM_STR); $stmt->bindParam(':startsituation', $startsituation, PDO::PARAM_STR); $stmt->bindParam(':field2', $field2, PDO::PARAM_STR); // 実行 $stmt->execute(); } $qry = "SELECT * FROM attendanse"; $data = $db->query($qry); $data->execute(); $rows = $data->fetchAll(PDO::FETCH_ASSOC); //$registered = mysqli_affected_rows($db); echo "<P>下記表の内容で登録しました</P>"; } }else { echo "<P>出勤時に必ず行って下さい</P>"; } } catch (PDOException $e) { $err['all'] = $e->getMessage(); } ?> <?php if (isset($err) && 0 < count($err)) : ?> <p><?= nl2br(implode(PHP_EOL, $err)); ?></p> <?php endif; ?> <div class="example"> <form name="form1"action="Attendance.php" method="post"> <table> <caption>勤怠登録手続き</caption> <tr> <th rowspan="2">会員番号</th> <th rowspan="2">名前</th> <th colspan="4">日付</th> <th rowspan="2">時間</th> <th rowspan="2">出勤状況</th> <th rowspan="2">登録内容</th> </tr> <tr> <th>年</th> <th>月</th> <th>日</th> <th>曜日</th> </tr> <tr> <td><input type="text" name="id" size=" 10" maxlength="50" placeholder="○○太郎" value="<?php if (isset($_POST['id'])) {echo htmlspecialchars($_POST['id'],ENT_QUOTES,"UTF-8");} ?>"></td> <td><input type="text" name="first_name" size=" 10" maxlength="50" placeholder="○○太郎" value="<?php if (isset($_POST['first_name'])) {echo htmlspecialchars($_POST['first_name'],ENT_QUOTES,"UTF-8");} ?>"></td> <td><input type="text" name="startyear" size="1"value="<?php echo date("Y"); ?>" /></td> <td><input type="text" name="startmonth" size="1"value="<?php echo date("m"); ?>" /></td> <td><input type="text" name="startday" size="1"value="<?php echo date("d"); ?>" /></td> <td><input type="text" name="startweek" size="1"value="<?php echo $weekjp[$weekno]; ?>"></td> <td><input type="text" name="field2" size="9"></td> <td><select name="startsituation"> <option value="出 勤">出勤</option> <option value="遅 刻">遅刻</option> <option value="欠 席">欠席</option> <option value="忌引き">忌引き</option> </select> </td> <td><input type="submit" value="出勤(in)" name="insert"></td> </tr> </table> </div> <hr><!-- //登録票と登録結果の区切り線?--> <form action="Attendance.php" method="post"> <?php //exitwork.php(退勤登録)の結果 //エラー設定 ini_set('display_errors', 'On'); error_reporting(E_ALL); //DB接続設定 try { echo "<div class='dbs'> <table border> <caption>出勤登録結果</caption> <tbody> <tr> <th>編集</th> <th>削除</th> <th>出勤番号</th> <th>会員番号</th> <th>名前</th> <th>出勤状況</th> <th>日付</th> <th>時間</th> </tr> <tr>"; foreach ($rows as $row) { echo "<td><a href='Attendancelist.php?attendanceid =".$row['attendanceid']."&=id".$row['id']."&first_name=".$row['first_name']. "&startyear=".$row['startyear']."&startmonth=".$row['startmonth']."&startday=".$row['startday']."&startweek=".$row['startweek']. "&startsituation=".$row['startsituation']."&field2=".$row['field2']."'>編集</a></td>"; echo "<td><input type=\"radio\" name=\"delid\" value=\"{attendanceid}\"></td>"; echo "<td> ".$row['attendanceid']."</td> <td> ".$row['id']."</td> <td> ".$row['first_name']."</td> <td> ".$row['startsituation']."</td> <td> ".$row['startyear']."年".$row['startmonth']."月".$row['startday']."日(".$row['startweek'].")"."</td> <td> ".$row['field2']."</td> <tr> </tr>"; } echo " </tbody> </table> </div>"; $db = null; } catch (Exception $e) { echo $e->getMessage(); } ?><br> <input type="submit" name="delete" value="削除"> </form>

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

kei344

2016/10/05 07:12

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況をお教えください
guest

回答1

0

ベストアンサー

削除できないのは、$stmt->bindParam()してないからだと思います

「Notice: Undefined variable: rows」が出ているのは、
try-catchでブロックが別れているからだと思います。
現状の処理だとtry-catchで囲んでも意味ないので、消したほうがいいと思います。

それでもうまくいかない場合は、attendanseテーブルのcreate文がわかれば、自分の環境で動かしてみますよー

SQL

1show create table mfdb.attendanse;

追記 ちょっと雑ですが、動くようにしてみました。

php

1<?php 2ini_set('display_errors', 'On'); 3error_reporting(E_ALL); 4$dsn = 'mysql:dbname=mfdb;host=localhost'; 5$user = ''; 6$password = ''; 7$db = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 8 9//日本語の曜日配列 10$weekjp = array('日', //0 11'月', //1 12'火', //2 13'水', //3 14'木', //4 15'金', //5 16'土' //6 17); 18 19//現在の曜日番号(日:0 月:1 火:2 水:3 木:4 金:5 土:6)を取得 20$weekno = date('w'); 21 22if (filter_input_array(INPUT_POST)) { 23 //DB連携とDB接続できなくばエラー 24 25 if (isset($_POST["delete"])) { 26 $did = $_POST["delid"]; 27 $qry = "DELETE FROM attendanse WHERE attendanceid =:did"; 28 $stmt = $db->prepare($qry); 29 $stmt->bindParam(':did', $did, PDO::PARAM_STR); 30 $stmt->execute(); 31 } else if (isset($_POST["insert"])) { 32 $id = filter_input(INPUT_POST, 'id'); //利用者ID 33 $first_name = filter_input(INPUT_POST, 'first_name'); //利用者名 34 $startyear = filter_input(INPUT_POST, 'startyear'); //今年度の開始年 35 $startmonth = filter_input(INPUT_POST, 'startmonth'); //今年度の開始月 36 $startday = filter_input(INPUT_POST, 'startday'); //今年度の開始日 37 $startweek = filter_input(INPUT_POST, 'startweek'); //今年度の開始曜日 38 $startsituation = filter_input(INPUT_POST, 'startsituation'); //勤怠内容 39 $field2 = filter_input(INPUT_POST, 'field2'); //出勤時間 40 $err = array(); //エラー内容 41 if (empty($id)) { 42 $err['id'] = "会員番号を入力してください"; 43 } 44 if (empty($first_name)) { 45 $err['first_name'] = "名前を入力してください"; 46 } 47 if (empty($startyear)) { 48 $err['startyear'] = "今年度の開始年を入力してください"; 49 } 50 if (empty($startmonth)) { 51 $err['startmonth'] = "今年度の開始月を入力してください"; 52 } 53 if (empty($startday)) { 54 $err['startday'] = "今年度の開始日を入力してください"; 55 } 56 if (empty($startweek)) { 57 $err['startweek'] = "今年度の開始曜日を入力してください"; 58 } 59 if (empty($startsituation)) { 60 $err['startsituation'] = "今年度の開始曜日を入力してください"; 61 } 62 if (empty($field2)) { 63 $err['field2'] = "勤務開始する現在時間を入力してください"; 64 } 65 // エラーの数を数えて、エラーがなければインサート 66 if (0 == count($err)) { 67 $did = $_POST["insert"]; 68 //attendanse(出勤用テーブル)を追加 69 $sql = "INSERT INTO attendanse ("; 70 $sql.= "id, first_name, startyear, startmonth, startday, startweek,startsituation,field2 "; 71 $sql.= ") VALUES ("; 72 $sql.= ":id,:first_name,:startyear,:startmonth,:startday,:startweek,:startsituation,:field2"; 73 $sql.= ")"; 74 $stmt = $db->prepare($sql); 75 // パラメータのセットの仕方はマニュアルで確認してください。 76 $stmt->bindParam(':id', $id, PDO::PARAM_STR); 77 $stmt->bindParam(':first_name', $first_name, PDO::PARAM_INT); 78 $stmt->bindParam(':startyear', $startyear, PDO::PARAM_STR); 79 $stmt->bindParam(':startmonth', $startmonth, PDO::PARAM_STR); 80 $stmt->bindParam(':startday', $startday, PDO::PARAM_STR); 81 $stmt->bindParam(':startweek', $startweek, PDO::PARAM_STR); 82 $stmt->bindParam(':startsituation', $startsituation, PDO::PARAM_STR); 83 $stmt->bindParam(':field2', $field2, PDO::PARAM_STR); 84 // 実行 85 $stmt->execute(); 86 echo "<P>下記表の内容で登録しました</P>"; 87 } 88 } 89} else { 90 echo "<P>出勤時に必ず行って下さい</P>"; 91} 92 93$qry = "SELECT * FROM attendanse"; 94$data = $db->query($qry); 95$data->execute(); 96$rows = $data->fetchAll(PDO::FETCH_ASSOC); 97 98?> 99 100<?php if (isset($err) && 0 < count($err)): ?> 101<p><?=nl2br(implode(PHP_EOL, $err)); ?></p> 102<?php 103endif; ?> 104<div class="example"> 105 <form name="form1"action="Attendance.php" method="post"> 106<table> 107<caption>勤怠登録手続き</caption> 108<tr> 109 <th rowspan="2">会員番号</th> 110 <th rowspan="2">名前</th> 111 <th colspan="4">日付</th> 112 <th rowspan="2">時間</th> 113 <th rowspan="2">出勤状況</th> 114 <th rowspan="2">登録内容</th> 115</tr> 116<tr> 117 <th></th> 118 <th></th> 119 <th></th> 120 <th>曜日</th> 121</tr> 122<tr> 123<td><input type="text" name="id" size=" 10" maxlength="50" placeholder="○○太郎" 124 value="<?php if (isset($_POST['id'])) { 125 echo htmlspecialchars($_POST['id'], ENT_QUOTES, "UTF-8"); 126} ?>"></td> 127<td><input type="text" name="first_name" size=" 10" maxlength="50" placeholder="○○太郎" 128 value="<?php if (isset($_POST['first_name'])) { 129 echo htmlspecialchars($_POST['first_name'], ENT_QUOTES, "UTF-8"); 130} ?>"></td> 131<td><input type="text" name="startyear" size="4"value="<?php echo date("Y"); ?>" /></td> 132<td><input type="text" name="startmonth" size="2"value="<?php echo date("m"); ?>" /></td> 133<td><input type="text" name="startday" size="2"value="<?php echo date("d"); ?>" /></td> 134<td><input type="text" name="startweek" size="2"value="<?php echo $weekjp[$weekno]; ?>"></td> 135<td><input type="text" name="field2" size="9"></td> 136<td><select name="startsituation"> 137 <option value="出 勤">出勤</option> 138 <option value="遅 刻">遅刻</option> 139 <option value="欠 席">欠席</option> 140 <option value="忌引き">忌引き</option> 141 </select> 142</td> 143<td><input type="submit" value="出勤(in)" name="insert"></td> 144</tr> 145</table> 146</div> 147<hr><!-- //登録票と登録結果の区切り線?--> 148 149<form action="Attendance.php" method="post"> 150<div class='dbs'> 151<table border> 152 <caption>出勤登録結果</caption> 153 <tbody> 154 <tr> 155 <th>編集</th> 156 <th>削除</th> 157 <th>出勤番号</th> 158 <th>会員番号</th> 159 <th>名前</th> 160 <th>出勤状況</th> 161 <th>日付</th> 162 <th>時間</th> 163 </tr> 164<?php 165foreach ($rows as $row) { 166 echo "<tr>"; 167 echo "<td><a href='Attendancelist.php?attendanceid =" . $row['attendanceid'] . "&=id" . $row['id'] . "&first_name=" . $row['first_name'] . "&startyear=" . $row['startyear'] . "&startmonth=" . $row['startmonth'] . "&startday=" . $row['startday'] . "&startweek=" . $row['startweek'] . "&startsituation=" . $row['startsituation'] . "&field2=" . $row['field2'] . "'>編集</a></td>"; 168 echo "<td><input type=\"radio\" name=\"delid\" value=\"{$row['attendanceid']}\"></td>"; 169 echo "<td> " . $row['attendanceid'] . "</td> 170 <td> " . $row['id'] . "</td> 171<td> " . $row['first_name'] . "</td> 172<td> " . $row['startsituation'] . "</td> 173 <td> " . $row['startyear'] . "年" . $row['startmonth'] . "月" . $row['startday'] . "日(" . $row['startweek'] . ")" . "</td> 174<td> " . $row['field2'] . "</td> 175<tr> 176</tr>"; 177} 178echo " 179</tbody> 180</table> 181</div>"; 182$db = null; 183?> 184 185<input type="submit" name="delete" value="削除"> 186</form>

投稿2016/10/04 10:32

編集2016/10/04 11:28
popobot

総合スコア6586

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

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

rura

2016/10/04 10:49

CREATE TABLE `attendanse` ( `attendanceid` bigint(200) NOT NULL AUTO_INCREMENT, `id` bigint(200) NOT NULL, `first_name` varchar(200) NOT NULL, `startyear` year(4) NOT NULL, `startmonth` varchar(200) NOT NULL, `startday` varchar(200) NOT NULL, `startweek` varchar(200) NOT NULL, `field2` varchar(200) NOT NULL, `startsituation` varchar(200) NOT NULL, PRIMARY KEY (`attendanceid`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
popobot

2016/10/04 12:58 編集

ちょっと雑ですが、動くようにしてみましたので、参考にしてください。 どこをどう直したかは、修正箇所が多すぎるので、割愛します...修正前後のコードを見比べて、確認してください。 入力チェックやエラーハンドリングなどは雑ですので修正してください。
rura

2016/10/05 05:38

大変ご迷惑をおかけいたしました。 ありがとうございます。
popobot

2016/10/05 07:10

いいえー、がんばってください!
rura

2016/10/05 07:36

パソコンと携帯が台風の影響か電波が届きにくくこの質問を締めくくるの忘れました。 すいませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問