2014-09-26 3 views
0

이 스크립트를 실행할 때 내 MyPHP 데이터베이스에 레코드가 표시되지 않습니다.HTML 폼과 PHP를 사용하여 데이터베이스에 레코드를 삽입 할 수 없습니다.

나는 실행하고 있습니다 : APACHE 2.4.7 MYSQL 5.6.15 5.5.8

먼저 HTML 코드 PHP ...

<html> 

<center> 
    <font face="Helvetica"> 

<u><b>Matthew Gieger's Guestbook</b></u> 

<form action="link.php" method="post"/> 
<p>Name: </p> 
<input type="text" name="Name" required/> 
<p>Email: </p> 
<input type="email" name="Email" required /> 
<p>Message: </p> 
<p><textarea rows="4" cols="50" name="Message"> </textarea></p> 
<input type="submit" value="Submit" /> 
<input type="reset" value="Reset" /> 
</form> 
</center> 
</html> 

그리고 PHP 스크립트. 문제가 있다고 생각하는 곳입니다 ...

<?php 

$username='root'; 
$password=''; 
$database='guestbook'; 

$name= $_POST['Name']; 
$email= $_POST['Email']; 
$message= $_POST['Message']; 

new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost"); 

echo"connected"; 

mysqli:"insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,date())"; 

?> 

코드를 실행할 때 오류가 발생하지 않습니다. 방금 도착했습니다 "연결됨"

+0

if 조건을 통해 디버깅 해보십시오. –

답변

1

mysqli 개체는 어디에도 정의되어 있지 않습니다. 그리고 어디서나 mysqli_query()을 사용하고 있지 않습니다.

Here are the docs to mysqli.

이 같은 것을보십시오 :

$mysqli = new mysqli('localhost', $username, $password, $database); 

/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

$mysqli->query("INSERT INTO `contacts`(`Name`, `Email`, `Message`, `Timestamp`) VALUES ('". $name ."', '". $email ."', '". $message ."', '". $timestamp ."')"); 
+0

그랬어! 정말 고맙습니다! 미안 해요 .. 투표 할 수 없어요. 나는 충분한 평판이 없습니다. – meichthys

+0

@MattG 보안 문제 (SQL 주입)를 막기 위해 Schlaus의 대답도보십시오. – Bono

+0

데이터베이스에 두 번째 레코드를 추가하는 데 여전히 문제가 있습니다. 그것은 1 개 이상의 기록을 허용하지 않을 것입니다. 어떤 아이디어있어? – meichthys

0

가능성이 가장 높은 서식 문제, 이런 식으로 시도 : 당신은 제대로 mysqli 클래스를 인스턴스화하지 않을

<?php 
$username='root'; 
$password=''; 
$database='guestbook'; 

$name= $_POST['Name']; 
$email= $_POST['Email']; 
$message= $_POST['Message']; 
$db = new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost"); 

if($db->connect_errno > 0){ 
die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
$currentDate=date(); 
$sql = "insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,$currentDate)"; 

if(!$result = $db->query($sql)){ 
die('There was an error running the query [' . $db->error . ']'); 
} 

?> 
+0

몇 가지 오류를 반환했지만 mysqli가 필요하다는 것이 옳았습니다. 나는 솔질 할 필요가 있다을 추측한다! – meichthys

1

. 당신은 변수에 개체 인스턴스를 저장해야합니다 또한 코드에서 심각한 보안 문제가있다

$mysqli = new mysqli('localhost',$username,$password,$database); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

, 당신이 당신의 입력 변수를 탈출하지 않을 때문이다. 가장 좋은 해결책은 PDO : http://php.net/manual/en/pdo.construct.php과 매개 변수 바인딩을 살펴 보는 것입니다.

당신이 정말로 mysqli이 작업을 수행하려면 먼저 모든 입력 변수에 mysqli_real_escape_string을 사용해야 제대로 쿼리를 실행 한 후

$name = mysqli_real_escape_string($mysqli, $_POST['Name']); 
$email = mysqli_real_escape_string($mysqli, $_POST['Email']); 
$message = mysqli_real_escape_string($mysqli, $_POST['Message']); 

과 :

$mysqli->query("insert into contacts (Name,Email,Message,Timestamp) values ('$name','$email','$message',".date().")"; 

당신이 '돈 경우 사용자 입력을 피할 수 있습니다. 간단한 SQL injection으로 데이터베이스를 해킹하기가 정말 쉽습니다.

+0

+1 주입 취약점에 대해서는, 저 자신을 언급하는 것을 잊었습니다. – Bono

+0

머리를 주셔서 감사합니다! 이것은 단지 수업 프로젝트를위한 것이지만, 확실히 알고있는 것이 좋습니다! – meichthys

관련 문제