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

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

ただいまの
回答率

90.51%

  • MySQL

    5872questions

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

  • phpMyAdmin

    652questions

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

設備使用画面のマスタメンテナンス画面作成

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 298

ryusan_012

score 47

こんにちは

PHPで設備使用画面作っています
マスタメンテナンス画面を作ったんですがブラウザ上で表示されません。
登録している設備をラジオボタンで選択して変更画面に移動するか、データを削除します。
Jqueryを使わずにdeleteをPHPに受け渡そうとしてました

master.php

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Master Maintenance</title>
    echo("try");
    <script type="text/javascript">

        function del_action(){
            document.getElementById("mydel").action="master.php";
            document.getElementById("mydel").submit()
            return false;;
        }

    </scipt>

    </head>

    <body>
        <h1>マスタメンテナンス画面</h1>

        <p><input type="button" name="regist" onclick="location.href= 'registration.php'" value="新規登録" /></p>

    <form method="post" id="mydel" action="change.php">

        <table border = "1" width = "auto">

            <tr>
            <th>設備No</th>
            <th>設備名</th>
            <th>選択</th>
            </tr>

        <?php

            $pdo = new PDO ('mysql:host=localhost;dbname=simplefacilityusesystem;charset=utf8', 'user', 'paaward');        //データベース接続
            foreach ( $pdo->query ( 'select * from facility' ) as $row ) {

                echo '<tr>';
                echo '<td>', $row ['facility_number'], '</td>';
                echo '<td>', $row ['facility_name'], '</td>';
                echo '<td><input type="radio" name="choice" value="' . $row['facility_number'] . '"></td>';
                echo '</tr>';
                echo "\n";
            }

            if(isset($_POST["delete"])){

                $sql=dpo->prepare(delete from facility where facility_number = );
                $sql->execute();
            }

        ?>

        </table>

            <input type="submit" name="change" value="変更" />
            <input type="button" id="del" name="delete" onclick="del_action()" value="削除" />
            print "<script language=javascript>del_action()</script>";
    </form>

            <br /><p><input type="submit" onclick="location.href= 'menu.php'" value="前画面に戻る" /></p>

    </body>

</html>

xamppでやっています。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/05/18 09:25

    プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。

    キャンセル

  • mts10806

    2018/05/18 09:28

    あとPHP使われている場合はバージョンなどの環境情報は必須です。サーバーは立ち上がっているか、ファイル名 などなど。開発段階ではエラー表示はONにしてください。でないとプログラムが中断するレベルのエラーがでたときに何が起きているか分かりません。

    キャンセル

  • ryusan_012

    2018/05/18 09:40

    慣れてなくて申し訳ないです。

    キャンセル

  • mts10806

    2018/05/18 09:42

    質問は質問者さん自身が編集できるので1つ1つ修正してみてください。あと、パスワードなどは悪用される可能性がないとも言えないので空にするかhogehogeなど適当な文字列に置き換えてください。

    キャンセル

回答 1

checkベストアンサー

0

ひとまず下記で表示されるのでは。

</scipt>

</head>


</script>

</head>

scriptタグがスペルミスで閉じられていない。

phpでもエラーがありますね。

$pdo = new PDO ('mysql:host=localhost;dbname=simplefacilityusesystem;charset=utf8', 'maint', '1qaz!QAZ');        //データベース接続

としておきながら

$sql=dpo->prepare(delete from facility where facility_number = );


dpo  → $pdo
としなければならないですし、引数のSQLがクォートで閉じられてない。
また、where句がちゃんと最後まで指定されていない(検索文言がセットされていない)

下記は不要。なぜならボタンにonclickで割り振られているからです。

print "<script language=javascript>del_action()</script>";


PHPはサーバー側の言語なので、html表示前に実行されます。
上記の記述があることで「アクセス時点でdel_action()が実行される」という事態が起きているものと推察されます。
あと、「特定の情報だけ削除したい」のであれば、その特定の情報(例えばIDなど)を渡さなければなりません。
master.php、change.phpなど複数のPHPの記述がありますが、どのコードがどのファイルに記述してあるのでしょうか?

何を見て書きましたか?
約束事がほとんど守られていません。1行1行 もっと言えば1つ1つの関数や記述を確かめながら記述していってください。

あとできれば、構文などのエラーチェックをしてくれるIDEをご利用ください。

 サンプルコード(ボタンそれぞれ表示版)

そのまま使わないように。必ず全て理解してから適応してください。未検証コードなので動作保証はありません。あくまで実装のイメージとして参考にしてください。

<?php
//データベース接続
$pdo = new PDO ('mysql:host=localhost;dbname=simplefacilityusesystem;charset=utf8', 'user', 'paaward');

//データの削除
//select前に記述することでselect時に最新状態を取得する
if ($_SERVER ['REQUEST_METHOD'] === 'POST') {
    if(array_key_exists($_POST, "facility_number") && !empty($_POST["facility_number"])){
        $sql=$pdo->prepare('delete from facility where facility_number = :facility_number');
        if(!$sql->execute(array(':facility_number' => $_POST["facility_number"]))){
            die("削除失敗");
        }
    }
}

