2013-07-27 7 views
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> 

это не в форме, а за столом. Если вы заметили size как числа и буквы его в.

Мой вопрос Более или менее все знакомы с инструментами разработчика, чтобы изменить размещенную значение. Я хочу проверить как клиента (JS), так и клиента (php), чтобы убедиться, что никто не испортил значение.

Я сделал это, чтобы проверить, что не является пустым для примера, если у normal

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

not-normal

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

The 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 данных в базе данных будет больно.

Любая идея, как я могу это сделать, пожалуйста ???

Надеюсь, я объясню это четко, а если нет, оставьте комментарий, и я постараюсь перефразировать вопрос.

Благодаря

ответ

0

Вы можете использовать intval преобразовать размер строки в целое число, например intval('12 inch') вернет 12.

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 столбца как для значения, так и для единицы. Это даст вам несколько преимуществ.

0

Попробуйте preg_match("/(\d+) inch/", $input_str) или аналогичный, чтобы проверить, соответствует ли ваше искомое регулярное выражение.

Вы также должны экранировать (html специальные объекты) всю переменную на свой HTML-вывод. В противном случае угловые скобки сломают страницу.

По крайней мере, вы используете подготовленные заявления на стороне БД. Слава богу. Кажется, что один из трех хорош для PHP-приложения.

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; 
} 
Смежные вопросы