2013-11-25 5 views
0

Я использовал код для следующих website для предоставления моим сайтам дополнительных функций пользователя. Я использовал его раньше, и он работал хорошо. однако теперь я изменил его и изменил его в соответствии со своими потребностями. однако он, похоже, не работает. сообщение об ошибке, которое я получаю, это «пожалуйста, введите форму правильно», которое является сообщением, которое я установил, если различные поля не были отправлены (см. код, вставленный ниже). Я думал, что это может быть что-то, что я, возможно, испортил, поэтому я попробовал код веб-сайта, и он не работает. это причина настроек сервера Wamp? или это czФорма PHP не отправляется

  1. Я проверяю, существуют ли только имя пользователя и пароль вместе с токеном формы сеанса?
  2. после проверки только вышеуказанных полей, я добавляю гораздо больше информации в базу данных - имя, адрес электронной почты и т. Д.
  3. В моей таблице базы данных больше столбцов, чем число значений, которые я передаю.

Так как я новичок в авторизации php и не могу утверждать, что я не могу придумать что-нибудь, что я могу отлаживать. Любая помощь будет очень оценена. Я отправляю свою форму html и код php ниже. My SQL таблица выглядит имеет следующие colums: идентификатор пользователя, Firstname, фамилия, имя пользователя, пароль, EMAILID, teamname, деньги, всего, указывает

HTML формы -

<?php 

/*** begin our session ***/ 
session_start(); 

/*** set a form token ***/ 
$form_token = md5(uniqid('auth', true)); 

/*** set the session form token ***/ 
$_SESSION['form_token'] = $form_token; 
?> 

<form class="form-inline" method="post" action="useradd.php" name="login_form"> 
       <p><input type="text" class="span2" name="firstname" id="firstname" placeholder="First Name"></p> 
          <p><input type="text" class="span2" name="lastname" id="Last Name" placeholder="Last Name"></p> 
          <p><input type="text" class="span2" name="username" id="username" placeholder="Username"></p> 
          <p class="help-block" style="font-size:12px"> Username should be between 4-20 characters long.</p> 
       <p><input type="Password" class="span2" name="Password" placeholder="Password"></p> 
          <p class="help-block" style="font-size:12px"> Password must be between 4-20 characters long. Must be alpha-numeric</p> 
          <p><input type="Password" class="span2" name="Password" placeholder="Re-Enter Password"></p> 
          <p><input type="text" class="span4" name="emailid" id="emailid" placeholder="Emaid ID - [email protected]"></p> 
          <p><input type="text" class="span2" name="teamname" id="teamname" placeholder="Team name"></p> 
          <p class="help-block" style="font-size:12px"> Select your Unique team name.</p> 
          <p> 
        <select class="selectpicker"> 
        <option>The name of the city where you were born</option> 
        <option>The name of your first pet</option> 
        <option>What is your mother's maiden name</option> 
        </select> 
       </p> 
       <p><input type="text" class="span2" name="secretanswer" id="secretanswer" placeholder="Secret Answer"></p> 
       <p> 
           <input type="hidden" name="form_token" value="<?php echo $form_token; ?>" /><br /> 
       <p><button type="submit" class="btn btn-primary">Register</button></p> 
      </form> 

PHP код - файл с именем - useradd. PHP

<?php 
/*** begin our session ***/ 
session_start(); 

