0

私はこれまでPHPとMySQLでコーディングしたことがほとんどないので、私の神のひどいコードを許さなければなりません。

データベースに3つの列があります。ID、クラス、およびニーズ。

テーブル

基本的に、ユーザーが各行の「Need」値を0から1、または1から0に変更できるようにするために、ページをコーディングする最も簡単な方法を見つけようとしています。

現在、特定の行の「Need」値を1または0に変更することだけを目的とした2つの別個の、しかしほぼ同一のスクリプトを実行する2つのボタンがある場合に機能しています(以下を参照)。

<?php
mysql_connect("localhost", "muffins", "sugarcookies") or die(mysql_error());
mysql_select_db("crackers_cheese") or die(mysql_error());

mysql_query("UPDATE recruitment SET Need=1
WHERE ID='1'");

mysql_close($con);

header("location: /admin.html"); 
?>

逆の.phpファイルは、「SET Need=0」を除いて同じです。

したがって、特定の各行を0または1に設定することだけを目的とする、22個の個別の.phpファイルを作成する代わりに何ができるでしょうか。

ありがとう!

4

2 に答える 2

1

ボタンの1つにHTTPパラメーターを送信して、フィールドを0にするか1にするかを指定します。また、mysql_*関数の代わりにPDOクラスを使用することを検討してください。

これは、PDO関数を使用して実行する方法の例です。

PHPコード

<?php

if(!isset($_POST['need'])) {
    die('Missing need parameter');
} elseif($_POST['need'] !== '0' && $_POST['need'] !== '1') {
    die('Invalid need values');
}

if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
    die('Missing ID');
}

$db = new \PDO('mysql:dbname=crackers_cheese;host=localhost', 'muffins', 'sugarcookies');
$statement = $db->prepare("UPDATE `recruitment` SET `Need` = :need WHERE `ID`= :id");

$statement->bindValue(':need', $_POST['need'], \PDO::PARAM_INT);
$statement->bindValue(':id', $_POST['id'], \PDO::PARAM_INT);

$statement->execute();

header("location: /admin.html"); 
?>

ここではプリペアドステートメントを使用しているため、real_escape_stringなどを使用してデータをエスケープする必要がないため、SQLインジェクション攻撃が軽減されることに注意してください。

SQLインジェクション攻撃を防ぐために、クエリを連結する代わりにパラメータバインディングを使用することをお勧めします。詳細については、「PDOプリペアドステートメントはSQLインジェクションを防ぐのに十分ですか?」を参照してください。

HTMLフォーム

<form method='POST' action='update.php'>
    <label for='id'>ID:</label>
    <input type='number' name='id' id='id'>

    <input type='radio' name='need' value='0' id='needfalse'> <label for='needfalse'>Need = 0</label>
    <input type='radio' name='need' value='1' id='needtrue'> <label for='needtrue'>Need = 1</label>

<button type='submit'>Submit</button>

これは、設計された最良のフォームではありません。ここではラジオボタンを使用しました。実際のボタンを使用するのは少し複雑ですが、開始するにはこれで十分です。

于 2013-01-19T08:20:32.357 に答える
0

切り替えたいだけだとすると(0の場合は1に設定し、1の場合は0に設定します)、次のSQL更新ステートメントを使用できます。

update table_name
set need = abs(need - 1)
where id = 1
于 2013-01-19T10:00:03.707 に答える