2016-09-15 3 views
-1

클라이언트 등록 페이지를 쓰려고하는데이 오류가 매 순간 나타납니다. 오류를 찾을 수 없습니다 : 쿼리를 실행하지 못했습니다 : SQLSTATE [HY093] : 잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다.

가 쿼리를 실행하지 못했습니다 : SQLSTATE [HY093] : 잘못된 매개 변수 번호 : 매개 변수가 정의되지 않은

내가이 튜토리얼을 따라했습니다 이 DB

코드는 이것이다 : http://untame.net/2013/06/how-to-build-a-functional-login-form-with-php-twitter-bootstrap/ DB를이입니다 :

<?php 


     require("config.php"); 
    if(empty($_SESSION['user'])) 
    { 
     header("Location: index.php"); 
     die("Redirecting to index.php"); 
    } 
    require("config.php"); 

    if(!empty($_POST)) 
    { 

     // Ensure that the user fills out fields 
     if(empty($_POST['username'])) 
     { die("Please enter a username."); } 
     if(empty($_POST['password'])) 
     { die("Please enter a password."); } 
     if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
     { die("Invalid E-Mail Address"); } 

     // Check if the username is already taken 
     $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       username = :username 
     "; 
     $query_params = array(':username' => $_POST['username']); 
     $query_params = array(':nombre' => $_POST['nombre']); 
     $query_params = array(':empresa' => $_POST['empresa']); 
     $query_params = array(':apellidos' => $_POST['apellidos']); 

     try { 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     $row = $stmt->fetch(); 
     if($row){ die("This username is already in use"); } 
     $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       email = :email 
     "; 
     $query_params = array( 
      ':email' => $_POST['email'] 
     ); 
     try { 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 
     } 


     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage());} 
     $row = $stmt->fetch(); 
     if($row){ die("This email address is already registered"); } 

     // Add row to database 
     $query = " 
      INSERT INTO users ( 
       username, 
       password, 
       salt, 
       email, 
       empresa, 
       nombre, 
       apellidos 

      ) VALUES ( 
       :username, 
       :password, 
       :salt, 
       :email, 
       :empresa, 
       :nombre, 
       :apellidos 
      )"; 
     /*  



     */ 

     // Security measures 
     $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
     $password = hash('sha256', $_POST['password'] . $salt); 
     for($round = 0; $round < 65536; $round++){ $password = hash('sha256', $password . $salt); } 
     $query_params = array( 
      ':username' => $_POST['username'], 
      ':password' => $password, 
      ':salt' => $salt, 
      ':email' => $_POST['email'], 
      ':empresa' => $_POST['empresa'], 
      ':nombre' => $_POST['nombre'], 
      ':apellidos' => $_POST['apellidos'] 
     ); 
     try { 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     header("Location: index.php"); 
     die("Redirecting to index.php"); 
    } 
?> 

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Bootstrap Tutorial</title> 
    <meta name="description" content="Bootstrap Tab + Fixed Sidebar Tutorial with HTML5/CSS3/JavaScript"> 
    <meta name="author" content="Untame.net"> 

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
    <script src="assets/bootstrap.min.js"></script> 
    <link href="assets/bootstrap.min.css" rel="stylesheet" media="screen"> 
    <style type="text/css"> 
     body { background: url(assets/bglight.png); } 
     .hero-unit { background-color: #fff; } 
     .center { display: block; margin: 0 auto; } 
    </style> 
</head> 

<body> 

<div class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="navbar-inner"> 
    <div class="container"> 
     <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </a> 
     <a class="brand">Registro en 4tickets</a> 
     <div class="nav-collapse"> 
     <ul class="nav pull-right"> 
      <li><a href="index.php">Volver a casa</a></li> 
     </ul> 
     </div> 
    </div> 
    </div> 
</div> 

<div class="container hero-unit"> 
    <h1>Register</h1> <br /><br /> 
    <form action="register.php" method="post"> 
     <label>Username:</label> 
     <input type="text" name="username" value="" /> 
     <label>Email: <strong style="color:darkred;">*</strong></label> 
     <input type="text" name="email" value="" /> 
     <label>Password:</label> 
     <input type="password" name="password" value="" /> <br /> 
     <label>Nombre:</label> 
     <input type="text" name="nombre" value="" /> <br /> 
     <label>apellidos:</label> 
     <input type="text" name="apellidos" value="" /> <br /> 
     <label>Empresa:</label> 
     <input type="text" name="empresa" value="" /> <br /> 
     <p style="color:darkred;">* Poner bien las direcciones de mail</p><br /> 
     <input type="submit" class="btn btn-info" value="Register" /> 
    </form> 
</div> 

</body> 
</html> 

나는 모든 변수가 정상이며 오류가 어디 있는지 알지 못합니다.

내 config.php 파일은

<?php 

    // These variables define the connection information for your MySQL database 
    $username = "root"; 
    $password = "root"; 
    $host = "localhost"; 
    $dbname = "4tickets"; 

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
    try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); } 
    catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    header('Content-Type: text/html; charset=utf-8'); 
    session_start(); 
?> 

나는 단지 3 가지 추가 한 : Empresa 연락처, 브레 및 apellidos 튜토리얼에없는 내가 필요로했다.

미리 감사드립니다. John. 당신은 너무 많은 매개 변수를 전달하려고 시도하고

// Check if the username is already taken 
    $query = " 
     SELECT 
      1 
     FROM users 
     WHERE 
      username = :username 
    "; 
    $query_params = array(':username' => $_POST['username']); 
    $query_params = array(':nombre' => $_POST['nombre']); 
    $query_params = array(':empresa' => $_POST['empresa']); 
    $query_params = array(':apellidos' => $_POST['apellidos']); 

,하지만 당신은 $query_params 때마다 덮어 쓰기있어 :

+0

첫 번째 쿼리에 너무 많은 매개 변수를 전달 중입니다. 쿼리에는 사용자 이름 만 있지만 3 개의 다른 사용자도 전달합니다. – aynber

+0

어떻게 할 수 있습니까? –

+0

$ query_params = array (': username'=> $ _POST [ '사용자 이름'], 배열 (': nombre'=> $ _POST [ 'nombre'], ': empresa'=> $ _POST [ 'empresa'], ': apellidos'=> $ _POST [ 'apellidos']); 예 :? –

답변

0

현재 잘못된 매개 변수를 전달하고 있습니다. 이 섹션에서 hombre, empress 및 apellidos를 가져와 제출해야합니다.

+0

해결되었습니다. 감사합니다! –

관련 문제