• 締切済み

すいません。PHPの削除について

質問番号5654502は失礼しました。お手数ですが、削除してください。 phpでWEBサイトの管理画面を作成しています。 削除ボタンを押すと、そのレコード1件分のみ、削除出来るようにしたいのですが、うまくいきません。ご教授願います。 // news.phpファイル <?php //データベースへの接続 $dberror = false; $dbermsg = ""; $con = mysqli_connect("localhost", "****", "********"); if ( $con ) { //データベースサーバへの接続OK if ( mysqli_select_db($con, "DB名") ) { $sql = "SELECT * FROM news WHERE user = '" . $_SESSION['loggedinUser'] . "' ORDER BY listingorder DESC, lastupdate DESC; "; mysqli_query($con, "set names utf8"); $rs = mysqli_query($con, $sql); $i = 0; if ( $rs ) { while ($item = mysqli_fetch_array($rs)) { echo "<tr class=\"Contents\">"; echo "<td><input type=\"hidden\" value=\"\" name=\"deleteId[$no]\" />"; echo "<input accesskey=\"1\" tabindex=\"1\" class=\"DeleteBt\" type=\"image\" value=\"削除\" name=\"submit_del[$no]\" src=\"images/delete_button.gif\" alt=\"削除\" onclick=\"deleteNews(); return false;\" /></td>"; echo "<td>"; echo "<div class=\"TurnSet\">"; echo "<div class=\"TheFirst\"><input accesskey=\"1\" tabindex=\"1\" type=\"submit\" value=\"▲\" class=\"broad\" name=\"weight[$no]\" /><br /><input accesskey=\"1\" tabindex=\"1\" class=\"broad\" type=\"submit\" value=\"▼\" name=\"weight2[$no]\" /></div><input accesskey=\"1\" tabindex=\"1\" type=\"submit\" class=\"UpArrow\" value=\"↑\" name=\"weight3[$no]\" /> </div>"; echo "</td>"; echo "<td class=\"TableName\"><span><a href=\"news_edit.php?id=${item['id']}\">${item['title']}</a></span></td>"; echo "<td class=\"CheckBoxPlace\"><input type=\"hidden\" name=\"active_o[$no]\" value=\"1\" /><input type=\"hidden\" name=\"active2[$no]\" value=\"0\" /><p class=\"CheckBox\"><input type=\"checkbox\" name=\"active3[$no]\" value=\"1\" checked=\"checked\" accesskey=\"1\" tabindex=\"1\" /></p></td>"; echo "</tr>\n"; $i ++; } } else { $dberror = true; $dbermsg = "一覧取得時のエラー" . mysqli_errno($con).": ".mysqli_error($con)."<br />\n"; } } else { // 以下省略 } ?> </body> <script type="text/javascript"> function deleteNews() { if ( window.confirm("選択されたニュースを削除します。\nよろしいですか?") ) { document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.submit(); } return false; } </script> </html> // newsUpdate.phpファイル switch ( $mode ) { case "delete": //ニュース削除 if (isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); //押下したボタン番号を取得 $sql = "DELETE FROM news WHERE listingorder='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql); } //表示順を更新する $sql = "SELECT * FROM news WHERE user = '" . $_SESSION['loggedinUser'] . "' ORDER BY listingorder, lastupdate ;"; mysqli_query($con, "set names utf8"); $rs = mysqli_query($con, $sql); $order = 0; if ( $rs ) { while ($item = mysqli_fetch_array($rs)) { $id = $item["id"]; $updateSQL = "UPDATE news SET listingorder='" . $order . "' WHERE id='" . $id . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $updateSQL); $order ++; } } break; 以下省略

みんなの回答

  • taisei64
  • ベストアンサー率33% (1/3)
回答No.10

「$sql = "DELETE FROM news WHERE listingorder='" . $no . "';";」 ここの最後にセミコロンが二つ付いているのが気になるのですが、最初のはいらないのではないでしょうか? また、どうしてもうまくいかないのなら削除のフラグを立てるいう方法もあります。

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.9

> <?php "<input type='hidden' value='' name='delno' />"; ?> この件に関してですが、俺の環境では 現象を再現できませんでしたので、 理由は さっぱり 分かりません。 なんか、どこか 設定が違うのだとは思いますが、具体的には 分かりません。 お力になれず 申し訳ありません。

ikam2010
質問者

補足

いえいえ ありがとうございます!おそらく、どこがしかの設定の問題だとは思いますが、会社の管理画面ですので、別の箇所も作らなければならず、じっくり考える事が出来ません。すいません。でも、本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.8

