PHPでデータベースに接続してテーブルのレコードを削除する方法

このQ&Aのポイント
  • PHPを使用してデータベースに接続し、テーブル内のレコードを表示させるウェブページを作成しました。
  • このページに削除ボタンを追加し、ユーザーがボタンを押すとテーブル内の特定のレコードを削除できるようにしたいと考えています。
  • しかし、これまで行った方法では誤ってテーブル内のすべてのレコードを削除してしまいました。正しい削除方法についてご教示ください。
回答を見る
  • ベストアンサー

phpとデータベース

毎回お世話になっております。あの今phpmy-adminで作成したデータベースにphpでつなげました。ユーザがウェブページ上で入力したものを保存してテーブルのそれぞれのレコードを表示させました。そこのページに”削除”というボタンを押すとテーブルからそのレコードだけを消せるようにしたいのですがどのようにすれば良いでしょうか?下のようなものを考えたのですが失敗してテーブルに含まれる全てのレコードを間違って消してしまいました。すみませんがよろしくお願いします。 2つテーブルがあり、entries とcommentsテーブルのフィールドはこのようになっております。 entries entry_id title entry entered_timestamp comments comment_id commentor_name commenter_email comment timestamp <html> <body> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> <?php require_once("connect.php"); $booDelete = 0; $dbRecords = mysql_query("SELECT* FROM entries", $dbLocalhost) or die("Problem reading table: " .mysql_error()); while ($arrRecords = mysql_fetch_row($dbRecords)) { echo "<p>" .$arrRecords[0] ." "; echo $arrRecords[1] . ""; echo $arrRecords[2] . ""; echo $arrRecords[3] ."</p>"; echo "<INPUT type ='submit' value ='Delete' name='submit'>"; } if (isset($_POST["submit"])) { $dbRecordDelete = mysql_query("DELETE FROM entries WHERE entry_id = entry_id", $dbLocalhost); } ?> <form> </body> </html>

  • isman
  • お礼率84% (22/26)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

やりようはいくつかあります。 以下例をあげておきます。 (1)formをわけ、ひとつひとつのformにhiddenでidをうめこんでやる <form> <input type="hidden" name="delid" value="<?PHP print htmlspecialchars($必要なid);?>"> <input type="submit" value="delete"> </form> (2)submitボタンのnameで調整する(配列でやるとらく?) <form> <input type="submit" name="id[<?PHP print urlencode($必要なid);?>]" value="delete"> <input type="submit" name="id[<?PHP print urlencode($必要なid);?>]" value="delete"> ・・・ </form> (3)セッション配列を継承し、ボタン名でわたす セッションで削除用idの一覧配列をつくっておき <input type="submit" name="id[0]" value="delete"> <input type="submit" name="id[1]" value="delete"> のように、配列のキーをわたせるようにする 場合によってはクッキーをつかって渡すのでよいかと

isman
質問者

お礼

yambejpさん、すごく時間かかってしまいましたが無事に解決することができました! お忙しいのに本当にありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>DELETE FROM entries WHERE entry_id =entry_id って全てのデータを消せ・・といってますね idにあたるものをサーバー側におくってやり DELETE FROM entries WHERE entry_id =○○で消してください

isman
質問者

お礼

お返事ありがとうございます!yambejpさん、すみません。yambejpさんの言うとおりにやろうとしたのですが”idにあたるものをサーバー側に送る”手順で突っかかってしまいました。 考えたのは、レコードとDeleteボタンを表示させるときにそのボタンそれぞれにentry_id と同じ数字を割り当てて、ボタンが押されたらその数字を送って、 DELETE FROM entries WHERE entry_id =ボタンの数字 としてみたいのですが、うまくいきません。何回も申し訳ないのですが、補足にコードを載せるのでチェックしていただけないでしょうか。ずうずうしいかもしれませんが宜しくお願いします。

isman
質問者

補足

<html> <body> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> <?php require_once("connect.php"); $intID = 0; $arrID = array (); $intcoount = 0; $dbRecords = mysql_query("SELECT* FROM entries", $dbLocalhost) or die("Problem reading table: " .mysql_error()); while ($arrRecords = mysql_fetch_row($dbRecords)) { echo "<p>" .$arrRecords[0] ." "; echo $arrRecords[1] . ""; echo $arrRecords[2] . ""; echo $arrRecords[3] ."</p>"; array_push($arrID, $arrRecords[0]); echo "<INPUT type ='submit' value ='Delete' name='submit' id='<?php $arrID[$intcount] ?>'>"; $intcount=$intcount+1; } if (isset($_POST["submit"])) { $dbRecordDelete = mysql_query("DELETE FROM entries WHERE entry_id = '$intID'", $dbLocalhost); } ?> <form> </body> </html>

