【问题标题】:Hidden Default Form Values隐藏的默认表单值
【发布时间】:2013-07-15 19:32:03
【问题描述】:

我有一个简单的表单,我希望能够添加一个隐藏值,该值仅在用户未输入值时使用。这些值用于简单的文本输入字段,可以使用 HTML、PHP、JavaScript、JQuery 或其任意组合。让我进一步解释一下,值属性已经设置为当前包含该表单的数据库中的值。但是,如果数据库中没有该特定字段的当前值并且用户没有自己输入值,我希望在 POST 中传递一个默认值。

我已经进行了一些研究,并找到了自定义属性等示例……但这些对我不起作用。因为我正在使用一个数组构建器,它将表单中的所有字段作为单个数组传递给一个新函数。任何帮助将不胜感激!

下面显示的代码是表单的创建...正如您所见,两个单独的字段被冗余创建,但锦标赛中存在许多轮次。我还提供了两轮形式的输出 HTML 代码。如果数据库的相关字段有 NULL 值,并且如果用户没有输入他/她自己的值,我想传递“false”的值。

                $rchkpos = array();
                $rchkscore = array();

                for ($i=0; $i<=$tournament['numRounds']; $i++)
                {
                    $rchkthis = array("$i" => "round".$i."pos");
                    $rchkthis2 = array("$i" => "round".$i."score");

                    $rchkpos = array_merge($rchkpos, $rchkthis);
                    $rchkscore = array_merge($rchkscore, $rchkthis2);

                    if ($i > 0)
                    {
                        $roundpos = $rchkpos[$i];
                        $roundscore = $rchkscore[$i];

                        if (!is_null($stats2[$roundpos])){
                            $roundposvar = "$stats2[$roundpos]";
                        }else{ 
                            $roundposvar = false;
                        }

                        if (!is_null($stats2[$roundscore])){ 
                            $roundscorevar = "$stats2[$roundscore]";
                        }else{ 
                            $roundscorevar = false;
                        }

                        $team_stats.="
                        <tr valign='top'>
                            <td align='center'>" . LANG_MAN_ROUND . " $i " . LANG_MAN_POSITION . "</td>     
                            <td class='alt1' align='center'>            
                                <input type='text' name='round[".$rchkpos[$i]."]' value='$stats2[$roundpos]' size='40' maxlength='5' />
                            </td>
                        </tr>

                        <tr valign='top'>
                            <td align='center'>" . LANG_MAN_ROUND . " $i " . LANG_MAN_SCORE . "</td>
                            <td class='alt1' align='center'>
                                <input type='text' name='round[".$rchkscore[$i]."]' value='$stats2[$roundscore]' size='40' maxlength='5' />
                            </td>
                        </tr>";
                    }
                }

输出 HTML 示例:

                 <tbody><tr valign="top">
                            <td align="center">Round 1 Position</td>        
                            <td align="center" class="alt1">            
                                <input type="text" maxlength="5" size="40" value="2" name="round[round1pos]">
                            </td>
                        </tr>

                        <tr valign="top">
                            <td align="center">Round 1 Score</td>
                            <td align="center" class="alt1">
                                <input type="text" maxlength="5" size="40" value="false" name="round[round1score]">
                            </td>
                        </tr>
                        <tr valign="top">
                            <td align="center">Round 2 Position</td>        
                            <td align="center" class="alt1">            
                                <input type="text" maxlength="5" size="40" value="false" name="round[round2pos]">
                            </td>
                        </tr>

                        <tr valign="top">
                            <td align="center">Round 2 Score</td>
                            <td align="center" class="alt1">
                                <input type="text" maxlength="5" size="40" value="false" name="round[round2score]">
                            </td>
                        </tr>
                </tbody>

【问题讨论】:

  • 您可以发布任何代码来显示您尝试过的内容吗?
  • @cfs 我已经添加了代码,但我不确定它是否会有所帮助。

标签: php javascript jquery html


【解决方案1】:

你可以这样做:

HTML

<input type="text" name="name" />
<input type="hidden" name="name_default" value="name_default" />

PHP(表单提交后)

if(!isset($_POST['name'])) {

    $_POST['name'] = $_POST['name_default'];

}

或者像这样做一个数组:

$array_check = array('name', 'telephone', 'gender');

foreach($array_check AS $key => $value) {

    if(!isset($_POST[$value])) {

        $_POST[$value] = $_POST[$value."_default"];

    }    

}

请记住,用户可以编辑隐藏输入的值(使用 Firebug 等开发人员工具),始终检查输入!

【讨论】:

  • 感谢@GBRickJM,小错字。
  • 我喜欢这个概念,我想我会使用它...它将与我现有的脚本很好地结合使用。我希望不向函数参数添加另一个数组,但我认为这将是最简单的方法。
  • 在提交表单后从数据库中加载默认值可以使解决方案更加节省。那么默认值不必在表单中。
【解决方案2】:

其他可能的方法是在每个 html 输入的专用属性中设置默认值,然后使用 jQuery 替换帖子之前的字段值:

// before post
$('input').each(function () {
if ($(this).val() == '')
    $(this).val($(this).attr('defaultvalue'));
});

【讨论】:

  • 我理解这个概念,我对 JS/JQuery 有点陌生,因为这是在发布之前完成的......它需要一个监听器吗?
  • 是的,它需要。您可以将其放在提交按钮的操作中,也可以使用事件处理程序来处理表单本身的提交操作。检查此链接:api.jquery.com/submit
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
相关资源
最近更新 更多