2014-01-19 5 views
-1

Im пытается добавить больше полей в мою регистрационную форму для базы данных. Я хочу добавить «firstname» и «lastname» и уже добавил столбцы в базе данных, а также поля в форме регистрации. Однако я не знаю, что изменить в реальной форме, которая подключается к базе данных (register.inc.php). Любые идеи будут оценены!, добавив информацию в регистрационную форму php

<?php 

include_once 'db_connect.php'; 
include_once 'psl-config.php'; 

$error_msg = ""; 

if (isset($_POST['username'], $_POST['email'], $_POST['p'])) { 
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); 
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); 
    $email = filter_var($email, FILTER_VALIDATE_EMAIL); 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $error_msg .= '<p class="error">The email address you entered is not valid</p>'; 
    } 

    $password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING); 
    if (strlen($password) != 128) { 
     $error_msg .= '<p class="error">Invalid password configuration.</p>'; 
    } 


    $prep_stmt = "SELECT id FROM members WHERE email = ? LIMIT 1"; 
    $stmt = $mysqli->prepare($prep_stmt); 

    if ($stmt) { 
     $stmt->bind_param('s', $email); 
     $stmt->execute(); 
     $stmt->store_result(); 

     if ($stmt->num_rows == 1) { 
      $error_msg .= '<p class="error">A user with this email address already exists.</p>'; 
     } 
    } else { 
     $error_msg .= '<p class="error">Database error</p>'; 
    } 

    if (empty($error_msg)) { 
     $random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE)); 

     $password = hash('sha512', $password . $random_salt); 

     // Insert the new user into the database 
     if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) { 
      $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
      // Execute the prepared query. 
      if (! $insert_stmt->execute()) { 
       header('Location: ../error.php?err=Registration failure: INSERT'); 
       exit(); 
      } 
     } 
     header('Location: ./register_success.php'); 
     exit(); 
    } 
} 
+0

Почему вы добавили 'if' условие' $ insert_stmt'? –

+0

@KrishR Я верю, что $ mysqli-> prepare может возвращать false, хотя вы, вероятно, захотите узнать, когда он вернет false. –

ответ

2

Вам нужно:

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

    $firstname = filter_input(INPUT_POST, 'firstname', FILTER_SANITIZE_STRING); 
    $lastname = filter_input(INPUT_POST, 'lastname', FILTER_SANITIZE_STRING); 
    
  3. Обновите MYSQLi, чтобы включить имя и фамилию (обратите внимание на дополнительные теги и?)

    $insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt, firstname, lastname) VALUES (?, ?, ?, ?, ?, ?)")) 
    
  4. Обновление привязки добавить имя и фамилию

    $insert_stmt->bind_param('ssssss', $username, $email, $password, $random_salt, $firstname, $lastname); 
    
+0

Отлично, спасибо! :) – user3144965

0

Я бы поставил его в массив, так что это сэкономит мне время, если мне нужно, чтобы добавить больше столбцов.

<?php 
include_once 'db_connect.php'; 
include_once 'psl-config.php'; 
$error_msg = ""; 
$arr=['username','email','p','firstname','lastname','salt']; 
$arrvalues=new Array(arr.length()) 
for($i=0;$i<$array.length();$i=$i+1){ 
    if (isset($_POST[$arr[$i]]&& !empty($_POST[$arr[$i])) { 
     $arrvalues[$i] = filter_input(INPUT_POST,$arr[$i], FILTER_SANITIZE_STRING); 
     if($arr[$i]=="email"){ 
      $arrvalues[$i]=filter_var($arrvalues[$i], FILTER_VALIDATE_EMAIL); 
      if (!filter_var($arrvalues[$i], FILTER_VALIDATE_EMAIL)) { 
       $error_msg .= '<p class="error">The email address you   entered is not valid</p>'; 
      } 
     } 
     if($arr[$i]=="password"){ 
      if (strlen($arrvalues[$i]) != 128) { 
       $error_msg .= '<p class="error">Invalid password configuration.</p>'; 
      } 
     } 
    } 
} 
$prep_stmt = "SELECT id FROM members WHERE email = ? LIMIT 1"; 
$stmt = $mysqli->prepare($prep_stmt); 
if($stmt){ 
$stmt->bind_param('s', $arrvalues[1]); 
$stmt->execute(); 
$stmt->store_result(); 
if ($stmt->num_rows == 1) { 
    $error_msg .= '<p class="error">A user with this email address already exists.</p>'; 
} 
} else { 
    $error_msg .= '<p class="error">Database error</p>'; 
} 
if (empty($error_msg)) { 
$arrvalues[5] = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE)); 
$arrvalues[2] = hash('sha512', $arrvalues[2] . $arrvalues[5]); 
// Insert the new user into the database 
for($i=0;$i<$array.length();$i=$i+1){ 
    if ($insert_stmt = $mysqli->prepare("INSERT INTO members (".$arrvalues[$i].") VALUES (?)")) { 
     $insert_stmt->bind_param('ssss', $arrvalues[$i]); 
     // Execute the prepared query. 
     if (! $insert_stmt->execute()) { 
      header('Location: ../error.php?err=Registration failure: INSERT'); 
      exit(); 
     } 
    } 
} 
header('Location: ./register_success.php'); 
exit(); 

}

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