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

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

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

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

PHP

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

Q&A

解決済

2回答

2314閲覧

質問が古くなり改めての質問、ラジオボタンで選択したレコードをHP上からDELETEできない件、お願いいたします。

kenjikobayashin

総合スコア31

MySQL

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

PHP

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

0グッド

0クリップ

投稿2014/12/21 03:29

質問が古くなりましたので改めて質問いたします。
HP上からDBに登録したレコードを削除しようと以下の手順で記述してみましたが、最後がif(flag){elseの結果になってしまいますどなたかお導きいただけませんでしょうか。
DBには primary、auto_incrementで設定したc0de、全角文字8字までの名前が入ったstaff_namae、md6方式で32桁の暗号化された英数字のパスワードがstaff_passに入っています。
sql文以外同じ内容でUPDATE文は成功していますのでmysql=DELETE・・・からdbh = nullの間に原因があるのではないかと思いますが、それが何かが分かりませんどうかよろしくお願いいたします。
DB構造
mysql> show fields from mst_staff;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| code | int(11) | NO | PRI | NULL | auto_increment |
| staff_namae | varchar(16) | NO | | NULL | |
| staff_pass | varchar(32) | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
一覧
$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');

$sql = 'SELECT code,staff_namae FROM mst_staff WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh = null; print 'スタッフ一覧<br /><br />'; print '<form method="post" action="staff_branch.php">'; while(true) { $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print '<input type="radio" name="staffcode" value="'.$rec['code'].'">'; print $rec['staff_namae']; print '</br>'; } print '</br>'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">';

見えないページ"staff_branch.php"で修正と削除の処理分岐 <?php if(isset($_POST['edit'])==true) { if(isset($_POST['staffcode'])==false) { header('Location:staff_ng.php'); } $staff_code=$_POST['staffcode']; header('Location:staff_edit.php?staffcode='.$staff_code); } if(isset($_POST['delete'])==true) { if(isset($_POST['staffcode'])==false) { header('Location:staff_ng.php'); } $staff_code=$_POST['staffcode']; header('Location:staff_delete.php?staffcode='.$staff_code); } ?>
削除確認

<body> <div id="contents"> <?php

try
{

if (isset($_GET["staffcode"])) {
$staff_code= $_GET['staffcode'];
}

$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');

$sql = 'SELECT staff_namae FROM mst_staff WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[0]=$staff_code;
$stmt->execute($data);

$rec = $stmt->fetch(PDO::FETCH_ASSOC);
$staff_namae=$rec['staff_namae'];

$dbh = null;
}

catch (Exception $e)
{

print 'ただいま障害により、たいへんご迷惑をお掛けしております。';
exit();
}

?>

<h3>スタッフ削除</h3><br /> <br /> <br /> <h3>スタッフコード</h3><br /> <?php print $staff_code;?> <br /> <br /> <h3>スタッフ名</h3><br /> <?php print $staff_namae;?> <br /><br /> <h3>みのスタッフを削除してもよろしいですか?</h3><br /><br /> <form method="post" action="staff_delete_done.php"> <input type="hidden" name="staffcode" value="<?php print $staff_code;?>"> <br> <input type="hidden" onclick="history.back()" value="戻る"> <br /><br /> <input type="submit" value="削除実行"> </form> </div> </body> 削除実行 <?php

try
{

if (isset($_POST["staffcode"])) {
$staff_code = $_POST['staffcode'];
}

$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');

$sql = 'DELETE FROM mst_staff WHERE code? = delete code';
$stmt = $dbh->prepare($sql);
$data[0] = $staff_code;
$flag = $stmt->execute(array($data[0]));

$dbh = null;

if ($flag){
print ('データーを削除しました。<br />');
}
else{
print ('データーを削除できませんでした。<br />');

}
}
catch(Exception $e)
{

print 'ただいま障害により、たいへんご迷惑をお掛けしております。';
exit();
}

?>

<h3><a href="staff_list.php">スタッフ一覧へ</a></h3>

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

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

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

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

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

guest

回答2

0

ベストアンサー

goufさんの回答にあるような対応も最終的には必要ですが、
現時点の問題は、エラーを出力してみないと何が起きているかわかりません。
最終的には過去の質問の回答にある方法で対応する必要がありますが、
1行追加のレベルでエラーをとりあえず出力してみるには、以下のようなコードをexecuteの直後に追加すると出力されます。

lang

1print '<p>errorInfo='.print_r($stmt->errorInfo(), true)."</p>\n";

試してみてください。
PDOの初期状態のエラーモードでは、なにか実行するたびに、上記のようなエラー出力を追加しないと何が起きているかわかりません。

投稿2014/12/22 02:42

TaMaMhyu

総合スコア1356

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

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

kobayashinomi

2014/12/22 05:00

ありがとうございます。 エラーが検出できました。 やはり、DELETE文の構文エラーではないかと思われますがどこをどうすればよいかわからないので、また明日、質問させていただきます。
TaMaMhyu

2014/12/22 05:34

MySQLサーバにmysqlコマンドなどで直接DELETEを実行してエラーになるものはPHPでやっても同じことです。まずは想定するSQL文を手動で構築して、直接MySQLサーバに対してDELETEのSQLを実行してみるほうがいいかと思います。
TaMaMhyu

2014/12/22 05:38

過去の質問の回答で正しいSQLになるはずのものがあったようですが、実行に失敗したとのコメントになっていました。 例えば、codeが1のレコードをINSERTしておき、以下のSQLを実行するとどうなるでしょうか? DELETE FROM mst_staff WHERE code = 1
guest

0

  • 質問中に出てくるコードは1ファイルなコードなのでしょうか?
  • それともコード中に登場するファイル名の、複数ファイルのそれら一部なのでしょうか?

(回答の前の疑問がとして、質問の内容がとてもぼやけているように感じてしまいます)

コードの内容が長くなる場合は、たとえばGist などのサービスにアップロードしていただけると、行番号の表示に対応しているので 注目すべきコードブロックの位置の指示、そして複数ファイルのアップロードに対応しているのでファイルごとにコードを表示させるなど、コードとその質問の内容に集中しやすくなります

行末の余分な空白、インデントがあったりなかったり、print メソッドの利用でカッコがあったりなかったりでコードの統一性が見られず すこし読みづらい印象でした
もし、なにかのコーディング規約を導入されていないのでしたら、たとえばPSR のようなコーディング規約の導入をされることをおすすめします

SQL に関しては、学習のためでもない限り、CRUD な基本操作は自身で書く利点があまり無いように思います

PHP での複数ページの表示が必要であれば、たとえばCake PHP, Fuel PHP, Lravel のようなフレームワークの導入を検討されてはいかがでしょうか

Links

投稿2014/12/21 15:12

gouf

総合スコア2321

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問