0

我以前几乎从未用 PHP 和 MySQL 编写过代码,所以请原谅我的糟糕代码。

我的数据库中有 3 列。ID、类别和需求。

表

基本上,我试图找到最简单的方法来编写页面,以允许用户将每行的“需要”值从 0 更改为 1,或从 1 更改为 0。

目前,我有 2 个按钮运行 2 个单独但几乎相同的脚本,其唯一目的是将特定行的“需要”值更改为 1 或 0(如下所示)

<?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"); 
?>

除了“SET Need=0”之外,反向 .php 文件是相同的

那么,我能做些什么而不是拥有 22 个单独的 .php 文件,其唯一目的是将每个特定行设置为 0 或 1。

谢谢!

4

2 回答 2

1

让您的一个按钮发送一个 HTTP 参数以指示该字段应该是 0 还是 1。此外,请查看使用PDO类而不是 mysql_* 函数。

这是如何使用 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 回答