//データの取得
$facilityData = $pdo->query ( 'select * from facility' );
$facilityList = "";
foreach ( $facilityData as $row ) {
    $facilityList .='<tr>';
    $facilityList .='<td>', $row ['facility_number'], '</td>';
    $facilityList .='<td>', $row ['facility_name'], '</td>';
    $facilityList .='<td><form method="post" id="mychange'.$row['facility_number'] .'" action="change.php"><input type="hidden" name="facility_number" value="' . $row['facility_number'] . '"><button name="update">編集</button></form></td>';
    $facilityList .='<td><form method="post" id="mydel'.$row['facility_number'] .'"><input type="hidden" name="facility_number" value="' . $row['facility_number'] . '"><button name="delete">削除</button></form></td>'; //actionを省略するとデフォルトで「自身」となる
    $facilityList .='</tr>';
    $facilityList .="\n";
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Master Maintenance</title>
    </head>
    <body>
        <h1>マスタメンテナンス画面</h1>
        <p><input type="button" name="regist" onclick="location.href= 'registration.php'" value="新規登録" /></p>
        <table border = "1" width = "auto">
            <tr>
            <th>設備No</th>
            <th>設備名</th>
            <th>選択</th>
            </tr>
            <?=$facilityList ?>
        </table>
    <br /><p><input type="submit" onclick="location.href= 'menu.php'" value="前画面に戻る" /></p>
    </body>
</html>

 その他、読んでおいたほうが良い記事

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 09:37

    あ、でも echo("try"); という文字列だけは表示されてそうなもんですが。

    キャンセル

  • 2018/05/18 09:49

    自分の確認ミスが多いですね、、、すみません、ありがとうございます

    キャンセル

  • 2018/05/18 09:51

    気づいたところを追記しています。
    もう少し基本的なところから1つずつおさえていった方が良さそうです。
    入力→確認→完了 の流れとか。
    サーバーサイドとクライアントサイドの関係部分、連携部分とか。
    ベストアンサーで解決済みとされたようですが、かなり多くの課題が残っているように見受けられます。

    キャンセル

  • 2018/05/18 10:03

    同じform内でボタンの参照先を変更する時にjavascriptでaction先を変更するまではわかるのですがそのあとがまだ理解できてないですので、

    キャンセル

  • 2018/05/18 10:07

    ボタンの参照先を変更する とは・・??
    このformで削除しかしないのであればchange.phpに削除処理を記述して対象のID(facility_number)$_POST["choise"]で受け取れば良いかなと。
    もし編集画面への遷移まであるのでしたら、削除処理については1データ毎に削除ボタンを置いて非同期ajaxにて対応された方が良いと思います。

    キャンセル

  • 2018/05/18 10:17

    現在のformでの削除を考えています。
    if(isset($_POST["delete"])){
    $sql=dpo->prepare(delete from facility where facility_number = ””);
    $sql->execute();
    こちらの内容変更で大丈夫ですか?

    キャンセル

  • 2018/05/18 10:29 編集

    いいえ。
    まず、私の回答部分の指摘が反映されていません。
    > dpo → $pdo
    >としなければならないですし、引数のSQLがクォートで閉じられてない。
    >また、where句がちゃんと最後まで指定されていない(検索文言がセットされていない)

    例え
    $sql=$pdo->prepare(' delete from facility where facility_number = ”” ');

    と直したとしても、「facility_numberが空""のものを削除する」という指定になっています。
    本来は下記のようにしなければなりません。
    $sql=$pdo->prepare(' delete from facility where facility_number = :facility_number ');
    $sth->execute(array(':facility_number ' => $_POST["choice"]));

    ↑choiceという名前でradioボタンが埋め込まれてそのvalueにfacility_number があるので。

    マニュアルにもありますね。
    http://php.net/manual/ja/pdo.prepare.php

    だから「何を見て書きましたか?」と回答に書きました。
    お作法がほとんど守られていなくて、何を目的としたコードなのか全く分からなくなっています。

    というか、action先を書き換えるのは賢明ではないですね。

    私の場合ですが、そもそも削除ボタンを1つにはしません。
    ぞれぞれに1つずつ置き、hiddenにfacility_number を持ちます。formもそれぞれの削除ボタン毎に置きます。

    回答にも書いたように「PHPはサーバー側の言語なので、html表示前に実行されます。」
    htmlの中にPHPの処理が混在するのは可読性が損なわれますし、問題の切り分けが難しくなります。
    処理部分はなるべくhtml記載の前に行い、変数にためておいてhtmlでは変数をechoするだけにしておいた方が見やすくなりますよ。

    一応・・・私の場合の書き方を例示しておきます。(これから書くので少々お待ちを)
    ただし動作検証はしませんので、イメージ参考としてください。

    キャンセル

  • 2018/05/18 10:48

    丁寧な回答ありがとうございます
    まずクォートなどの修正からはいろうと思います。
    ボタンをそれぞれにつけるんですね、その案も考えてみようと思います。
    ありがとうございました

    キャンセル

  • 2018/05/18 10:53

    データが多いときにボタンが最下部にあるとユーザはそこまでスクロールしなければなりませんよね?
    最上部にあったとしても最下部のデータを削除したいときに最上部に戻ってこなければなりません。
    UI,UXの観点からも考えなければなりません。

    読んでおいたほうが良い記事も追加しておいたのであわせて読んでください。
    (あと私の回答は基本的に無駄なことは書いてないはずなのでなるべくきちんと読んで一通り理解していただきたく)

    キャンセル

  • 2018/05/18 10:56

    もう1点
    ボタンでlocation.hrefを直に(というかsubmitボタンに)つけるくらいならaタグでリンクでも良いのでは。
    あと編集画面にいくときにPOSTする必要ないかと。?id=hogehogeのようにリンク渡しといてchange.phpで$_GET["id"]のような形の方が自然です。
    DBからデータを取得するだけの画面なのであればPOSTじゃないほうが良いです。

    キャンセル

  • 2018/05/18 10:56

    はいありがとうございました。
    ゆっくり読んで理解しようと思います

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • MySQL

    5872questions

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

  • phpMyAdmin

    652questions

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