2015-09-21 6 views
1

Пожалуйста, найдите код index.html и файл submit.php. С помощью loopo обе работают идеально. Я изо всех сил пытаюсь поставить код проверки (в файл index.html или файл submit.php). Я использую html5 типов ввода в html-файле, и я не знаю, где именно должна быть проверка в файле submit.php. У меня несколько форм, и я сделал validations.php, как было предложено. Я также не понимаю, где будут отображаться сообщения об ошибках?Подтвердить поля на странице html с помощью php

Можете ли вы предложить местоположение в файле submit.php, где я должен добавить эти проверки, отредактировав файл submit.php?
Regexp для электронной почты ('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/')
Regexp для телефона (^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$)

index.html файл

<form method="post" action="submit.php"> 
    <div class="box"> 
     <div class="cl"><input type="text" name="name" placeholder="Name" /></div> 
     <div class="cl"><input type="text" name="city" placeholder="City" /></div> 
     <div class="cl"><input type="text" name="mobile" placeholder="Mobile" /></div> 
     <div class="cl"><input type="email" name="email" placeholder="Email" /></div> 
     <div class="cl"><input type="text" name="sub" placeholder="Want 3 m Free Subscription (Yes/No)?"></textarea></div> 
     <div class="cl"><input type="text" name="slogan" placeholder="Suggest a slogan for 6 m subscription"></textarea></div> 
    </div> 
    <div class="srow"> 
     <div class="cl1"> 
      <ul class="action"> 
       <li><input type="submit" value="Submit" /></li> 
      </ul> 
     </div> 
    </div> 
</form> 

submit.php файл

<?php 
include 'config.php'; // store your configuration in a seperate file so 
         // you only need to update it once when your environment changes 

$errors = false; 
$output = ''; 
$nl = '<br>'.PHP_EOL; 
$redirect_url = 'index.html'; 

if (!$con = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME)){ 
    $errors = true; 
    $output .= "ERROR Can't connect to DB".$nl; 
}; 


if (!$errors){ 
    //should validate/clean $_POST before using in query 
    $name = $con->escape_string($_POST['name']); 
    $city = $con->escape_string($_POST['city']); 
    $email = $con->escape_string($_POST['email']); 
    $mobile = $con->escape_string($_POST['mobile']); 
    $sub = $con->escape_string($_POST['sub']); 
    $slogan = $con->escape_string($_POST['slogan']); 

    $sql="INSERT INTO members 
      (sName, sCity, sMobile, sEmail, sSub, sSlogan) 
     VALUES ('$name', '$city', '$mobile', '$email', 
       '$sub','$slogan')"; 

    if (!$con->query($sql)){ //forgot a parenthesis here earlier 
     $output .= 'ERROR: DB said: ('.$con->errno.') '.$con->error.$nl; 
     $output .= 'Query was:'.$sql.$nl; 
     $errors = true; 
    }else{ 
    $output .= "1 record added".$nl; 
    } 
} 

if (!$errors){ 
    //if there are no errors redirect to index.html; 
    header('refresh: 2; URL='.$redirect_url); 
    $output .= '...Redirecting...'.$nl; 
}else{ 
    //show the errors and allow display a link to go back/try again 
    $output .= '<a href="'.$redirect_url.'">Try again</a>'.$nl; 
} 
echo $output; 
?> 

Validations предложил loopo но не знаю точное место, чтобы его поместить. Я сделал файл validations.php и включен в файл submit.php, но может быть, мой синтаксис неправильный, из-за которого он не работает.

function validate_name($input){ 
    // fairly naive rule: 
    // upper and lower case latin characters and space 
    // at least three character long 
    // you may want to look at allowing other characters such as é ö etc. 
    $input = trim($input); //get rid of spaces at either end 
    if (preg_match('/^[a-zA-Z ]{3,}$/',$input) == 1){ 
     return $input; 
    }else{ 
     return false; 
    } 
} 

    if (!empty($_POST['name']){ 
    if (!$name = $con->escape_string(validate_name($_POST['name'])){ 
     $error = true; 
     $output .= 'ERROR: Invalid Name: '.$_POST['name'].$nl; 
    } 
    }else{ 
    $error = true; 
    $output .= 'ERROR: No name specified'.$nl; 
    } 
+0

Итак, все, что вы хотите сделать, это проверить правильность адреса электронной почты и телефона? Если это так, лучше поместите их в html, не дайте пользователю шанс в первую очередь. – user5173426

+0

Спасибо. Фактически запись не добавляется в базу данных. Это дает пустую страницу. Я думаю, что нижний код в файле validations.php должен быть помещен в файл submit.php, но он не работает. – Sabha

ответ

2

HTML валидация можно обойти, отправив запрос непосредственно в файл PHP, поэтому проверка информации на стороне сервера хороший выбор вы сделали.

я предлагаю вам лучше использовать PHP встроенный в функции filter_var, для чистого кода и точных/безопасных результатов, попробуйте следующее:

function validateEmail($email){ 
    if(filter_var($email,FILTER_VALIDATE_EMAIL)){ 
     return true; 
    } 
} 

function validatePhonenb($nb){ 
    if(filter_var($nb,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$/"))){ 
     return true; 
    } 
} 

и поскольку нет Validating для телефонных номеров, я использовал ваше регулярное выражение, кстати вы можете sanitize номер телефона, используя var_filter, прежде чем перейти вместо проверки его

У меня есть несколько форм, и я сделал validations.php как это было предложено. Я также не понимая, где будут сообщения об ошибках были показаны

сообщения об ошибках будут отображаться в нижней части страницы, так как они в настоящее время вторит в конце кода

echo $output; 
?> 

, если они не смещаются, изменяют положение повторения вывода, содержащего ошибки, и выполняют после этого die(), поэтому скрипт прекратит выполнение после того, как он покажет ошибки

+0

Спасибо. Где я помещаю этот код, в submit.php или validations.php. Если submit.php, в каком месте я должен его поместить? – Sabha

+0

у вас должно быть знание php для работы с php, так или иначе это должно быть в validations.php и вызвано из submit.php –

+0

Я согласен ... Я занимаюсь php .. Можете ли вы дать мне синтаксис для вызова функции из submit .php? Спасибо – Sabha