そちらのスクリプトを元に、そちらのやりたいであろう事を、ミニマムに作ってみました。 DBは使ってませんが、そちらなら理解できると思いますので、流れのご参考までに。 ちなみに、そちらのファイル名を そのまま使用してますが、 間違ってもご自分のスクリプトに上書きしないでください。 ---------------------------------------------------------------------- ○ news.php ---------------------------------------------------------------------- <?php $DimRider = array (21 => "ダブル" , 20 => "ディケイド" , 19 => "キバ" , 18 => "電王" , 17 => "カブト"); //$me = $_SERVER[PHP_SELF]; $next = "newsUpdate.php"; $out = "<form name=newsUpdateForm action=$next method=post> <input type=hidden name=Code Value=''> <input type=hidden name=Mode Value=''> <table border=1>"; while (list($Code , $Name) = each($DimRider)) { $out .= "<tr><td>$Code</td><td>$Name</td><td><input type=submit name=Submit$Code value='削除' onClick='deleteNews($Code); return false;'></td></tr>"; } $out.= "</table></form>\n"; ?> <html> <head> <script type="text/javascript"> function deleteNews(code) { if ( window.confirm("選択されたライダー["+code+"]を削除します。\nよろしいですか?") ) { document.newsUpdateForm.Mode.value = "delete"; document.newsUpdateForm.Code.value = code; document.newsUpdateForm.submit(); } return false; } </script> </head> <body> <?= $out; ?> </body> </html> ---------------------------------------------------------------------- ---------------------------------------------------------------------- ○ newsUpdate.php ---------------------------------------------------------------------- <html> <body> <?php //print_r($_POST); print "ここに コード[" . $_POST[Code] . "]を削除する処理を入れる。<hr>"; ?> <a href=news.php>戻る</a> </body> </html> ----------------------------------------------------------------------

ikam2010
質問者

お礼

