2016-10-29 3 views
0

Я полностью новичок в PDO, и я пытаюсь преобразовать мою страницу регистрации, Я могу получить информацию в базе данных, но я упал. Я делаю ее более сложной, чем она должна быть. DO Мне нужны 2 набора POST в каждой функции?Mysql PDO Подтверждение конверсии

также мои ошибки проверки эха конфликтуют с ИСКЛЮЧЕНИЕМ в функции create.

У меня есть функция регистра, и я называю это с помощью следующего на моей книге странице

<?php validate_register();?> 

Это мой Validate код

/* Validate register */ 

function validate_register(){ 

    $errors = []; 

    $min = 3; 
    $max = 20; 

    if(isset($_POST['signupBtn'])){  

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

     if (empty($email)) { 
      $errors[] = "Email Address Required."; 
     } 

     if (empty($username)) { 
      $errors[] = "Userame Required."; 
     } 

     if (empty($birthdate)) { 
      $errors[] = "Date of Birth Required."; 
     } 

     if (empty($password)) { 
      $errors[] = "Password Required."; 
     } 

     if (! empty($errors)) { 

      echo validation_errors($errors[0]); 

     } else { 

      if (create_user($email, $username, $birthdate, $password)) { 

       set_message('Please check your email for account Information.'); 

       redirect ("index.php"); 
      } 
     } 
    } 
} 

регистра и, если проверка проходит создает пользователь

/* create user */ 

function create_user($email, $username, $birthdate, $password){ 

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

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); 


    try { 

     $sqlInsert = "INSERT INTO users (email, username, birthdate, password) 
        VALUES(:email, :username, :birthdate, :password)"; 

     $stmt = $db->prepare($sqlInsert); 
     $stmt->execute(array(':email' =>$email, ':username' => $username, ':birthdate' => $birthdate, ':password' => $hashed_password)); 

     if ($stmt->rowCount() == 1) { 

      return true; 
     } 


    }catch (PDOException $e){ 

     $result = $e->getMessage(); 
    } 
} 

ответ

1

Вам не нужно переназначать $_POST еще разпоскольку вы передаете их в функции от validate_register функции:

validate_register()

function validate_register(){ 
    $errors = []; 
    $min = 3; 
    $max = 20; 

    if(isset($_POST['signupBtn'])){  
     # Just setting here is fine like you have 
     $email = $_POST['email']; 
     $username = $_POST['username']; 
     $birthdate = $_POST['birthdate']; 
     $password = $_POST['password']; 

    ...etc. 

CREATE_USER()

function create_user($email, $username, $birthdate, $password){ 
    ################################################################ 
    # As noted, remove this section because you have set them in the 
    # parameters and passed them from the previous function. As long 
    # as they are in the same order when you pass them, you're good 
    ################################################################ 

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); 

    try { 

     $sqlInsert = "INSERT INTO users (email, username, birthdate, password) 
        VALUES(:email, :username, :birthdate, :password)"; 

     $stmt = $db->prepare($sqlInsert); 
     $stmt->execute(array(':email' =>$email, ':username' => $username, ':birthdate' => $birthdate, ':password' => $hashed_password)); 

     if ($stmt->rowCount() == 1) { 
      return true; 
     } 
    }catch (PDOException $e){ 

     $result = $e->getMessage(); 
    } 
} 
+0

Спасибо за объяснение, но увидеть, где мой валидация есть? в mysqli у меня была проверка эхо ошибки, но PDO, похоже, требует ошибки PDOException. – Case

+0

PDOException - если ваш SQL некорректен или существует некоторая другая проблема с запросом mysql. Подтверждение, которое у вас есть, кажется хорошим для значений. – Rasclatt

+0

Кроме того, вам не обязательно нужно 'try' /' catch'. Это хорошо для сообщения журналу, но вы не можете показывать эту ошибку результата непосредственно пользователю. – Rasclatt