2015-04-08 3 views
0

Я новичок с PHP, и у меня есть проблема с моей проверкой формы PHP, которая возвращает эту ошибку, если имя пользователя и пароль не определены.Неопределенная переменная: параметр функции (PHP)

Примечание: Undefined переменной: имя пользователя в D: \ ГАЭС \ контроллер \ loginvalidation.inc.php на линии 64

я использую 2 функции (usernameValidation & passwordValidation), чтобы проверить, если $ _POST вход правильно или нет, но я не знаю, что и где я должен поставить правильный скрипт, спасибо заранее.

<?php 
session_start(); 
require_once('../model/pdo.inc.php'); 
// function for checking the username validation (not empty & Regex) 
function usernameValidation($username) // Username as parameter 
{ 
if (!empty($_POST['username'])) 
{ 
    $username = strtolower(htmlspecialchars($_POST['username'])); // username will be tranform to lowercase before regex matching 

    if (preg_match('#^[a-z0-9\.]{5,20}$#', $username)) // 5 <= username lenght <= 20 in lowercase character to be valid 
    { 
     return true; // return true when the username is valid 
    } 
    else 
    { 
     echo "Invalid username, please re-try" ; 
    } 
} 
else 
{ 
    echo "Enter your username"; 
} 
} 

// function for checking the password validation (not empty & Regex) 
function passwordValidation($password) // Password as parameter 
{ 
if (!empty($_POST['password'])) 
{ 
    $password = htmlspecialchars($_POST['password']) ; // Protect the password 

    if (preg_match('#^[a-zA-Z0-9\[email protected]$()]{6,10}$#', $password)) // 6 <= password length <= 10 character to be valid 
    { 
     return true; // return true when password is valid 
    } 
    else 
    { 
     echo "Invalid password, please re-try"; 
    } 
} 
else 
{ 

    echo "Enter your password";  
} 
} 


if (usernameValidation($username) == true AND passwordValidation($password) == true) 
{ 
// PDO Query (SELECT ...) 
} 
+0

Чтобы указать ваш параметр как необязательный, вы должны указать его следующим образом: 'functionName ($ var = 'default')' –

+0

'$ username' Где у вас есть эта переменная, определенная в вашем скрипте? :) – Rizier123

+0

попытаться выполнить echo $ _POST ['username'] и проверить, имеет ли оно какое-то значение или нет? –

ответ

0

Я хотел бы сделать что-то вроде этого (обратите внимание, что вы никогда не хотите, чтобы эхо из отдельных сообщений для электронной почты и пароль, чтобы остановить хакеров получения информации о который является правильным:

session_start(); 
require_once('../model/pdo.inc.php'); 

//username and password will contain the posted resulte or FALSE 
$username = usernameValidation(); 
$password = passwordValidation(); 
if (!$username OR !$password) { 
    echo 'Invalid username or password!'; 
    die; 
} 
// PDO Query (SELECT ...) 

// function for checking the username validation (not empty & Regex) 
function usernameValidation() { // Username as parameter 
    if (!empty($_POST['username'])) { 
     $username = strtolower(htmlspecialchars($_POST['username'])); // username will be tranform to lowercase before regex matching 

     if (preg_match('#^[a-z0-9\.]{5,20}$#', $username)) { // 5 <= username lenght <= 20 in lowercase character to be valid 
      return $username; // return true when the username is valid 
     } 
    } 
    return FALSE; 
} 

// function for checking the password validation (not empty & Regex) 
function passwordValidation() { // Password as parameter 
    if (!empty($_POST['password'])) { 
     $password = htmlspecialchars($_POST['password']); // Protect the password 

     if (preg_match('#^[a-zA-Z0-9\[email protected]$()]{6,10}$#', $password)) { // 6 <= password length <= 10 character to be valid 
      return $password; // return true when password is valid 
     } 
    } 
    return FALSE; 
} 
+0

. Вы правы naw103, я был сосредоточен на том, чтобы дать пользователю, в котором правильное имя пользователя или пароль, но по соображениям безопасности я буду учитывать это примечание. – datacatalyst

+0

Могу ли я задать вам вопрос, почему я не должен давать параметр функции? – datacatalyst

+0

Вам не нужно передавать имя пользователя в функцию, так как вы уже получали данные из POST внутри этих функций, и, следовательно, я видел работу с функциями как получение имени пользователя для вас (а также выполнение проверки и т. Д.), – naw103

0

Определите свои функции withow аргументы

function usernameValidation(){ ... } 

и называют его

if (usernameValidation() == true AND passwordValidation() == true) 
0
<?php 
session_start(); 
require_once('../model/pdo.inc.php'); 
// function for checking the username validation (not empty & Regex) 
function usernameValidation($username) // Username as parameter 
{ 
if (!empty($_POST['username'])) 
{ 
$username = strtolower(htmlspecialchars($_POST['username'])); // username will be tranform to lowercase before regex matching 

if (preg_match('#^[a-z0-9\.]{5,20}$#', $username)) // 5 <= username lenght <= 20 in lowercase character to be valid 
{ 
    return true; // return true when the username is valid 
} 
else 
{ 
    echo "Invalid username, please re-try" ; 
} 
} 
else 
{ 
echo "Enter your username"; 
} 
} 

// function for checking the password validation (not empty & Regex) 
function passwordValidation($password) // Password as parameter 
{ 
if (!empty($_POST['password'])) 
{ 
$password = htmlspecialchars($_POST['password']) ; // Protect the password 

if (preg_match('#^[a-zA-Z0-9\[email protected]$()]{6,10}$#', $password)) // 6 <= password length <= 10 character to be valid 
{ 
    return true; // return true when password is valid 
} 
else 
{ 
    echo "Invalid password, please re-try"; 
} 
} 
else 
{ 

echo "Enter your password";  
} 
} 

$username = $_POST['username']; 
$password = $_POST['password']; 

if (usernameValidation($username) == true AND passwordValidation($password) == true) 
{ 
// PDO Query (SELECT ...) 
} 
+0

Здравствуйте, Amitesh, ваш скрипт дает ту же проблему – datacatalyst

0

Изменение вашего последнего, если условие кода ниже:

if (usernameValidation($_POST['username']) == true AND passwordValidation($_POST['password']) == true) 
{ 

} 

В ваши функции используют только переменные $username и $password и нет (!) $_POST['username'] и $_POST['password']

+0

Привет, Арлинд, не могли бы вы объяснить, почему мы не должны использовать $ _ [ 'foo'] в функции? – datacatalyst

+0

Потому что вы передаете $ _POST ['foo'] функции по параметру. поэтому значение $ _POST ['username'] сохраняется в $ username – Arlind

0

вы определитесь $ имя пользователя и пароль $, то $ _POST [ 'имя пользователя'] и $ _POST [ 'пароль']. И вы также можете сделать функцию без параметра. сделав эти изменения, ваша проблема будет решена.

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