2017-12-27 37 views
-1

다음 쿼리를 실행하여 새 사용자를 등록합니다. 그러나 사용자 이름, 암호 및 전자 메일 주소 필드 만 데이터베이스에 삽입됩니다. 철자가 데이터베이스에있는 철자와 정확하게 일치하는지 확인했습니다. 어디에 문제가 있는지 잘 모르겠습니다. , 당신이 바인딩 매개 변수를 사용하여 상황을 복잡하게 할 수있다 생각사용자 이름, 암호 및 전자 메일 필드 만 채워집니다.

<?php 
 

 
/* Main page with two forms: sign up and log in */ 
 
require 'db_connection.php'; 
 
session_start(); 
 

 
?> 
 
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <title>Sign-Up Form: <?php include 'css/css.html'; ?></title> 
 

 
</head> 
 

 
<?php 
 

 

 

 

 

 
/* form.php */ 
 
//session_start(); 
 
$_SESSION['message'] = '<div class="alert alert-error"><?= $_SESSION[\'message\'] ?></div>'; 
 
$mysqli = new mysqli('localhost', 'root', '', 'customer.accounts'); 
 

 
/*if (isset($_POST['btn-submit'])) 
 
    $first_name = ($_POST['first_name']); 
 
    $last_name = ($_POST['last_name']); 
 
    $username = ($_POST['username']); 
 
    $DeliveryAddress= ($_POST['DeliveryAddress']); 
 
    $CreditCardNo= ($_POST['CreditCardNo']); */ 
 

 

 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
 
//check if two passwords match 
 
    // if ($_POST['password'] == $_POST['password']) { 
 

 
     //define other variables with submitted values from $_POST, 
 

 
     $username = $mysqli->real_escape_string($_POST['username']); 
 
     $email = $mysqli->real_escape_string($_POST['email']); 
 
     $first_name = $mysqli->real_escape_string($_POST['first_name']); 
 
     $last_name = $mysqli->real_escape_string($_POST['last_name']); 
 
     $password = $mysqli->real_escape_string($_POST['password']); 
 
     $DeliveryAddress = $mysqli->real_escape_string($_POST['DeliveryAddress']); 
 
     $CreditCardNo = $mysqli->real_escape_string($_POST['CreditCardNo']); 
 

 

 
     //md5 hash password for security 
 
     $password = md5($_POST['password']); 
 
     $_SESSION['username'] = $username; 
 

 

 

 
    if(!preg_match('/^[a-zA-Z ]*$/',$first_name)) \t \t \t //validate firstname 
 
    { 
 
     $nameErr="Name can only contain alphabets"; 
 
     $execute=false; 
 
    } 
 
    if(!preg_match('/^[a-zA-Z ]*$/',$last_name)) \t \t \t //validate lastname 
 
    { 
 
     $nameErr="Name can only contain alphabets"; 
 
     $execute=false; 
 
    } 
 
    if(!preg_match('/^[0-9]*$/',$ContactNo)) \t \t \t \t //validate phone 
 
    { 
 
     $phoneErr="Mobile Number can only contain digits"; 
 
     $execute=false; 
 
    } 
 
    if(strlen($ContactNo)<10) 
 
    { 
 
     $phoneErr="<br/>Mobile number is too short"; 
 
     $execute=false; 
 
    } 
 

 
    if(strlen($CreditCardNo)<16)         //validate card details 
 
    { 
 
     $phoneErr="<br/>Credit Card Number is too short"; 
 
     $execute=false; 
 
    } 
 
    if($execute!=false) 
 

 

 
     //Bind and insert user data into database 
 
     $sql = "INSERT INTO useraccounts (first_name,last_name,username, email, password,DeliveryAddress,CreditCardNo) VALUES (?,?,?,?,?,?,?)"; 
 
     $stmt->bind_param('ssssssi', $first_name, $last_name, $username,$email,$password,$DeliveryAddress,$CreditCardNo); 
 
     $username= $_SESSION('username'); 
 
     $stmt->execute(); 
 

 

 

 
     //check if mysql query is successful, then register the user. 
 
     if ($stmt === true) { 
 
      $_SESSION['message'] = "Registration successful!" 
 
       . "Added $username to the database!"; 
 
      //redirect the user to welcome.php if the registration is successful 
 
      header("location: welcome.php"); 
 

 
     } else { 
 
      $_SESSION['message'] = 'User could not be added to the database!'; 
 
     } 
 

 
     $mysqli->close(); 
 

 
    //else { 
 
    // $_SESSION['message'] = 'Two passwords do not match!'; 
 

 

 

 
