2017-12-01 3 views
-2

모든 이름이 데이터베이스와 동일하지만 데이터베이스에 요소를 추가하지는 않았습니다. 무엇이 문제일까요?내 가입 양식이 데이터베이스에 응답하지 않습니다. 뭐가 문제 야?

<div class="form_div" required> 
     <p class="form_label">Not a customer? Signup Here!</p> 
     <form method="Post" action="Register.php" required> 
      <p><input type="text" name="name" placeholder="Name and Last Name" required></p> 
      <p><input type="text" name="Email" placeholder="Email Address" required></p> 
      <p><input type="text" name="Phone" placeholder="Your Phone Number" required></p> 
      <p><input type="password" name="password" placeholder="**********" required></p> 
      <p><input type="submit" name="submit" value="SIGNUP"> </p> 
<?php 
     //Fill out the following fields to be able to register. 
if(isset($_POST['submit'])) { 
    $nameandlast= $_POST['name']; 
    $Email= $_POST['Email']; 
    $Phone= $_POST['Phone']; 
    $password= $_POST['password']; 
     //Inserts customer details into the customer table in the SQL database so they can schedule appointments and login later. If the registration have been added successfully, display a success message. 
    $query = "INSERT INTO customers (name, email, phone, pass) VALUES ('{$nameandlast}','{$Email}','{$Phone}','{$password}');"; 
    runQuery($query); 
    echo "You have been successfully registered"; 

// If the customer is succesfully registered, redirect him so he can log in. 
    header('Location: Login.php'); 

} 
?> 
+0

'runQuery'의 기능은 무엇입니까? SQL 인젝션에 대해 열려 있습니다. 암호는 해쉬되어야합니다. 귀하의 코드가 쿼리 작업을 가정하고 로그인 페이지로 사용자를 리디렉션하는 것처럼 보입니다. 리디렉션은 이미 출력을 전송했기 때문에 작동하지 않습니다. – chris85

+0

입력을 필터링해야합니다! 준비된 명령문을 사용하여 사용자 데이터를 db에 삽입하십시오. 안전한 것은 없으며, 항상 확인/테스트하십시오! 시작하려면 https://www.w3schools.com/php/php_mysql_prepared_statements.asp를 참조하십시오. – Chad

답변

-1

브래킷을 제거은 "()"는 데이터베이스 연결 https://www.w3schools.com/php/php_mysql_connect.asp RUNQUERY이 링크를 참조 호야 데이터베이스 연결을 didnt는 그 때는 값을 삽입하는 동안은 쿼리를 실행하기위한 라이브러리 함수가 아닙니다. SQL 인젝션을 피하기 위해 php로 인풋을 sanitize해야한다.

예를 들어,이 코드는 새 사용자를 등록하는 데 사용됩니다.

<?php 
$servername="localhost"; 
$username="root"; 
$password="admin"; 
$db="userreg"; 
$con=new mysqli($servername,$username,$password,$db);//this line make //connection with the database 
if ($con->connect_error) { 
    die("Connection failed: " . $con->connect_error); 
} 

$dob=mysqli_real_escape_string($con,$_POST['dbt']);//this //mysqli_real_escape_string sanitizes input for better security use prepared //staements 
$uame=mysqli_real_escape_string($con,$_POST['uname']); 
$finame=mysqli_real_escape_string($con,$_POST['fname']); 
$laname=mysqli_real_escape_string($con,$_POST['lname']); 
$paname=mysqli_real_escape_string($con,$_POST['pword']); 
$pname=hash("sha1",$paname); 
$maid=mysqli_real_escape_string($con,$_POST['mid']); 
$sql = "INSERT INTO user (firstname,lastname,username,password,email,dob)"; 


$sql .= "VALUES ('$finame','$laname','$uame','$pname','$maid','$dob');"; 
$check="SELECT * FROM user WHERE username='$uame';"; 
$chk=$con->query($check); 
if($chk->num_rows >0) 
{ 
    echo "<div class=container> <div class='alert alert-danger'><strong>username already exist , try using another name</strong>"; 

} 
else 
if ($con->query($sql))//this line executes query { 



    echo "<div class='alert alert-success'><strong>New regitration successful</strong>"; 
    session_start(); 
    $_SESSION['login_user']=$uame; 
    $_SESSION['pass']=$pname; 


    echo "<a href='home.php'><button class='btn btn-success' >ok</button></a></div>"; 

} else { 
    echo "<p>Error: " . $sql . "<br>" . mysqli_error($con)."</p>"; 
} 

    ?> 
+0

why downvoted? 이해할 수 없다. –

1

나는 RUNQUERY()가 무엇을하는지 모르겠지만 난 당신의 스크립트가 데이터베이스에 연결하는 방법을 변경했습니다. 또한 SQL 인젝션이 더 이상 가능하지 않으며 쿼리가 실패하면 사용자가 더 이상 다음 페이지로 이동하지 않게되었습니다. 또한. 사용자를 새 페이지로 리디렉션하면 에코가 더 이상 보이지 않습니다. 메시지를 쿠키에 저장하고 다음 페이지에서 호출 할 수 있습니다. 메시지를 트리거 한 후에는 쿠키의 설정을 해제하십시오.

<?php 

$mysqli = new mysqli("127.0.0.1", "root", "password", "database"); 

if(isset($_POST['submit'])) { 
    $nameandlast= mysqli_real_escape_string($mysqli, $_POST['name']); 
    $Email= mysqli_real_escape_string($mysqli, $_POST['Email']); 
    $Phone= mysqli_real_escape_string($mysqli, $_POST['Phone']); 
    $password= mysqli_real_escape_string($mysqli, $_POST['password']); 


    $success = mysqli_query($mysqli, "INSERT INTO customers (name, email, phone, pass) VALUES ('$nameandlast','$Email','$Phone','$password')"); 

    if ($success) { 

    header('Location: Login.php'); 

    }  
} 
?> 

모든 것들을과 같이 당신은 루프도 할 수 코드를 정리하고 변수로 전원을 켭니다 :
foreach ($_POST as $key => $value) { 
    $$key = mysqli_real_escape_string($mysqli, $value); 
} 

양식 필드의 이름은 쿼리의 변수와 일치하는지 확인합니다.

관련 문제