関連するQ&A

  • PHP foreachのループの中でPOST送信

    現在掲示板を作っています。 <?php foreach ($result as $record){ $id = $record ["id"]; $title = $record ["title"]; ?> <form method="post" name="form1" action="contents.php"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href="javascript:form1.submit()" ><?php echo $title; ?></a> </form> <?php } $dbInfo = null; ?> </form> テーブルのidとtitleをすべて取り出しています。 titleを一覧表示で全件表示させリンクを貼り、移動先にidをPOSTで送信し投稿内容がみられるようにしたいのですが、リンクを貼れても飛べなかったり、移動できてもなにも送信していない状態(ただ移動しただけ)だったり。 2つ目のphp直後の「}」を1つ目の中で閉じるとPOST送信しつつ移動できるのですが、1件しか表示されなくなってしまいます。 <form method="POST" name="con-id"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href='contents.php'><?php echo $title; ?></a> </form> などもしてみましたが、POST送信はされませんでした。 なにか方法はありませんでしょうか? ここをこうした方がいい、など教えて頂きたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • php pdo データベース

    前に書き込んだのが状況がわかったので再度書きます update.phpでGETで取った番号のデータを表示します 番号は主キーなので変更できないように表示のみにします update.phpのフォームをuptate2.phpに送ります <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> <input type="hidden" name="ID" value="<?php echo $ID; ?>"> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデ-トphp update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 今の現状 エラーが出ないでレコードを修正しました。と表示されるがレコードが修正されていない どこがいけないと思いますか?

    • ベストアンサー
    • PHP
  • PHPでの検索機能がうまく動きません

    PHPでの検索機能が動かなくて困っています。 <form>で入力した値を、MySQLのWHEREで条件付けて取り出したいのですがうまくいきません....。 最終的に、 1、formに検索ワードを入力 2、DBから条件にあったレコードを持ってくる 3、持ってきた値を表示 という機能にしたいのですが....。 --- --- --- --- --- --- --- --- --- --- --- --- <?php //データベースに接続 mysql_connect('xxx', 'xxx', 'xxx') or die(mysql_error()); mysql_select_db('xxx'); mysql_query('SET NAMES UTF8'); //フォームで送られてきた条件を元にSELECT文を作成 if (!empty($_POST['nm'])) { $q = $_POST['nm']; $sql = 'select * from test_tb where name like "%$q%"'; $record = mysql_query($sql) or die(mysql_error()); } ?> <html> <body> <form action="" method="post">    名前:<input type="text" name="nm">    <input type="submit" name="exec" value="検索"> </form> <?php while($row = mysql_fetch_assoc($record)): ?> <?php echo $row['id']; ?> <?php echo $row['name']; ?> <?php endwhile ?> </body> </html> --- --- --- --- --- --- --- --- --- --- --- --- エラーは表示されないのですが、結果も表示されません。 さまざまなサイトや他の方の質問、MySQLやPHPの本を参考にしたのですが うまくいかなかったのでご質問させていただきました。 プログラミング初心者の上、はじめての質問で不備があると思いますが、 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP セレクトフォームの連動

    初めての質問です。よろしくお願いします。 今、同一ページ内で二つのセレクトフォームを連動させてライブ写真の表示をさせようとしているのですが、上手くいきません。 内容は、まず1つ目のセレクトにライブ会場名を表示します。そのセレクトをクリックすると、連動してもう一つのセレクトに写真名のリストが表示されるようにします。 今困っているのは一つ目のセレクトをクリックし、二つ目のセレクトの連動はどうにかできたのですが、二つ目のセレクトをクリックすると一つ目のセレクトが初期状態に戻ってしまいます。 質問がヘタクソなので、ソースとURLを書いておきます。ソースが分かりにくいとは思いますがご了承ください。お分かりになる方は分かりやすく教えてください。よろしくお願いします。 URL http://www.officekuwa.com/soulsurvivores/ontheroad/gallery.php データーベースの内容です。 gallery_title(ライブ会場名が登録されたテーブル) id,title,date,active gallery (写真名が登録されたテーブル) id,cid,title,photos,date,active //一つ目のセレクト // ライブ会場名表示 $gallery_query = "select * from gallery_title where id =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery = mysql_fetch_assoc($gallery_cat_data); <FORM method="post" name="setForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery['id']); ?>"> <SELECT NAME="setID" CLASS="formPulldown" STYLE="width:175px" onChange="document.setForm.submit()"> <option value=''>Select a Photo Set</option> // 会場名表示 $gallery_query = "select * from gallery_title"; $gallery_cat_data = mysql_query($gallery_query, $db); while($gallery_cat = mysql_fetch_assoc($gallery_cat_data)) { $SELECTED = (($_POST['setID'] == $gallery_cat['id'])?" SELECTED":""); <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> } //二つ目のセレクト // 写真タイトル名表示 if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <FORM method="post" name="phoForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery_cat['id']);?>&setID=<?php echo _hs($gallery_cat['cid']);?>"> <SELECT NAME="ID" CLASS="formPulldown" STYLE="width:275;background-color:#FFFFFF" onChange="document.phoForm.submit()"> <option value=''>Select a Photo</option> <?php } } if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_disp_data = mysql_query($gallery_query, $db); while($gallery_disp = mysql_fetch_assoc($gallery_disp_data)) { $SELECTED = ((!isset($_POST['setID']) Or $_POST['setID'] == "none")?" SELECTED":""); ?> <OPTION VALUE="<?php echo _hs($gallery_disp['cid']);?>" <?php echo _hs($SELECTED); ?>><?php echo $gallery_disp['title'];?></OPTION> <?php } } ?> </SELECT> // 写真の表示 <?php if ($_SERVER["REQUEST_METHOD"]=="POST") { $SELECTED = "SELECTED"; if(!isset($_POST['ID'])) { print ""; } else { // 写真の表示 $gallery_query = "select * from gallery where cid =".$_POST['ID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <img src="<?php echo _hs($gallery_cat['photos']); ?>" alt="" hspace="0" vspace="6" border="0"> <?php } } ?>

    • 締切済み
    • PHP
  • php データベース更新

    番号 int プライマリーキー 氏名  varchar 住所 varchar 一覧画面に修正というボタンをつくりボタンクリックすると入っているデータがテキストボックスで表示され入力できるようにした。 番号は主キーなので表示のみにして編集できないようにした ソース GETで番号をとりupdate2.phpにわたす update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートphpは下記のとおり update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 だかupdate2.phpでエラ-がおきて先に進めません

    • ベストアンサー
    • PHP
  • PHPでMySQLのレコードを削除したい

    現在「基礎からのMYSQL」という本でXAMPPを導入しMySQL,PHPの基礎を勉強中です。 (mysql_query() を初めて学習中です。) 例にならってスクリプトを書いてみたのですが、MySQL内にあるレコードを削除するためのスクリプトがうまく作動しません。 (SELECT, INSERT, SEARCH は正常に作動します。DELETEだけがなぜかうまくいきません。) ApacheとMySQLは起動しています。 考えられる原因をおしえていただけませんでしょうか。よろしくおねがいいたします。 ソースコードは下記のとおりです。 ★HTML(トップページ) //メッセージ表示のスクリプトを呼び出すフォーム <form method="post" action="kantan_select.php"> メッセージを表示します<br> <input type="submit" value="メッセージ表示"> </form> //挿入のスクリプトを呼び出すフォーム <form method="post" action="kantan_insert.php"> 名前を入力してください<input type="text" name="a1"><br> メッセージを入力してください<input type="text" name="a2" size=150><br> <input type="submit" value="送信"> </form> //☆☆☆削除のスクリプトを呼び出すフォーム☆☆☆ <form mothod="post" action="kantan_delete.php"> 削除番号<input type="text" name="b1"><br> <input type="submit" value="削除番号送信"> </form> //検索のスクリプトを呼び出すフォーム <form method="post" action="kantan_search.php"> 検索キーワード<input type="text" name="c1"><br> <input type="submit" value="検索開始"> </form> ★レコード削除のPHPスクリプト <?php $s=mysql_connect("localhost","root","パスワード") or die("接続失敗"); print "接続しました<br>"; mysql_select_db("db1"); $b1_d=$_POST["b1"]; mysql_query("delete from tbk where bang=$b1_d") ; $re=mysql_query("select * from tbk order by bang"); while($kekka=mysql_fetch_array($re)){ print $kekka[0]; print ":"; print $kekka[1]; print ":"; print $kekka[2]; print "<br>"; } mysql_close($s); print "<br><a href='kantan.html'>メニューに戻る</a>" ?> <環境> Windows 7 XAMPP導入するための付属CD-ROMの内容  ・Apache(HTTPD2.2.6 + Openssl0.9.8e)   ・MySQL(5.0.45)  ・PHP(5.2.4)  ・PHP(4.4.7)  ・phpMyAdmin(2.11.1)  ・Zend Optimizer

    • 締切済み
    • PHP
  • データベースと一致したときの表示

    こんにちわ。今、データベースにある商品を物理削除するとき、データべースに登録してある商品名と一致しない場合に「一致する商品名がありません」と表示ができるようにしたいのが、なにか良いSQL文などはないでしょうか?例えば「なし」という入力をしたとき「なし」が登録されていないので「削除できませんでした」、というようにしたいと考えています。 //削除フォーム確認画面 <?php $submit = $_POST["submit"]; $delete = $_POST["delete"]; $item = $_POST["item"]; $price = $_POST["price"]; if($submit == "削除"){ $item = $_POST["item"]; $delete = $_POST["delete"]; }elseif($_POST["item"] == "" ){ header("Location:shoppingformConfirmationdeletefalse.php"); //ここから }elseif(if($contact=mysql_connect("localhost","root","")) { $query = 'SET NAMES sjis'; mysql_query($query ); mysql_select_db("watanabe", $contact); $query ="SELECT item, if(instr(item,\"$item\") > 0, '入力された商品名に一致する対象がない為、削除できません') FROM shoppingtable"; $result = mysql_query($query) or die('Query failed: ' . mysql_error());{ { } } //ここまで ?> とやってみたのですが、うまくきませんでした。 もしくは、この画面で削除する登録商品がない場合、ヘッダーなどで 遷移し 「一致する商品がないので削除できませんでした」というような感じ にしようかとも考えています。

    • ベストアンサー
    • PHP
  • INSERTした時のデータベース等の表示がおかしい

    現在phpmyadminを使用して、ファイルを分けた状態で入力フォームで商品名と値段を入力、確認画面(追加登録)の追加登録としたいのですが, 追加登録するファイルでINSERTしデータべースやselect文で表示したIEをみると商品名には何も表示がなく値段にはかならず0が表示されてしまいます。 これは入力フォームからの商品名や値段がうけわたされていないのでしょうか?それとも、INSERT文になにか誤りがあるのでしょうか? //追加登録 $submit = $_POST["submit"]; $item = $_POST["item"]; $price = $_POST["price"]; if($submit == "追加"){ $item = $_POST["item"]; $price = $_POST["price"];      $ITEM = $_POST["ITEM"];     $PRICE = $_POST["PRICE"]; header("Location:shoppingformCompletion.php"); if($contact=mysql_connect("host","admin","root")){ echo "<center><strong>商品登録をしました。</strong></center><br>"; mysql_select_db("watanabe", $contact); $query = "INSERT INTO shoppingtable (item, price) VALUES (\"$item\",\"$price\")"; $query2 = 'SET NAMES sjis'; mysql_query( $query2 ); } } <form method="post" action="shoppingformConfirmation.php" > <center><p><input type="submit" name="submit" value= "追加"></p></center> <center><input type="submit" name="delete" value="削除"></center> </form>'; //ここまで

    • ベストアンサー
    • PHP
  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

    • ベストアンサー
    • PHP
  • フォームへ値の渡し方について

    こんばんわ。 PHPの勉強をしています。 入力されたIDを元にDBから氏名をクエリし、テキストボックスへ表示させようとしていますが、テキストボックスの指定の仕方が分からず、行き詰っています。 各テキストフォームは<?php?>の中に記述しています。 初心者のため簡単にできることなのかもしれませんが、ご教授願います。 <form method="POST" action="hyouji.php"> ID: <?php if($_POST["ID"]){ $id = $_POST["ID"]; echo "<input type=text name=ID onChange = submit() value = '$id'>"; ECHO "YES"; }else{ echo "<input type=text name=ID onChange = submit()>"; ECHO "NO"; } ?> Name: <?php echo "<input size=28 type=text name=Name ><br>"?> /*上記、テキストボックスに値を入力*/ <input type=submit name=bottun1 value=入力> </form> <?PHP $host = 'localhost'; $user = 'root'; $pass = 'root'; $db = 'DB'; if($_POST["ID"]){ $id = $_POST["ID"]; $link=mysql_connect($host,$user,$pass) or die("接続エラー"); mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); mysql_select_db($db,$link) or die("接続エラー"); $sql="SELECT * FROM test WHERE id = '$id'"; $res=mysql_query($sql,$link) or die("データ抽出エラー"); $rows = mysql_fetch_array($res,MYSQL_ASSOC); echo "<tr>"; echo "<td>".$rows["user_id"]."</td>"; echo "<td>".$rows["customer"]."</td>"; echo "</tr>"; mysql_close($link); }else{ echo "表示データはなし"; } ?> 以上、長文になりましたがよろしくお願いします。

    • ベストアンサー
    • PHP