2011-03-12 4 views
0

나는 php를 호출하는 html 형식을 가지고 있습니다. PHP는 SQL 데이터베이스에 데이터를 삽입합니다. 그래서,이 아래mysqli, PHP 삽입 문제

$name = $_POST['name']; 

$query = "INSERT INTO student (complete_name, date_birth, gender, email) 
      VALUES ('$name', '$year', '$gender', '$email_1')"; 

mysqli_query($link,$query) or die(mysql_error()); 

mysqli_close($link); 

하고, 나는이 코드를 실행 할 때마다 현재 데이터가 확인 삽입

use coursework_test; 

drop table if exists Student; 

create table Student 
(

    complete_name varchar(50) NOT NULL, 
    date_birth date, 
    gender varchar(10) NOT NULL, 
    email varchar(50) PRIMARY KEY NOT NULL 

); 

을 데이터베이스를 사용하여 작성/내 SQL 코드 사용되는 내 PHP 코드의 일부입니다, 필드 "complete_name" 은 비어 있습니다. null이 아닙니다. 그냥 비어 있습니다. 어떤 아이디어?

+0

검색어를 에코하려고 했습니까? –

+0

html 양식 코드를 게시하십시오. –

+0

[Little Bobby Tables] (http://xkcd.com/327/)에도주의하십시오. 그것이 실제 코드라면 SQL 인젝션이 발생하기를 기다리고 있습니다. –

답변

0

HTML 코드에서 올바르게 입력 이름을 name으로 잘못 지정했습니다. 따라서 해당 입력의 이름을 확인하십시오. 또한 일부 브라우저는 name="name"을 HTML 부울 값으로 구문 분석하므로 해당 필드에 다른 이름을 찾을 수 있습니다.

즉, 쿼리에 대해 준비된 문을 사용하는 것이 좋습니다. 지금 당장은 코드로 SQL 인젝션 공격에 취약합니다. 준비된 문을 사용하면 간단하다 : SQL에서

$stmt = mysqli_prepare("INSERT INTO student 
        (complete_name, date_birth, gender, email) 
        VALUES (?, ?, ?, ?)", mysqli_stmt_execute($stmt);link); 

mysqli_stmt_bind_param($stmt, "s", $name); 
mysqli_stmt_bind_param($stmt, "i", $year); 
mysqli_stmt_bind_param($stmt, "s", $gender); 
mysqli_stmt_bind_param($stmt, "s", $email_1); 

mysqli_stmt_execute($stmt); 
mysqli_stmt_close($stmt); 
2

, 당신은 VARCHAR를 입력하고 ("") 값이없는 경우 해당 데이터로 삽입됩니다 삽입에, 그것은에 null가 아닌 빈 문자열을 기본값으로 열을 설정하는 경우 해당 열에 대해 주어집니다.

즉, 내가 다시 확인하고 $_POST['name']에 찾고있는 데이터가 있는지 확인합니다.

0
<?php 

$host=""; // Host name 
$username="users"; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name="student"; // Table name 
?> 

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

// Get values from form 
$name=$_POST['name']; 
$date_birth=$_POST['date_birth']; 
$gender=$_POST['gender']; 
$email=$_POST['email']; 

// Insert data into mysql 
$sql="INSERT INTO $tbl_name(name, date_birth, gender, email)VALUES('$name', $year', '$gender', '$email')"; 
$result=mysql_query($sql); 

// if successfully insert data into database, displays message "Successful". 
if($result){ 
echo "Successful"; 
echo "<BR>"; 
echo "<a href='insert.php'>Back to main page</a>"; 
} 

else { 
echo "ERROR"; 
} 


// close connection 
mysql_close(); 
?>