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

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

ただいまの
回答率

88.93%

プルダウン型で選択したものを、データベースから削除したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,449

mattsu

score 10

・前提

htmlのコードが無茶苦茶ですが
他者から引き継いだものなのでコードに対する突っ込みはナシでお願いします 笑
また、phpはほぼ触ったことがないです。

データベースに登録されているご褒美をプルダウン型のメニューから選択すると
そのご褒美を得られる仕組みになっているようです。
(ご褒美を得るにはポイントが必要)

・実現したいこと

プルダウン型のメニューから、データベースに登録されているご褒美を選択すると
登録されていたご褒美がデータベースから削除されるものを作りたいです。

・参考コード
ご褒美を選んで登録ボタンを押すコード

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>date.php</title>
</head>

<body>
<?php
  $time = date("Y年n月j日 Ah:i");
  print($time);
?>
</body>
</html>
<br />
<br />

<html>
<body>
<form action="reward_ex_to.php" method="post" name="form" >
<h1 class="contact-title">ご褒美</h1>
<select name = "gohoubi">
<?php
$dbcon = pg_connect("dbname=ossdb user=postgres password=password");
$sql = "select content from reward;";
$col = pg_query($dbcon, $sql);;
while($data = pg_fetch_array($col)){
?>
<OPTION VALUE="<?php echo $data['content'] ?>"><?php echo $data['content'] ?></OPTION>
<?php
}
pg_close($dbcon);
?>
</select><br>
<input type="submit" value="登録する" />
</body>
</html>

<br><br>

登録したものを確認するコード

<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $gohoubi = $_POST["gohoubi"];
    }
?>
<title>routine_2.php</title>
登録内容は下記でよろしいですか?
<form action="reward_tha.php" method="post">

<br><br>
<?php
echo $_POST[gohoubi];
        $dbcon = pg_connect("dbname=ossdb user=postgres password=password");
        if (!$dbcon) {
        die("<hr>pg_connect 失敗<hr>");
        }
        $sql = "select point from reward where content = '$gohoubi'";
        $result = pg_query ($dbcon, $sql);
        if (!$result) {
        pg_last_error($dbcon);
        die( "<br>pg_exec 失敗");
        }
$numrows = pg_num_rows($result);
$fnum = pg_num_fields($result);
for ($i = 0; $i < $numrows; $i++) {
$row = pg_fetch_object($result, $i);
echo "<tr align='center'>";
for ($x = 0; $x < $fnum; $x++) {
$fieldname = pg_field_name($result, $x);

$point = htmlspecialchars($row->$fieldname);

}

}

echo $point;
?>

<form action="reward_tha.php" method="post">
<input type="hidden" name="point" value="<?php echo $point; ?>">
<input type="hidden" name="action" value="<?php echo $gohoubi; ?>"
</form>
<form action="reward_tha.php" method="post">
<input type="hidden" name="action" value="<?php echo $gohoubi; ?>">
<input type="hidden" name="point" value="<?php echo $point; ?>"
</form>
<input type="button" value="内容を修正する" onclick="history.back(-1)">
<button type="submit" name="submit">確定</button>

・質問
ご褒美を登録する、の逆をやればいいので簡単かと思ったのですが
自分の知識と経験不足によりなかなか上手くいきません。
そこで質問です。

1 上記のコードでデータベースに登録される処理が行われるのはどこか?
2 データベースから削除する場合
delete from 表明
where 条件
だと思うのですが

プルダウン型のメニューから相手が選んだものを条件にする方法が分かりません。

以上、宜しくお願いします。

ーーーーーーーーーーーーー追記------------
reward_tha.phpのページに質問の答えになりそうなものがあるとアドバイス頂いたので掲載しておきます。

<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $koudou = $_POST["action"];
        $point = $_POST["point"];
        }
?>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認フォーム</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div>
                <p>登録ありがとうございました。</p>
            <div>
                <div>
                    <label>行動</label>
                    <p><?php echo $koudou; ?></p>
                </div>
                <div>
                    <label>ポイント</label>
                    <p><?php echo $point; ?></p>
                </div>
           </div>
<?php $dbcon = pg_connect("dbname=ossdb user=postgres password=password");
        if (!$dbcon) {
        die("<hr>pg_connect 失敗<hr>");
        }
$sql1 = "SELECT total FROM routine order by day desc limit 1";
$result1 = pg_query ($dbcon, $sql1);
if (!$result1) {
pg_last_error($dbcon);
die( "pg_exec 失敗<hr>" );
}
$numrows1 = pg_num_rows($result1);
$fnum1 = pg_num_fields($result1);
for ($i1 = 0; $i1 < $numrows1; $i1++) {
$row1 = pg_fetch_object($result1, $i1);
echo "<tr align='center'>";
for ($x1 = 0; $x1 < $fnum1; $x1++) {
$fieldname1 = pg_field_name($result1, $x1);

$tasu = htmlspecialchars($row1->$fieldname1);

}

}
$total = ($point + $tasu);

$sql2 = "insert into routine values (now(),'','$koudou','$point','$total')";

$result2 = pg_query ($dbcon, $sql2);
        if (!$result2) {
        pg_last_error($dbcon);
        die( "pg_exec 失敗だよ<hr>");
        }
pg_close($dbcon);
?>

<a href="toppage.php">トップページへ</a>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

1 上記のコードでデータベースに登録される処理が行われるのはどこか? 
→このコードにはありません。おそらく、reward_tha.phpというコード上にそれっぽい記述があると思います。
<form action="reward_tha.php" method="post">というコードがありますが、これはこの画面で入力されたものを次のreward_tha.phpという処理にpostメソッドで受け渡すということです。

2 データベースから削除する場合 
→それでよいかと思います。メニューから選んだものを使う処理は恐らくreward_tha.phpにあるのではないかと予想しますので、それを真似すれば良いかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/04/23 10:34

    丁寧にアドバイスして頂きありがとうございます。
    参考までにreward_tha.phpも追記で掲載しました。
    もし宜しければお時間ある時に相手してやってください 笑

    私も自分なりに調べてみます。
    (postgreも分からないので正直ちんぷんかんぷんです)

    キャンセル

  • 2017/04/23 11:09

    最初のコードで前画面のデータを受け取って$koudou、$pointに格納していると思います。
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $koudou = $_POST["action"];
    $point = $_POST["point"];
    }

    登録自体は以下の箇所だとは思います。routineというテーブルに何かデータを追加しているようです。

    $sql2 = "insert into routine values (now(),'','$koudou','$point','$total')";

    $result2 = pg_query ($dbcon, $sql2);
    if (!$result2) {
    pg_last_error($dbcon);
    die( "pg_exec 失敗だよ<hr>");
    }
    pg_close($dbcon);

    あとは「削除する」という機能を追加するにはデータベースの定義、実際のデータを見ながらどういう作りになっているのか解読していかないといけないかもしれませんね。

    キャンセル

  • 2017/04/23 16:13

    akabeeさんありがとうございます!
    1つ1つ解読してなんとかakabeeさんが仰っているポイントまで辿り着きました!これでなんとかなりそうです。
    この度は丁寧にコメントくださってありがとうございました!

    キャンセル

  • 2017/04/23 16:16

    前任者のものを引き継ぐのは大変ですね。上手く動かせることを祈っています。

    キャンセル

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

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

関連した質問

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