2012-07-14 2 views
0

У меня есть форма, как показано ниже, и я хочу получить от пользователя ввод. Моя цель - проверить данные перед отправкой в ​​базу данных. Мой вопрос: как мне это сделать?Проверка данных в PHP

<form action="../actions/insertcomment.php" method="post"> 
    <p class ="ctitle">Leave a Comment:</p> 
    <p><label for="postid"><b>PostID:</b></label> 
     <input type="text" id="postid" name="postid" maxlength="5" /> <br/> 

     <label for="name"><b>Name:</b></label> 
     <input type="text" id="name" name="name" maxlength="25" /> <br/> 

     <label for="email"><b>Email:</b></label> 
     <input type="text" id="email" name="email" maxlength="50" /> <br/> 

     <label for="website"><b>Website:</b></label> 
     <input type="text" id="website" name="website" maxlength="25" /> <br/> 

     <label for="content"><b>Comment:</b></label> 
     <textarea id="content" name="content" cols="10" rows="4" maxlength="100"></textarea> <br/> 

     <input type="submit" value="Submit Comment" name="submit_comment" /> <br/> 
    </p> 
</form> 

и мой insercomment.php выглядит следующим образом:.

<html> 
<link rel = "stylesheet" type = "text/css" 
      href = "../common/style.css" /> 
<?php 
include("../common/dbconnect.php"); 
$con=new dbconnect(); 
$con->connect(); 
error_reporting(E_ALL); 

//$postid= $_GET['id']; 

if($_POST) { 

    $postid= $_POST['postid']; 
    $users_name = $_POST['name']; 
    $users_email = $_POST['email']; 
    $users_website = $_POST['website']; 
    $users_comment = $_POST['content']; 

    $postid = htmlspecialchars($postid); 
    $users_name = htmlspecialchars($users_name); 
    $users_email = htmlspecialchars($users_email); 
    $users_website = htmlspecialchars($users_website); 
    $users_comment = htmlspecialchars($users_comment); 



$sSql = "INSERT INTO comments 
(post_id,name, email, website,content) 
VALUES ($postid, '$users_name', 
     '$users_email', '$users_website', '$users_comment')"; 

    //echo $sSql; 
    mysql_query($sSql); 
    //$update=mysql_affected_rows(); 
    //echo "<h2>$update Record Inserted</h2><br />"; 
    echo '<h2> Your Comment is submitted</h2><br />'; 
} 

?> 

Здесь я не использую "метод =" пост "> Любой код или пример такого рода ценится

ответ

1

лучше всего было бы проверить, если данные верны, Befor в SQL Statement

Pseudocude:.

$data1 = $_POST['xyz']; //text 
$data2 = $_POST['abc']; //number 
... 

errors = array 
if(data1 is not text) errors[] = data1 must be text 
if(data2 is not number) errors[] = data2 must be number 
... 

if(count(errors) > 0) return errors 
else 

do the sql insert 
return "thank you message" 
+0

и как John Wheal postet, вы также должны проверить на sql-инъекцию !! – helle

1

Вы должны, конечно, дезинфицировать свои входы для предотвращения инъекций:

$postid= mysql_real_escape_string($_POST['postid']); 

Это сделает все ваши входы безопасны для вставки в базу данных.

0

Вы можете сделать так: -

if(isset($_POST)) 
{ 
    if($_POST['postid']!="" && $_POST['name']!="" &&.....) 
    { 
     //do your insertion here 
    } 
    else 
     echo "oops !! Something is missing"; 
} 
1

Вы можете использовать filter_input для проверки данных в PHP. Вы можете прочитать об этом здесь:

filter_input in php

Вот пример того, как использовать его, чтобы проверить электронную почту:

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); 

Где INPUT_POST метод, email это имя поля ($_POST['email']) и FILTER_VALIDATE_EMAIL - это вариант проверки.

Возможно, вы захотите рассмотреть возможность использования подготовленных операторов в mysqli или pdo, чтобы сделать ваше приложение более безопасным.

Чтобы проверить, является ли переменная имеет значение, которое вы можете использовать функцию empty:

if(!empty($_POST['email']){ 
    //do stuff 
} 

Вы также можете добавить проверку на стороне клиента. Хорошей библиотекой является liveValidation, которая, как следует из названия, проверяет ввод пользователя по мере их ввода, чтобы пользователю не приходилось ждать обновления страницы, прежде чем они получат обратную связь, была ли их форма успешно отправлена ​​или нет.

1

Мой опыт говорит, что вы должны проверить свой ввод с помощью инструкции if-else, прежде чем делать вставку в БД. Самое главное, чтобы использовать подготовленное заявление. Не пропускайте необработанные строки. Всегда используйте подготовленный отчет для своих форм.

см это: Best way to prevent SQL Injection

1

Я предлагаю вам использовать дезинфицировать строки для инъекций SQL с помощью mysql_real_escape_string(). Подтвердите использование команд if else.Например:

if ($_POST['name']...) 
{ 
    echo "fill in those fields!"; 
} 
else 
{ 
    do stuff... 
} 

Кстати, вы должны использовать подготовленный PDO-оператор и не отсылать HTML-код с PHP.

Смежные вопросы