//if ($_SERVER["REQUEST_METHOD"] == "POST") 
 

 

 
} 
 

 
function test_input($data){ 
 
    $data=trim($data); 
 
    $data=htmlspecialchars($data); 
 
    return $data; 
 
} 
 
//Registration Form 
 

 
?> 
 
<link href="//db.onlinewebfonts.com/c/a4e256ed67403c6ad5d43937ed48a77b?family=Core+Sans+N+W01+35+Light" rel="stylesheet" type="text/css"/> 
 
<link rel="stylesheet" href="form.css" type="text/css"> 
 
<div class="body-content"> 
 
    <div class="module"> 
 
     <h1>Create an Account </h1> 
 

 

 
     <form class="form" action="form.php" method="post" enctype="multipart/form-data" autocomplete="off"> 
 

 
      <div class="alert alert-error"> <?= $_SESSION['message'] ?></div> 
 
      <input type="text" placeholder="First Name" name="first_name" required /> 
 
      <input type="text" placeholder="Last Name" name="last_name" required /> 
 

 
      <input type="text" placeholder="User Name" name="username" required /> 
 
      <input type="email" placeholder="Email" name="email" required /> 
 
      <input type="password" placeholder="Password" name="password" autocomplete="new-password" required /> 
 
      <input type="password" placeholder="Confirm Password" name="confirmpassword" autocomplete="new-password" required /> 
 
      <input type="text" placeholder="Delivery Address" name="DeliveryAddress" autocomplete="DeliveryAddress" required /> 
 
      <input type="text" placeholder="Payment Details" name="CreditCardNo" autocomplete="CreditCardNo" required /> 
 

 
      <input type="submit" value="Register" name="submit" class="btn btn-block btn-primary" /> 
 

 
     </form> 
 
    </div>

+9

신용 카드 번호가 저장되어 있습니까? 나는 당신이 무엇을하고 있는지 알고 있기를 희망한다. –

+5

btw,'$ _SESSION'은 함수가 아니며, (superglobal) 배열이다. –

+0

어디서 PHP 폼 유효성 검사 및 html 폼입니다. 당신이 그것을 게시 할 수 있다면 도움이 될 것입니다 – Jonny

답변

-2

바르 : 나는 issue.Here을 파악하기 위해 코드의 일부를 주석 한 전체 코드입니다 . 이렇게하면 간단한 쿼리에 대한 간접 참조 수준이 추가됩니다. 표준 쿼리의 경우, 나는 예를 들어 (추가 디버깅), 매개 변수 표시 문자를 사용합니다 :

// Your SQL with parameter markers to create a prepared statment 
$stmt = $pdo->prepare(
    "INSERT INTO useraccounts (first_name, last_name, username, email, 
           password, DeliveryAddress, CreditCardNo) 
      VALUES (:first_name, :last_name, :username, :email, 
        :password, :DeliveryAddress, :CreditCardNo)"; 

// All parameters markers must be satisfied in this array 
$params = [ 
    ':first_name'  => $first_name, 
    ':last_name'  => $last_name, 
    ':username'  => $username, 
    ':email'   => $email, 
    ':password'  => $password, 
    ':DeliveryAddress' => $DeliveryAddress, 
    ':CreditCardNo' => $CreditCardNo 
]; 

// Export the array to a file, or simply using print_r 
file_put_contents('/tmp/params.txt', var_export($params, true)); 

// Execute the PDO statement 
$stmt->execute($params); 

보낸 파일이 설정되지 않은 매개 변수의 원래 문제의 원인을 찾는 데 도움 만이있다. 어레이에 설정되어 있으면 검색어를 통해 설정해야합니다. SQL이 유효하지 않으면 준비 호출에서 실패합니다. 매개 변수 목록이 올바르지 않으면 실행 호출에 실패합니다.

+0

그는 PDO가 아닌 mysqli를 사용하고 있습니다. – Barmar

+0

당신은 암시 적으로 MySQLi에서 OP 스위치를 전적으로 제안합니다 (doesn PDO에 이름을 올린다면 PDO에 도움이 될 수있는 이유가 많습니다. –

+0

예, 좋은 지적입니다. 왜 그것이 모든 사람들에게 효과가 없을지 모른다. –