/*** first check that both the username, password, form token etc have been sent ***/ 
if(!isset($_POST['username'], $_POST['password'], $_POST['form_token'])) 
{ 
    $message = 'work for the love of god'; 
} 
/*** check the form token is valid ***/ 
elseif($_POST['form_token'] != $_SESSION['form_token']) 
{ 
    $message = 'Invalid form submission'; 
} 
/*** check the username is the correct length ***/ 
elseif (strlen($_POST['username']) > 20 || strlen($_POST['username']) < 4) 
{ 
    $message = 'Incorrect Length for Username'; 
} 
/*** check the password is the correct length ***/ 
elseif (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 4) 
{ 
    $message = 'Incorrect Length for Password'; 
} 
/*** check the username has only alpha numeric characters ***/ 
elseif (ctype_alnum($_POST['username']) != true) 
{ 
    /*** if there is no match ***/ 
    $message = "Username must be alpha numeric"; 
} 
/*** check the password has only alpha numeric characters ***/ 
elseif (ctype_alnum($_POST['password']) != true) 
{ 
     /*** if there is no match ***/ 
     $message = "Password must be alpha numeric"; 
} 
else 
{ 
    /*** if we are here the data is valid and we can insert it into database ***/ 
    $firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING); 
    $lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING); 
    $username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); 
    $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); 
    $emailid = filter_var($_POST['emailid'], FILTER_SANITIZE_STRING); 
    $teamname = filter_var($_POST['teamname'], FILTER_SANITIZE_STRING); 
    $secret_question = filter_var($_POST['secret_question'], FILTER_SANITIZE_STRING); 
    $secret_answer = filter_var($_POST['secret_answer'], FILTER_SANITIZE_STRING); 


    /*** now we can encrypt the password ***/ 
    $password = sha1($password); 

    /*** connect to database ***/ 
    /*** mysql hostname ***/ 
    $mysql_hostname = 'localhost'; 

    /*** mysql username ***/ 
    $mysql_username = 'root'; 

    /*** mysql password ***/ 
    $mysql_password = 'imagination'; 

    /*** database name ***/ 
    $mysql_dbname = 'adb project'; 

    try 
    { 
     $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); 
     /*** $message = a message saying we have connected ***/ 

     /*** set the error mode to excptions ***/ 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     /*** prepare the insert ***/ 
     $stmt = $dbh->prepare("INSERT INTO users (firstname,lastname,username,password,emailid,teamname, secret_question,secret_answer) VALUES (:firstname,:lastname,:username,:password, :emailid,:teamname,:secret_question,:secret_answer)"); 

     /*** bind the parameters ***/ 
     $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR); 
     $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->bindParam(':password', $password, PDO::PARAM_STR, 40); 
     $stmt->bindParam(':emailid', $emailid, PDO::PARAM_STR); 
     $stmt->bindParam(':teamname', $teamname, PDO::PARAM_STR); 
     $stmt->bindParam(':secret_question', $secret_question, PDO::PARAM_STR); 
     $stmt->bindParam(':secret_answer', $secret_answer, PDO::PARAM_STR); 

     /*** execute the prepared statement ***/ 
     $stmt->execute(); 

     /*** unset the form token session variable ***/ 
     unset($_SESSION['form_token']); 

     /*** if all is done, say thanks ***/ 
     $message = 'New user added'; 
    } 
    catch(Exception $e) 
    { 
     /*** check if the username already exists ***/ 
     if($e->getCode() == 23000) 
     { 
      $message = 'Username already exists'; 
     } 
     else 
     { 
      /*** if we are here, something has gone wrong with the database ***/ 
      $message = 'We are unable to process your request. Please try again later"'; 
     } 
    } 
} 
?> 

<html> 
<head> 
<title>Login</title> 
</head> 
<body> 
<p><?php echo $message; ?> 
</body> 
</html> 
+0

Вы уверены, что получаете ошибку «пожалуйста, введите форму»? Я не могу найти его в вашем коде. – Babblo

+0

@Babblo, извините, я изменился, чтобы «работать ради любви к Богу» из-за разочарования. Его первая строка i хранится в переменной '$ message' – beginner

+0

Итак, она работает. В чем проблема? – Babblo

ответ

0

Вы определили в вашей форме имя = "пароль" дважды

+0

, который был для поля «повторно введите пароль». я удалил его и попробовал еще раз. Не повезло – beginner

+0

Я знаю, но вы должны использовать разные имена для полей в нижнем регистре – Chiribuc

1

Может быть это?

В форме, у вас есть капитал 'P' на name="Password" но useradd.php ваш IsSet() тесты на $ _POST [ "пароль"] (маленький р)

С этими типами проблем, я сразу попробуйте выяснить, где именно происходит процесс, поэтому я обычно буду вставлять в кучу echo "got to here 1"; и echo "got to here 2";, чтобы я знал, что сценарий сделал это здесь и не дальше.

+0

, и это было проблемой. Я смог изменить это. Теперь я застрял во втором сообщении об ошибке – beginner

+0

Прежде всего, вам может не понадобиться этот * * в этой точке *. Сначала запустите все это (и я никогда не использовал токен для аутентификации формы ...) В любом случае, это может быть проблема: 'uniqid ('auth', true)'. Функция 'uniqid()' не является частью PHP, поэтому она является частью этого руководства. Возможно, там есть опечатка?Во всяком случае, если бы я был вами, я бы отключил/удалил это elseif и вернусь к нему позже, если вообще. – gibberish

+0

В основном, первый файл создает строку с именем 'form_token' и сохраняет ее как переменную сеанса (называемую form_token), так и в скрытом поле. Когда отправляется в useradd.php, он проверяет, что он получил из этого скрытого поля, против переменной сеанса, установленной несколько секунд назад. Это зависит от вас: это важно для вашего упражнения? Я бы сразу удалил и вернулся к нему, если/когда все остальное работает ... (и, возможно, даже не тогда) – gibberish

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