【问题标题】:Hidden field issue in combination with radio buttons隐藏字段问题与单选按钮组合
【发布时间】:2014-05-31 02:10:40
【问题描述】:

我有一个网页,用户可以在其中选择在某个日期他们是可用 (=1) (beschikbaar) 还是不可用 (=0),这些都以列表的形式提供。

不过,我正在使用单选按钮来确保用户无法在同一日期选择可用和不可用。只要用户实际输入他们是否可用,代码就可以正常工作。当用户不输入任何内容时,就会出现我的问题,因为那时,由于隐藏字段,列表中的所有空日期都将发送到值为 0 的数据库。

我需要隐藏字段来确保用户条目和日期实际匹配,但这似乎是上述问题的原因。有人可以说明我可以做些什么来解决这个问题吗?

文件代码:

<?php 
if(isset($_POST['beschikbaarheid'])) {
mysql_connect("localhost", "****", "****")or die("cannot connect to server");
mysql_select_db("****")or die("cannot select db"); 


 $UserID = $_POST['UserID'];
 $beschikbaarheid = $_POST['beschikbaarheid'];
 $Datum = $_POST['Datum'];


 foreach ($_POST['Datum'] as $date){
$index = strftime('%d%m%y',strtotime($date));
$beschikbaarheid = (isset($_POST['beschikbaarheid'][$index]) && ($_POST['beschikbaarheid'][$index] == 1 ))?1:0;
mysql_query("INSERT INTO `Werkdagen` (`UserID`, `Datum`, `bevestigd`, `invuldatum`, `beschikbaarheid`) VALUES ('$UserID', '$date', FALSE, NOW(), '$beschikbaarheid')");

-

 <?php 
setlocale(LC_TIME, 'dutch');
date_default_timezone_set("Europe/Amsterdam");

$two = strtotime('+1 weeks'); $date = time(); while ($date <= $two) {
    echo "<li class=".strftime('%A',$date) . "><input name='Datum[]' type='hidden'  id='".strftime('%A %e %B %Y',$date) . "' value='".strftime('%Y-%m-%d',$date)."'><input  name='beschikbaarheid[".strftime('%d%m%y',$date) . "]' type='radio' value='1'><input    name='beschikbaarheid[".strftime('%d%m%y',$date) . "]' type='radio' value='0'>".strftime('%A %e     %B %Y',$date) . "</li>";
$date += 86400;

}

【问题讨论】:

  • 要么从预先选择的一个开始,要么使用一些验证来确保他们至少检查其中一个。
  • 使用外部变量构建 SQL 语句会使您的代码容易受到 SQL 注入攻击。 此外,任何带有单引号的输入数据,例如“O'Malley”,都会被破坏提出您的查询。了解参数化查询,最好使用 PDO 模块,以保护您的 Web 应用程序。 This question 有很多详细的例子。另请参阅bobby-tables.com/php 以了解替代方案和对危险的解释。 运行使用外部数据构建的 SQL 语句就像吃用家门口的食材熬成的汤。
  • 正如 Lester 所说,通过基于外部数据的条件生成内部数据的 SQL 语句,这样您就可以控制进入查询的内容。如果您必须使用外部数据,请在插入 MySQL 之前清理所有输入。

标签: php database radio-button


【解决方案1】:

首先我会清理输入,即使它是一个单选按钮。在 Chrome 中,我可以在单选按钮值下输入各种讨厌的东西并将其发送到数据库。或许可以放下它。

我觉得您的默认值设置为 0,表示不可用。我会做以下事情:

表单有单选按钮,其值字段为 A 或 U,表示可用或不可用。然后服务器端过滤掉 A 或 U,如果你得到一个零,你就知道该字段没有被输入。

<input type="radio" id="r1" name="rate" value="A">Available</input>
<input type="radio" id="r1" name="rate" value="U">Unavailable</input>

然后你将拥有服务器端

if($_POST['r1'] == "A") //Set available
else if($_POST['r1'] == "U") //Set unavailable
else if($_POST['r1'] == 0 || !isset($_POST['r1']) ) //Untouched entry field, something wrong

这是你想要做的吗?过滤掉选定的条目和未触及的条目?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2015-05-09
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多