0

大家好,我想知道如何验证服务器端和客户端的 3 件事。

数据库表产品

我的数据库看起来像这样,但其中包含 400 多个数据。

pid   name   size            
1     grey   12 inch          
2     blue   16 inch     
database table category

pid    category
1        vans
2        nike
database table itemised

pid      price
1        30.00
2        50.00

我有一些需要验证的字段。我已经进行了验证以检查它是否为空。

我表中的一个字段如下所示

  <select id="Category" name="Category">
<?php
        dbconnect(); 
        $stmt = $conn->prepare("SELECT Name FROM Category WHERE pid=:id");
        $stmt->bindParam('id',$id);
        $stmt->execute();
        $i = 0;
         $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
          foreach ($rows as $row) { 
        if ($i == 0) {

        echo '<option SELECTED value="'.$row['Name'].'">'.$row['Name'].'</option>
        ';
        }
        else {
        echo '<option value="'.$row['Name'].'">'.$row['Name'].'</option>';
        }
        $i++;
        }
    ?>
      </select>

它不是表格,而是表格。如果您注意到sizeas 数字并将其输入。

我的问题 或多或少每个人都熟悉开发人员工具来更改发布值。我想验证客户端(JS)和客户端(php),以确保没有人弄乱这个值。

我这样做是为了检查它是否为空 ,例如,如果有 normal

<option value="blue vans">blue vans</option>

not-normal

<option value="">blue vans</option> // in this one the value is `BLANKET` 

下面的js检查这个

function isEmpty(aTextField,errormessage) //null may be used for errormessage to only change the colour of matching fields
{
    if (aTextField.value.length<=0)
    {
        if (lfield != aTextField || lfield === null) { fields[fields.length] = [aTextField,false]; } else { fields[fields.length-1] = [aTextField,false]; }
        lfield = aTextField;
        if (errormessage !== "")
        {
            if (counter < error_count || error_count == 0) { errors += errormessage+'\n'; } counter++;
        }
        return true;
    }
    else
    {
        if (lfield != aTextField || lfield === null) { fields[fields.length] = [aTextField,true]; }
        lfield = aTextField;
        return true;
    }
}

在php中

function notEmpty($inputname,$error_message)
    {
        $this->js.='if (!isEmpty(formname.'.$inputname.',"'.$error_message.'")) return false;';
        if ( isset($_POST[$inputname]) && ( strlen($_POST[$inputname]) <= 0 ))
        {
            if ($error_message != null)
            {
                $this -> error_message .= $error_message.'<br>';
            }
        }
    }

现在您看到了我如何验证表中所有选项的总括值如何在 js 和 php 中验证

因为size如果我最后没有,那会有点简单inch,但是在数据库中更改超过 1000 个数据将是一件痛苦的事情。

知道我该怎么做吗???

我希望我已经清楚地解释了这一点,如果没有,请发表评论,我会尝试重新表述这个问题。

谢谢

4

4 回答 4

1

我会为 Javascript 和 php 使用正则表达式。您可以在两种语言中使用相同的模式,因此您不必编写两次。

php-检查大小:

<?php
if(!preg_match("/^[0-9]+ (inch|othervalue1|othervalue2)$/",$_POST[$inputname]){
    $this -> error_message .= 'Wrong Value<br>';
}
?>

对于JS,你可以看看这个:http ://www.w3schools.com/jsref/jsref_obj_regexp.asp

这可能会在 JS 中起作用,但尚未经过测试:

function checkSize(value){
    var patt=new RegExp("^[0-9]+ (inch|othervalue1|othervalue2)$");
    return patt.test(value);   //returns false for wrong value
}

此外,我建议为值和单位制作 2 列。它会给你带来几个好处。

于 2013-07-27T10:47:40.457 回答
0

只是为您提供另一种验证方式。

您还可以通过 ajax 发布表单,因此您只需验证服务器端:

$('#myForm').ajaxForm({
    dataType: 'json',
    success: function(response) {
        if (response.error) {
            alert(response.error);
        } else {
            $('#myForm').text(response.message);
        }
    }
});

(这是假设您使用 jQuery 插件http://malsup.com/jquery/form

然后在你的 PHP 中你应该检查当前请求是否是 ajax:

function isAjax() {
    return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
        strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
}

...
if (isAjax() {
    $response = array();
    if (!empty($this->error_message)) {
        $response['error'] = str_replace('<br>', "\n", $this->error_message);
    } else {
        $response['message'] = 'Form submitted';
    }
    header('Content-type: application/json');
    echo json_encode($response);
    exit;
}
于 2013-07-27T10:58:13.787 回答
0

您可以使用intval将字符串大小转换为整数,例如intval('12 inch')将返回 12。

于 2013-07-27T10:47:32.743 回答
0

尝试preg_match("/(\d+) inch/", $input_str)或类似地测试您想要的正则表达式是否匹配。

您还应该将所有变量转义(html 特殊实体)到您的 HTML 输出。否则尖括号会破坏页面。

至少您在数据库方面使用准备好的语句..感谢上帝。三分之一似乎适用于 PHP“应用程序”。

于 2013-07-27T10:47:54.533 回答