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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2044閲覧

動作が確認できない

a-_.

総合スコア133

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/08/09 02:38

編集2016/09/06 02:23

・「投稿」は投稿にチェックかつボタン押下で入力内容を新規に投稿
・チェックボックスには各投稿のIDをvalueに設定し、ボタン押下で受け取れるようにして
・「更新」は更新にチェックかつボタン押下で一覧のなかからチェックをつけた投稿に対し、名前・内容の入力値で内容を更新
・「削除」は削除にチェックかつボタン押下で一覧のなかからチェックをつけた投稿を削除
という動作にしたいんですが、それぞれブラウザ表示はされるけどボタンを押しても動作確認ができない状態です

調べてPHPコードをif文毎に書けば出力可能とあったので打ってみたんですが、このコードだと「投稿」は出来て、「更新」「削除」は各ボタンが出力されただけで動作は何もありませんでした

調べてみて恐らくフォームではなくPHPコードでおかしい点があるんじゃないか、という疑いはあるんですが、私が調べる限り有力な情報が得られなかったです
どなたかご指摘願います

PHP

1<?php 2 $link = mysqli_connect($host, $user, $password, $dbname) or die("NG"); 3 4 mysqli_select_db($link, "XXX"); 5 6 if (isset($_POST['name'], $_POST['comment'])) { 7 $name = $_POST['name']; 8 $comment = $_POST['comment']; 9 mysqli_query($link, "INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')"); 10 } 11 12 if (isset($_POST['update'])) { 13 $update = $_POST['update']; 14 mysqli_query($link, "UPDATE XXX SET name = '$name', comment = '$comment' WHERE id = $update"); 15 } 16 17 if (isset($_POST['delete'])) { 18 $delete = $_POST['delete']; 19 mysqli_query($link, "DELETE FROM XXX WHERE id = $delete"); 20 } 21 22 $result = mysqli_query($link, "SELECT * FROM XXX"); 23?> 24 25<html> 26 <head> 27 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 28 </head> 29 <body> 30 <form method="post" action=""> 31 <table> 32 <tr> 33 <td> 34 名前:<input type="text" name="name"> 35 内容:<textarea name="comment" cols="30" rows="3"></textarea> 36 <input type="radio" name="bbs" value="post" checked> 37 <input type="submit" name="post" value="投稿"> 38 <input type="radio" name="bbs" value="update"> 39 <input type="submit" name="update "value="更新"> 40 <input type="radio" name="bbs" value="delete"> 41 <input type="submit" name="delete" value="削除"> 42 </td> 43 </tr> 44 </table> 45 46<?php 47 while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 48?> 49 50 <table> 51 <input type="checkbox" name="bbs[]" value="<? = $row['$id'] ?>"> 52 <tr> 53 <td>名前: 54 <?php echo $row['name'] ?> 55 </td> 56 </tr> 57 <tr> 58 <td>内容: 59 <?php echo $row['comment'] ?> 60 </td> 61 </tr> 62 </table> 63 64<?php 65 }; 66 mysqli_free_result($result); 67 68 mysqli_close($link); 69?> 70 71 </form> 72 </body> 73</html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

なるほど、だいぶ修正してきましたね
この場合ラジオボタンを参照してないですよね?
参照しておいて新規で投稿するというのがちょっと解せませんが
以下の様な感じで組み立てればよいのでは?

PHP

1<?php 2$sql=""; 3$id = filter_input(INPUT_POST,'id')?:""; 4$name = filter_input(INPUT_POST,'name')?:""; 5$comment = filter_input(INPUT_POST,'comment')?:""; 6$post = filter_input(INPUT_POST,'post')?:""; 7$update = filter_input(INPUT_POST,'update')?:""; 8$delete = filter_input(INPUT_POST,'delete')?:""; 9if($post) { 10 $sql="INSERT INTO XXX (name,comment) VALUES ('$name', '$comment')"; 11} 12if($id!==""){ 13 if($update) { 14 $sql="UPDATE XXX SET name = '$name', comment = '$comment' WHERE id = $id"; 15 } 16 if($delete) { 17 $sql="DELETE FROM XXX WHERE id = $id"; 18 } 19} 20print $sql;//ここでSQLを発行する 21?> 22 23<form method="post" action=""> 24<input type="hidden" name="id" value="123456"> 25名前:<input type="text" name="name" value="hoge"> 26内容:<textarea name="comment" cols="30" rows="3">fuga</textarea> 27<input type="submit" name="post" value="投稿"> 28<input type="submit" name="update" value="更新"> 29<input type="submit" name="delete" value="削除"> 30</form>

ちなみにmysqliの手続き型でSQLに値を埋め込む場合はmysqli_real_escape_string()
など適切にエスケープをしないと文法エラーやセキュリティ問題になります

投稿2016/08/09 03:10

yambejp

総合スコア114742

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

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

a-_.

2016/08/09 06:53

ご回答ありがとうございます >ラジオボタンを参照してない すいませんが、この意味を教えてもらえますか
yambejp

2016/08/09 06:59

<input type="radio" name="bbs" ・・・> で書いてあるラジオボタンを、postしていますが $_POST["bbs"]を参照していないので、なんの役にも立っていない・・・ という意味です。 今回のケースであればラジオボタンを書かないでください
a-_.

2016/08/09 07:31

せっかくのアドバイスありがたいんですが今回はラジオ~は必須条件としておきたいので引き続き書きたいと思います お話の通りだと質問文のコードからだと、ラジオ~を押すことで$_POST[’bbs’]を実行するためのコードが必要という事ですよね
yambejp

2016/08/09 07:37

いや、書いておくのは自由ですが、 PHP側からなにも使われていないということです。 今後の仕様拡張を考えているのであれば好きにしてください ただ質問をするときに無駄なコードを入れると 質問の本質にたどり着くのに時間がかかるし プログラムの上達にマイナスですよ ということだけ念頭においてください
guest

0

以下の部分が違うのではないでしょうか?

php

1 if (isset($_POST['name'], $_POST['comment'])) { 2 $name = $_POST['name']; 3 $comment = $_POST['comment']; 4 mysqli_query($link, "INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')"); 5 } 6

上記のissetの条件を以下のように、$_POST['post']についてもチェックする

php

1 if (isset($_POST['post'], $_POST['name'], $_POST['comment'])) { 2 $name = $_POST['name']; 3 $comment = $_POST['comment']; 4 mysqli_query($link, "INSERT INTO XXX (name, comment) VALUES ('$name', '$comment')"); 5 }

$_POST['name']と$_POST['comment']は、更新、削除時にも存在するため、必ず1個目のif文でtrueとなるため、INSERTしてから update 、 deleteが動くような感じとなるため誤動作しているものと思われます。

こういった場合は、$_POSTの値を比較することが肝要です。
var_dump($_POST); などを入れ、$_POSTの内容が予定しているかどうかを調べながらチェックするデバック方法もあります。

投稿2016/08/09 02:59

KenjiObata

総合スコア440

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問