2013-03-23 6 views
-3

현재 다음 스크립트가 브라우저로 성공을 반환하지만 데이터베이스에 실제로 데이터를 삽입하지 않는 이유를 이해하는 데 현재 어려움이 있습니다. 이전의 MySQL 명령어를 사용하고 있음을 알고 있지만이 문제가 발생하지는 않을 것입니다. 덕분에 사전 알리스 테어PHP가 MySQL 데이터베이스에 삽입되지 않음

<?php 

ob_start(); 
$host="localhost"; // Host name 
$username="XXXXXX"; // Mysql username 
$password="XXXXXXXXXXXXXXXXXXX"; // Mysql password 
$db_name="XXXXXXXX"; // Database name 
$tbl_name="XXXXXXXXXX"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define Variables 
$myusername=$_POST['username']; 
$password1=$_POST['password1']; 
$password2=$_POST['password2']; 
$emailadd=$_POST['emailadd']; 

if($password1==$password2){ 
    //Ecnrypt Password Using SHA512 
    $password1 = hash("sha512", $password1); 
} 

else { 
    //Passwords don't match return user to form with parameter 
    header("location:adduser.php?pwnomatch"); 
} 

//Check user doesn't already exist 
$sqlcheckuser="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result1=mysql_query($sqlcheckuser); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result1); 

//If user exists redirect back to login form 
if($count==1){ 
    header("location:adduser.php?userexist"); 
} 

// To protect MySQL injection (more detail about MySQL injection) 
$username = stripslashes($myusername); 
$password1 = stripslashes($mypassword); 
$emailadd = stripslashes($emailladd); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$emailadd = mysql_real_escape_string($emailladd); 
$sqlinsertuser="INSERT INTO $tbl_name ('username', 'password', 'emailaddress' VALUES ($username, $password1, $emailadd)"; 
mysql_query($sqlinsertuser); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result2); 

// Register user then redirect to "viewuser.php" with success parameter 
header("location:viewuser.php?success"); 

ob_end_flush(); 
?> 
+1

SQL 인젝션은 여기에 있습니다. :) – hjpotter92

답변

3
INSERT INTO $tbl_name ('username', 'password', 'emailaddress' VALUES ($username, $password1, $emailadd) 

에 당신은 더 열 이름에 브래킷을 폐쇄 없습니다. 따라서 귀하의 질의는 다음과 같아야합니다 :

INSERT INTO $tbl_name (`username`, `password`, `emailaddress`) VALUES ($username, $password1, $emailadd) 

제 원래 게시물에서 알지 못하는 부분이 있습니다. 백틱 대신 따옴표를 사용했습니다. 쿼리에서

지수는 일반적으로 역 따옴표는 여기에 설명 문자열을 나타냅니다

Using backticks around field names

+0

downvote 이유는 무엇입니까? –

+2

나는 downvote하지 않았다. 그러나 만일 내가 가지고 있었다면 거꾸로 쉼표가 역 따옴표가 아니기 때문에 그럴 것이다. – Strawberry

+0

@Strawberry sorted –

1

당신은 당신의 쿼리 문자열에서 많은 오류가 있습니다. 이 필드 이름을 전달하는 대신에 아포스트로피의 역 따옴표의 사용

$sqlinsertuser="INSERT INTO $tbl_name (`username`, `password`, `emailaddress`) 
     VALUES('$myusername', '$mypassword', '$emailadd')"; 

주의해야한다. 대신 인용 부호 사용 방법은 VALUES입니다.


쿼리 내에서 잘못된 변수를 사용하고 있습니다.

관련 문제