0

我无法验证下面的文本区域,不知道我的代码有什么问题。

 $echo .= ' <div id="chooseForm">
                <input type="checkbox" name="ArticlesOrderForm" value="ArticlesOrderForm"> <b>Articles Order Form </b>                     

            </div>';



$echo .= '  <script>
        jQuery(function($) {
            $(".formGroup").hide();
            $("#chooseForm input:checkbox").on("change", function() {
                if($(this).is(":checked")) {
                    $("#" + $(this).val()).show();
                }
                else {
                    $("#" + $(this).val()).hide();
                }
            });
        });

    </script>';



  $echo .=  '<div id="ArticlesOrderForm" class="formGroup">
            <legend>Articles Order Form</legend>
            <b><label for="article_keywords">Keywords/Titles<span class="reqd">*</span> : </label></b> <textarea rows="6" cols="50" id="article_keywords" name="article_keywords" > </textarea>
        </div>';



if($_POST['ArticlesOrderForm'] == 'checked') {  

  if(!isset($_POST['article_keywords']) || empty($_POST['article_keywords'])) {
    $myerror= '<li>'.__('<strong>Keywords/Titles</strong> - missing.','article_keywords').'</li>';
    }   
}

如果有人没有进入该文本区域,我应该会收到一条消息“关键字/标题 - 缺失”..

谁能告诉我的逻辑有什么问题?

4

4 回答 4

3

您正在测试错误的条件,而不是

if(!isset($_POST['article_keywords']) && !empty($_POST['article_keywords'])) {

尝试测试

if(!isset($_POST['article_keywords']) || empty($_POST['article_keywords'])) {

现在您正在测试它是否为,而您应该测试它是否为

于 2012-10-23T12:51:00.803 回答
1

您还没有提供完整的表格,所以这可能是也可能不是您的第一个问题。您的第一个 if 语句正在检查似乎不存在的 $_POST 变量。

if($_POST['ArticlesOrderForm'] == 'checked')

您在表单中有一个 id 为“ArticlesOrderForm”的 DIV,但没有表单输入,因此它不会包含在 $_POST 中。$_POST 是通过 POST 从表单提交的值数组,它不包括表单的全部内容,仅包含表单中的输入。所以第一个陈述总是错误的。

要更正此问题,您将需要一个有效的输入,其 id/名称为“ArticlesOrderForm”,值为“checked”,例如我假设您需要一个复选框的名称。

<input type="checkbox" name="ArticlesOrderForm" value="checked" />

请注意,id 必须是唯一的,因此您不能有两个具有相同值的 id,这就是我在示例中使用 name 属性的原因,它将在 $_POST 中显示为“ArticlesOrderForm”,但不会与 div 冲突id 为“ArticlesOrderForm”。

在该问题之后,您需要检查您的其他陈述,正如该问题的其他答案所提到的那样。

更新

看过您对另一个用户的另一个问题显然是什么: 使用 jQuery 获取语法错误

我看不到任何表单标签,jQuery 似乎也没有尝试提交数据。您应该将表单包装在<form>标签中。就像是 :

<form method="post" action="you_page.php">
    <!-- form fields / inputs -->
</form>

如果是这种情况,你真的需要在开始使用 javascript/php 之前复习一下你的 html!看看这个以帮助您入门:HTML 表单

于 2012-10-23T12:55:18.723 回答
1

您正在检查是否$_POST['article_keywords']未设置且不为空。这两者相互排斥。

您可以删除emptyisset检查以实现您的目标。(或者只是&&用 a替换||并删除!前面的empty

于 2012-10-23T12:51:36.307 回答
1

@Jim(或者是鲍勃?),

问题的一部分(以及其他人指出的逻辑错误)是因为浏览器没有在元素$_POST或元素中返回值。$_GET<div>

你的 HTML 有<div id="ArticlesOrderForm">

看起来您正在尝试查找是否已选中复选框。在这种情况下,您应该执行以下操作,假设您在表单中创建了一个唯一的<input type="checkbox" id="ArticlesOrderForm">位置!ArticlesOrderForm

if(isset($_POST['ArticlesOrderForm'])){
}

更新

从昨天看你的问题(假设你没有改变你的代码)我可以看到你确实有<input type="checkbox" id="ArticlesOrderForm">一个<div id="ArticlesOrderForm">.

这是无效的 HTML,因为页面上的所有id属性都必须是唯一的 - 您不能id在多个元素上拥有相同的属性。

我仍然持有它来测试复选框是否被选中仍然是......

if(isset($_POST['ArticlesOrderForm'])){
}

...因为其中包含的值不会$_POST(['ArticlesOrderForm'])设置为. 复选框仅在已选中时才会发回一个值,如果尚未选中,则不会发回一个值,因此不会被设置。checked$_POST(['ArticlesOrderForm'])

但是您必须id="ArticlesOrderForm"<div>(或称其为其他名称)中删除 才能获得有效的 HTML 。

于 2012-10-23T12:54:35.100 回答