ありがとうございました。 下記のように記述したら、解決しました! 参考になりました!! しかし、解決したので、よいのですが、 <?php "<input type='hidden' value='' name='delno' />"; ?> って書かないと、動かないんです。phpをなくして、 <input type='hidden' value='' name='delno' /> このように書くと、動きませんでした。また、 <?php echo "<input type='hidden' value='' name='delno' />"; ?> echo を入れると、動かないんです。これが、本当に分かりません。 どういうことなのか、教えて頂けたら、尚嬉しいです。 <?php "<input type='hidden' value='' name='delno' />"; ?> echo "<td><input accesskey=\"1\" tabindex=\"1\" class=\"DeleteBt\" type=\"image\" value='削除' name='submit_del[$no]' src=\"images/delete_button.gif\" alt=\"削除\" onclick=\"deleteNews($no,'$name'); return false;\" /></td>"; ------------------------------------------------------------ switch ( $mode ) { case "delete": //ニュース削除 if(isset($_POST["submit_del"])){  $no = key($_POST[submit_del]);  $sql = "DELETE FROM news WHERE id='" . $no . "';";  mysqli_query($con, "set names utf8");  mysqli_query($con, $sql) or die(mysql_error()); } ------------------------------------------------------------ <script type="text/javascript"> //<![CDATA[ function deleteNews(id,name){ if ( window.confirm("選択されたニュース["+name+"]を削除します。\nよろしいですか?") ) { document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.delno.value = id; document.newsUpdateForm.submit(); } return false; } //]]> </script>

ikam2010
質問者

補足

ありがとうございます。実は、会社の管理画面なんですが、今管理画面よりも、どうしても立ち上げたいサイトがあるので、そのデザイン~コーディングをやってくれと言われまして、止まってしまってる状態です。 サイト構築が終われば、再度管理画面php化に取り掛かれると思いますので、その時に、試させて頂きます!

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

デバッグのポイントだけ (1)DELETEを発行した$sql文をprintしてみる。 (2)SQLの発効後エラーを検出する mysqli_query($con, $sql); を mysqli_query($con, $sql) or die(mysql_error()); とします。 しつこいようですがlistingorderを削除のキーにするなら UPDATE news SET listingorder= ・・・ は絶対だめ。

ikam2010
質問者

補足

エラーは出ない状況です。 UPDATE news SET listingorder= ・・・の箇所は、コメントアウトしても、変わりませんでしたので、いらないのかもしれません。 すいません。bm_hiroさんの回答に、補足させて頂いた文章そのままで、大変申し訳ないのですが、アドバイス頂けましたら、本当に嬉しいです。 bm_hiroさんから頂いた回答のように書きましたら、削除はされまして、エラーは出なかったんですが、どのレコードのボタンを押しても、listingorderが、0である列が削除されてしまいます。 news.phpの方で、while ($item = mysqli_fetch_array($rs)) {}内に、 <form></form>タグを記述すれば、削除ボタンを押したレコードが、削除されて、成功するのですが、デザイン上、どうしても、formタグをwhileで繰り返すのは、不可能であり、どうしてもwhile ($item = mysqli_fetch_array($rs)) {}よりも、外で、ずっと上に記述する必要があるんです。 そこで、自分は、newsUpdate.phpで処理するのは厳しいのでは?と思い、 news.phpのformのactionを、<?php echo $_SERVER["PHP_SELF"]?>にして、 下記のように記述しまして(一部です)、onclick=\"deleteNews($no); return false;\" を消去したら、見事に削除ボタンを押したレコードが、削除されて、成功しました。 $con = mysqli_connect("localhost", "root", "*******"); if ( $con ) { //データベースサーバへの接続OK if ( mysqli_select_db($con, "**********") ) { $sql = "SELECT * FROM news WHERE user = '" .         $_SESSION['loggedinUser'] . "' ORDER BY listingorder DESC, lastupdate DESC; "; mysqli_query($con, "set names utf8"); $rs = mysqli_query($con, $sql); if(isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); echo $no; $sql = "DELETE FROM news WHERE id='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql) or die(mysql_error()); } if ( $rs ) { while ($item = mysqli_fetch_array($rs)) { $no = $item["id"] ; 以下省略 しかし、 onclick=\"deleteNews($no); return false;\"を記述し、function文は下記の形式で、再度試したら、削除すらされない状況でした。 function deleteNews(dno) { if ( window.confirm("選択されたニュースを削除します。\nよろしいですか?") ) { document.newsUpdateForm.delno.value = dno;         ↑これも消去したりもしてみました。          //document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.submit(); } return false; } 出来れば、javascriptでの、確認メッセージは付けたいです。 そして、もし、newsUpdate.phpで、処理出来るのであれば、そうしたいです。 でも、どうしてもnewsUpdate.phpで処理できないのであれば、news.phpで処理して問題ないです。。 しかし、javascriptでの、確認メッセージは付けたいです。重複した文章で申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

最低限、下記のことを教えてください。 ・そのPHPを走らせた結果出力されたHTMLは構文として正しいものが表示されているか。 ⇒ブラウザに出力してみてソース表示、などとすれば表示されますよね。 ・$sqlや、$updateSQL変数に代入したSQL構文にシンタックスエラーはないのか。 ⇒SQLを実行する前に、<?php echo $sql?>などとしてechoしてやれば容易に値が確認出来ますよね。 ついでに、出力されたSQL文をPHPMyAdminなどで直接実行して、エラーがでないか確認もしてみてください。 ・Javascriptが正常に動作しているのか ⇒現状では「うまく動かない」ことしか分かりません。submitした結果、newsUpdate.phpにPOST自体はされているのでしょうか? もし、newsUpdate.phpに遷移自体はされているというのであれば、newsUpdate.php内の最初に <?php print_r($_POST); ?> など書いて、値が渡ってきているのか試してみてはどうでしょう。 ・その他にエラーは出ていないのか <?php error_reporting(E_ALL); ?> などとして、すべてのエラーが表示するようにしてみて、エラーはでないでしょうか。

ikam2010
質問者

補足

そうですね。エラーは出てない状況ですが、 <?php error_reporting(E_ALL); ?> で確認します。

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.5

#1です。 とりあえず、<html>すらありませんし、<table>の始まりもありませんので、 こんだけの長さでも、結構 削ってるんだろうなとは思います。 んで、なんで こんだけ 難解な書き方をしたのか 良く分かりませんが、 何らかの事情があったものとして、考えてみたいと思います。 #3さんが言ってるように、問題の切り分けは とても重要です。 特にPHPとJavaScriptのミックスなので、どちらに原因があるか分かると、それだけでも結構 楽です。 あと本題とは全く関係ないのですが、「\"」が やたらとあって読みづらいなぁ。。と思いました。 HTMLでは、シングルクォートでも代用できますし、 W3C準拠からかけ離れますが、value以外では 概ねつけなくても 動きます。 本題に入りますが、Ajaxライブラリを使うと、もうちょい楽に書ける気はしますが、 検討の余地はありませんか? 検証もしていませんし、説明ははしょりますが、こんなんでは動きませんか? ------------------------------------------------------------ <input accesskey='1' tabindex='1' class='DeleteBt' type='image' value='削除' name='submit_del[$no]' src='images/delete_button.gif' alt='削除' onclick='deleteNews($no); return false;' /></td> ------------------------------------------------------------ function deleteNews(dno) { if ( window.confirm("選択されたニュースを削除します。\nよろしいですか?") ) { document.newsUpdateForm.delno.value = dno; document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.submit(); } return false; } ------------------------------------------------------------ switch ( $mode ) { case "delete": //ニュース削除 if (isset($_POST[delno])){ $no = $_POST[delno]; //押下したボタン番号を取得 $sql = "DELETE FROM news WHERE listingorder='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql); } ------------------------------------------------------------

ikam2010
質問者

お礼

下記のように記述したら、解決しました!ありがとうございました。 しかし、解決したので、よいのですが、 <?php "<input type='hidden' value='' name='delno' />"; ?> って書かないと、動かないんです。phpをなくして、 <input type='hidden' value='' name='delno' /> このように書くと、動きませんでした。また、 <?php echo "<input type='hidden' value='' name='delno' />"; ?> echo を入れると、動かないんです。これが、本当に分かりません。 どういうことなのか、教えて頂けたら、尚嬉しいです。 <?php "<input type='hidden' value='' name='delno' />"; ?> echo "<td><input accesskey=\"1\" tabindex=\"1\" class=\"DeleteBt\" type=\"image\" value='削除' name='submit_del[$no]' src=\"images/delete_button.gif\" alt=\"削除\" onclick=\"deleteNews($no,'$name'); return false;\" /></td>"; ------------------------------------------------------------ switch ( $mode ) { case "delete": //ニュース削除 if(isset($_POST["submit_del"])){  $no = key($_POST[submit_del]);  $sql = "DELETE FROM news WHERE id='" . $no . "';";  mysqli_query($con, "set names utf8");  mysqli_query($con, $sql) or die(mysql_error()); } ------------------------------------------------------------ <script type="text/javascript"> //<![CDATA[ function deleteNews(id,name){ if ( window.confirm("選択されたニュース["+name+"]を削除します。\nよろしいですか?") ) { document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.delno.value = id; document.newsUpdateForm.submit(); } return false; } //]]> </script>

ikam2010
質問者

補足

ありがとうございます。上記のように、書きましたら、削除はされまして、エラーは出なかったんですが、どのレコードのボタンを押しても、listingorderが、0である列が削除されてしまいます。 news.phpの方で、while ($item = mysqli_fetch_array($rs)) {}内に、 <form></form>タグを記述すれば、削除ボタンを押したレコードが、削除されて、成功するのですが、デザイン上、どうしても、formタグをwhileで繰り返すのは、不可能であり、どうしてもwhile ($item = mysqli_fetch_array($rs)) {}よりも、外で、ずっと上に記述する必要があるんです。 そこで、自分は、newsUpdate.phpで処理するのは厳しいのでは?と思い、 news.phpのformのactionを、<?php echo $_SERVER["PHP_SELF"]?>にして、 下記のように記述しまして(一部です)、onclick=\"deleteNews($no); return false;\" を消去したら、見事に削除ボタンを押したレコードが、削除されて、成功しました。 $con = mysqli_connect("localhost", "root", "*******"); if ( $con ) { //データベースサーバへの接続OK if ( mysqli_select_db($con, "**********") ) { $sql = "SELECT * FROM news WHERE user = '" .         $_SESSION['loggedinUser'] . "' ORDER BY listingorder DESC, lastupdate DESC; "; mysqli_query($con, "set names utf8"); $rs = mysqli_query($con, $sql); if(isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); echo $no; $sql = "DELETE FROM news WHERE id='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql) or die(mysql_error()); } if ( $rs ) { while ($item = mysqli_fetch_array($rs)) { $no = $item["id"] ; 以下省略 しかし、 onclick=\"deleteNews($no); return false;\"を記述し、function文は下記の形式で、再度試したら、削除すらされない状況でした。 function deleteNews(dno) { if ( window.confirm("選択されたニュースを削除します。\nよろしいですか?") ) { document.newsUpdateForm.delno.value = dno;         ↑これも消去したりもしてみました。          //document.newsUpdateForm.mode.value = "delete"; document.newsUpdateForm.submit(); } return false; } 出来れば、javascriptでの、確認メッセージは付けたいです。 そして、もし、newsUpdate.phpで、処理出来るのであれば、そうしたいです。 でも、どうしてもnewsUpdate.phpで処理できないのであれば、news.phpで処理して問題ないです。。 しかし、javascriptでの、確認メッセージは付けたいです。なんだか、重複した文章で申し訳ありませんが、 アドバイス頂けますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

このスクリプトですべてなのであれば、 inputタグがformタグで囲まれていないため、javascriptでsubmit()しても、POSTはされませんね。 <input type="hidden" name="mode" /> とかといった記述もしないと、 document.newsUpdateForm.mode.value = "delete"; ここのところでもこける気がします。 そこを踏まえた上で、news.phpがブラウザに出力されたら、HTMLソースがどのようになってるか確認してください。

ikam2010
質問者

補足

すいません。かなり削ってまして、formタグは存在します。。 <?php のさらに上にあります。 <input type="hidden" name="mode" /> もformタグのすぐ下に記述してありあります。 どちらにせよ、複雑に書き過ぎてしまってる状況です。

全文を見る
すると、全ての回答が全文表示されます。
  • anbsd
  • ベストアンサー率33% (1/3)
回答No.3

こんばんは。 質問記事の削除でしたら、マイページの質問・回答履歴、または質問記事ページのどちらかでできた気がします。 それと質問の本題の方ですが、私自身普段質問させて頂く側なので、アドバイスというアドバイスは出来ないと思うのですが、折角レスさせて頂いたのでその件にも触れさせて頂きます。 プログラムが動作しない場合、どこで上手く行ってないかを確認するのが良いかと思います。 具体的な確認方法ですが、 1. newsUpdate.phpの頭と、case "delete": の後ろに echo $_POST["submit_del"]."挿入箇所を示す文字列"; を記述し削除記事番号が表示されるかを確認。 表示されない場合はその部分でつまづいている事がわかります。 2. $sql = "DELETE FROM news WHERE listingorder='" . $no . "';"; の直後に echo $sql; を記述。 表示されるSQL文が実際に動作するかどうかの確認。 PHPを介さず、MYSQLに直接SQL文を渡してそのSQL文が思惑通りに動作するかの確認。 動作しないようであればSQL文に問題がある事がわかります。 3. 1と2を試してそれでも削除出来ない場合はphpのクエリ実行部分に問題がある可能性があります。 参考にもならないと思いますが、参考までに…。

ikam2010
質問者

補足

まず、質問記事の削除出来ました。すいません、ありがとうございます。 おそらく、phpのクエリ実行部分に問題があるかと思われます。 実は、会社の管理画面なんです。で、会社の人間から、管理画面のphp化よりも、今どうしても立ち上げたいサイトがあるので、デザイン~コーディングをしてくれと言われたので、止まってる状態です。 再度管理画面php化に取り掛かったら、頑張ろうと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ごめんなさい、こんなダラダラ丸投げされても読む気がおきません。 結局どういうアドバイスが欲しいんですか? listingorderの特定のidを消したいというのは何となくわかります。 ユニークなidなのだから1件消えますよね? ただ、そのあとlistingorderを付け変えようとしてません? これはあり得ません。 削除データの競合が起きます。 削除をするのに使うidは付け替えは厳禁です。 上手くいかないというのはどういう状態か提示することと いまのロジックは破たんしているので別のやり方を考えること をお勧めします。

ikam2010
質問者

補足

すいません。説明不足でした。 下記のボタンを押すと、 echo "<input accesskey=\"1\" tabindex=\"1\" class=\"DeleteBt\" type=\"image\" value=\"削除\" name=\"submit_del[$no]\" src=\"images/delete_button.gif\" alt=\"削除\" onclick=\"deleteNews(); return false;\" /></td>"; レコード1件のみ、削除出来るようにと、 javascriptで、function deleteNews()により、newsUpdate.phpのswitch文の case "delete": //ニュース削除 で、 ↓により if (isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); //押下したボタン番号を取得 $sql = "DELETE FROM news WHERE listingorder='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql); } 押下したボタン番号を取得しようと試みたのですが、削除もされない状況です。 listingorderは、0から自動的に付与されるユニークキーです。 別の方法を考えるべきでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> 質問番号5654502は失礼しました。お手数ですが、削除してください。 これは 誰に向けてのメッセージでしょうか? ここで質問を投稿した事がないので分かりませんが、 削除は自分で行うものではないんでしょうか? > 削除ボタンを押すと、そのレコード1件分のみ、削除出来るようにしたいのですが、 > うまくいきません。ご教授願います。 具体的に どのように「うまくいかない」んでしょうか? それが分からないことには、ソースが長くて読む気が起きません。。。

ikam2010
質問者

補足

>ここで質問を投稿した事がないので分かりませんが、 削除は自分で行うものではないんでしょうか? 説明不足でしたね。。すいません。 自分も、あまり質問回数は、多くない為か、 自分で削除しようと極力試みたのですが、どうにも削除方法が、分からず、出来ませんでした。 削除方法お分かりでしたら、教えて頂けたら、幸いです。 質問についてですが、これまた説明不足で、すいません。上記の補足と被ってしまいますが、読んで頂けましたら、幸いです。 下記のボタンを押すと、 echo "<input accesskey=\"1\" tabindex=\"1\" class=\"DeleteBt\" type=\"image\" value=\"削除\" name=\"submit_del[$no]\" src=\"images/delete_button.gif\" alt=\"削除\" onclick=\"deleteNews(); return false;\" /></td>"; レコード1件のみ、削除出来るようにと、 javascriptで、function deleteNews()により、newsUpdate.phpのswitch文の case "delete": //ニュース削除 で、 ↓により if (isset($_POST["submit_del"])){ $no = key($_POST[submit_del]); //押下したボタン番号を取得 $sql = "DELETE FROM news WHERE listingorder='" . $no . "';"; mysqli_query($con, "set names utf8"); mysqli_query($con, $sql); } 押下したボタン番号を取得しようと試みたのですが、削除もされない状況です。 listingorderは、0から自動的に付与されるユニークキーです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • php データ削除

    一覧画面に更新、削除というボタンをつくり番号を受け取って削除したいのですが、削除ボタンを押しても画面は変わるのですが削除されません 助けてください 番号 int プライマリーキー 氏名 varchar 住所 varchar 一覧画面のソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=post>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<form action=sakujo.php method=post>"; echo "<td><input type=submit value=削除></td>"; echo "</form>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 削除ソース  sakujo.php <html> <body> <? // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // DELETE文を実行 $sql = "delete from tbl_test where '番号'= 番号; if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データベースから切断 mysql_close($con); // 登録完了メッセージの表示 echo "削除完了"; ?> </body> </html> どういう風にpostで渡せばいいですか?

    • ベストアンサー
    • MySQL
  • php + MySQLでデータ削除 更新

    一覧画面に更新、削除というボタンをつくり番号を受け取って削除したいのですが、削除ボタンを押しても画面は変わるのですが削除されません 助けてください 番号 int プライマリーキー 氏名 varchar 住所 varchar 一覧画面のソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=post>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<form action=sakujo.php method=post>"; echo "<td><input type=submit value=削除></td>"; echo "</form>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 削除ソース  sakujo.php <html> <body> <? // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // DELETE文を実行 $sql = "delete from tbl_test where '番号'= 番号; if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データベースから切断 mysql_close($con); // 登録完了メッセージの表示 echo "削除完了"; ?> </body> </ht

    • 締切済み
    • PHP
  • 次の掲示板PHPにアクセスすると

    <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if ($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • PHP 未定義の変数について

    以前にも質問しましたが、新たに壁にぶつかってしまったので再度投稿させていただきます。 ToDoリストを作っており、予定を入力フォームからデータベースへ登録、表示することまではできました。 現在は、表示されている全ての予定レコードの右端に"更新"と"削除"のボタンを設置し、それぞれの動作を行いたいと考えております。 それぞれのボタンに<input type=hidden name=No value='.$row[No].'>と記述し、更新箇所を入力するフォームを別ファイルで用意してあります。 しかし"更新"ボタンを押しても、 Notice: Undefined variable: No in C:\××××××××××\input_update.php on line 17 データは削除済か、もしくは存在しません。 というエラーメッセージが出てしまいます。(※"データは削除済みか~"は自分で記述したメッセージです。)実際にデータはあるので、変数の受け渡しがうまくいってないと思うのですが・・・ 調べると、「未定義の変数があるよ」という事なのでしょうが、未定義の変数というものが分かりません。 all_todo.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT * FROM `todo`"; $todo_list=mysql_query($sql); while($row=mysql_fetch_array($todo_list)) { echo("<tr id='honbun'>"); echo("<td>"."<input id='c_change' type='checkbox' name='check' value='check'>".$row["済"]."</td>"); echo("<td id='No'>".$row["No"]."</td>"); echo("<td id='title'>".$row["タイトル"]."</td>"); echo("<td id='todo'>".$row["内容"]."</td>"); echo("<td id='limit'>".$row["期限"]."</td>"); echo("<td id='priority'>".$row["優先度"]."</td>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=更新></td>"); echo("</form>"); echo("<form action=input_update.php method=post>"); echo("<input type=hidden name=No value='.$row[No].'>"); echo("<td><input type=submit value=削除></td>"); echo("</form>"); echo("</tr>\n"); } mysql_free_result($todo_list); mysql_close(); ?> input_update.php <?php $conn = mysql_connect("localhost","root","×××"); if($conn == false) {die("MySQL 接続エラー");} mysql_set_charset("sjis"); mysql_select_db("todo"); $sql="SELECT `No`,`タイトル`,`内容`,`期限`,`優先度` FROM `todo` WHERE `No`='$No'"; $todo_list=mysql_query($sql); if(!$row=mysql_fetch_array($todo_list)) {die("データは削除済か、もしくは存在しません。");} echo "<form action=update.php method=post>"; echo "タイトル<input type=text name=タイトル value=\"" . $row["title"] . "\"> "; echo "内容<input type=text name=内容 value=\"" . $row["todo"] . "\"> "; echo "期限<input type=text name=期限 value=\"" . $row["limit"] . "\"> "; echo "優先度<input type=text name=優先度 value=" . $row["priority"] . "> "; echo "<input type=hidden name=id value=" . $id . ">"; echo "<input type=submit value=更新>"; echo "</form>"; mysql_free_result($todo_list); mysql_close(); ?> というコードです。 私の推測では、 >{die("データは削除済か、もしくは存在しません。");} というメッセージが表示されていることから、フォームからデータの受け渡しは出来ているのだと思います。ただ、意図した変数が渡されていないと思うのですが、フォームのvalue='.$row[No].'という記述に問題があるのか、はたまたname=Noの部分か、SELECT文の記述が悪いのかまったく分かりません。 どなたか知恵をお貸しください。 お願いいたします。

    • ベストアンサー
    • PHP
  • PHP & MySQL 抽出したデータの1番目が出力されない

    学校の課題で、PHP & MySQLを使ってウェブを作っています。 BBTapahtumaテーブルからJas_nroをキーにデータを抽出して、Tap_nroとTap_nimiを降順に出力します。 実行してもエラーはでません。現在BBTapahtumaには10件、該当Jas_nroのレコード数は5件(Tap_nro:10-8-7-6-1)ですが、表示されるのは4件(Tap_nro: 8-7-6-1)で、一番初めにくるべきデータが出てきません。where Jas_nro=$no を外し全レコード抽出(Tap_nro: 9-8-7-6-5-4-3-2-1)したり、order by Tap_nro desc を外して昇順(Tap_nro: 6-7-8-10)にしても、やはり1件目に当たるデータが出力されません。 $_SESSION['no']=$noは「1」が入っており、MySQL consoleで「select * from BBTapahtuma where Jas_nro=1 order by Tap_nro desc;」を実行すると、5件出てくるのでその次の出力の方に誤りがあるのだと思います。 テーブルは下記の3項目。テーブルを閉じた後に Lisa (別ページへのリンクボタン)があります。 Tap_nro, Tap_nimi, Lisatietoja(各データの詳細へのリンクボタン) ソースは次の通りです。どこに間違いがあるのか見つけられません。よろしくお願いいたします。 <?php $host="localhost"; $user="xxxx"; $password="xxxx"; $dbname="bb"; $yhteys = mysqli_connect($host, $user, $password, $dbname); $no = $_SESSION['no']; $sql = "select * from BBTapahtuma where Jas_nro=$no order by Tap_nro desc"; if(!$tulos=mysqli_query($yhteys, $sql)) { echo "error"; exit; } if(!$row=mysqli_fetch_array($tulos, MYSQLI_BOTH)) { echo "tiedot eivat ole tietokannassa."; } echo "<table border=0>"; echo "<tr><td>Numero &nbsp&nbsp</td><td>Tapahtuman nimi &nbsp&nbsp</td><td></td></tr>"; while($row=mysqli_fetch_array($tulos, MYSQLI_BOTH)){ echo "<tr>"; echo "<td>". $row['Tap_nro'] ."</td>"; echo "<td>". $row['Tap_nimi'] ."</td>"; echo "<form action='omatkeikkatiedot11.php' method='POST'>"; echo "<span class='button'><input type=hidden name=Tap_nro value=". $row['Tap_nro'] .">"; echo "<td><input type=submit name=lisa id=lisa value='Listietoja'></td></form></span></tr>"; } echo "</table>"; echo "<br><br>"; echo "<form action=omatkeikkatiedot2.php method=POST>"; echo "<div class='button'><input type=hidden name=Jas_nro value=". $row['Jas_nro'].">"; echo "<input type=submit name='Lisaa' id='laheta' value ='Lisaa'>"; echo "</div></form>"; ?>

    • ベストアンサー
    • PHP
  • PHPでMySQLデータを呼び出し、whileループの中で別テーブルのデータをループするには

    MySQLからuserというテーブルのデータを呼び出し、表示すると同時にフォームとしてデータの変更もできるプログラムを作成しています。 その項目の中に別のusergrというテーブルのデータをリストボックスで表示させたいのですが、うまくいきません。 現状では下記のスクリプトでuserの1番のデータだけが表示されている状態です。(リストボックスも問題なく表示はされていますが…) まわりに聞ける人もいず、本などを見よう見まねで作成したため、根本的に誤ってるところがあるかと思いますが、どうかアドバイス頂けませんでしょうか。 $sql = "SELECT * FROM user"; $mysql->query($sql); while($row = $mysql->fetch()){ $no = $row["no"]; $name = $row["name"]; $division = $row["division"]; $email = $row["email"]; $tel = $row["tel"]; $group = $row["group"]; echo <<<EOT <td align="center">$no</td> <td align="center"><input type="text" name="name[$no]" value="$name" size="10"></td> <td align="center"><input type="text" name="division[$no]" value="$division" size="20"></td> <td align="center"><input type="text" name="email[$no]" value="$email" size="30"></td> <td align="center"><input type="text" name="tel[$no]" value="$tel" size="10"></td> <td align="center"> <select name="group[$no]"> EOT; $sql = "SELECT * FROM usergr LEFT JOIN user ON usergr.grno=user.group"; $mysql->query($sql); while($row = $mysql->fetch()){ $group = $row["group"]; $grno = $row["grno"]; $grname = $row["grname"]; if($row["grno"]==$group){ echo "<option value=\"{$row['grno']}\" selected=\"selected\">{$row['grname']}</option>"; } else { echo "<option value=\"{$row['grno']}\">{$row['grname']}</option>"; } } echo <<<EOT </select> </td> <td align="center"><input type="submit" name="submit_upd[$no]" value="変更"> <input type="submit" name="submit_del[$no]" value="削除"></td> </tr> EOT; }

    • ベストアンサー
    • PHP
  • PHP + MySQLを使用して詳細画面を開く

    いま下記のソースで一覧画面が表示されます! 氏名をクリックしたら別ウインドウで詳細画面を表示させたいのですがやり方がわかりません 参考までに教えてください <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","password","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html>

    • ベストアンサー
    • MySQL
  • 訂正版 次のPHPにアクセス

    するとエラーになります ただしあらかじめgomidbで以下をしてます create table gomibbs(no serial primary key,contents text); grant all on gomibbs to gomiuser; <?php echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">"; echo "本文:<input type=\"text\" size=\"80\" name=\"contents\">"; echo "<input type=\"submit\" value=\"送信\">"; echo "</form>"; $con=pg_connect("dbname=gomidb user=gomiuser host=127.0.0.1"); $contents=$_POST['contents']; if($contents) { $contents=pg_escape_string(htmlspecialchars($contents)); pg_query($con,"insert into gomibbs(contents) values('$contents')"); } $rs=pg_query($con,"select * from gomibbs"); while($row=pg_fetch_array($rs)) { print $row['no'].":".$row['contents']."<br>"; } pg_close($con); ?> エラーになります ところが pg_query($con,"insert into gomibbs(contents) values('$contents')"); の所を pg_query($con,"insert into gomibbs(no,contents) values(1,'$contents')"); とすれば一度だけOKです どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • データーベース接続 入力フォーム

    phpでデータベースを作成しています! 登録フォームからデータを入力して新しくデータを追加したいと思います! 番号 int プライマリーキー 氏名 varchar 住所 varchar です いまのプログラムは番号が重複じゃなかったら氏名と住所空白でも登録できてしまいます! 全部しないとエラーメッセージが返ってきて入力しなおさせるにはどうしたらいいですか? if文の書き方を教えてください また番号を空白だとエラーが返ってきます。どうしたらいいですか? 入力フォームのプログラム(regist.php) <HTML> <HEAD><TITLE>新規登録</TITLE></HEAD> <BODY> <BLOCKQUOTE> <FORM ACTION = "toroku.php" METHOD = "POST"> <BR><BR>登録画面<BR><BR> 番号 <INPUT TYPE="NAMBER" NAME = "ID"><BR><BR> 氏名 <INPUT TYPE="TEXT" NAME = "NAME"><BR><BR> 住所 <INPUT TYPE="TEXT" NAME = "ADDR"><BR><BR> <A HREF="http://localhost/test5.php"> <INPUT TYPE = "SUBMIT" VALUE = "登録する"></A> <A HREF="http://localhost/test5.php">一覧に戻る</A> </BODY> </BLOCKQUOTE> </FORM> </BODY> </HTML> 追加登録のプログラム(toroku.php) <HTML> <HEAD><TITLE>登録完了</TITLE></HEAD> <BODY> <?php $con=mysqli_connect("localhost","root","パスワード","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; mysqli_close($con); ?> <BR><BR> <A HREF="http://localhost/test5.php"> <INPUT TYPE = "SUBMIT" VALUE = "一覧へ戻る"></A> </BODY> </HTML> 表示のプログラム(test5.php) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","パスワード","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 見づらくってごめんなさい

    • ベストアンサー
    • PHP
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • コマフィルムの汚れを無水エタノールや堀内カラーのクリーナーで取り除くことができますが、注意が必要です。
  • 無水エタノールを使用する場合、効果がないだけでなく、フィルムに悪影響を及ぼす可能性もあるため、注意が必要です。
  • 堀内カラーのクリーナーを使用する場合、フィルムに刺激を与えずに汚れを取り除くことができますが、綿棒の種類にも注意が必要です。
回答を見る

専門家に質問してみよう