2014-12-03 1 views
2

그래서 내 데이터베이스 (icposts, 아래)에 주석을 추가하려고하는데 결과가 없습니다. 당겨서 직접 데이터베이스 테이블에 삽입하는 주석을 표시 할 수 있지만 html 폼에서 주석을 보내려고하면 전혀 작동하지 않는 것 같습니다. 여기 localhost에서 내 데이터베이스에 주석 달기

<?php 

$connect=mysqli_connect("localhost","root",""); 
$database=mysqli_select_db("icposts"); 


$username=$_POST['poster']; 
$title=$_POST['postTitle']; 
$body=$_POST['postText']; 
$date=$_POST['currentDate']; 
$submit=$_POST['submit']; 

if($submit) 
{ 
     $query=mysql_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')"); 

} 
?> 

는 참조 용으로 폼의 HTML입니다 :

<form name="input" action="comments.php" method="POST"> 
 
\t Username: <input id = "poster" type="text" name="poster"value="Guest" /><br> 
 
\t Tite: <input id = "postTitle" type="text" name="postTitle" /><br> 
 
\t Comment: <br> <textarea id = "postText" name = "postText"rows="4" cols="50"></textarea> 
 
\t <input id = "submit" name = "submit" type="submit" value="Submit" /> 
 
\t <input id = "currentDate" name = "currentDate" type = "hidden" value = "" /> 
 
</form>
나는 다양한 예제를 찾고 있었고, 내가 가지고 무엇을 잘못 아무것도 표시되지 않습니다 다른 사람들이 온라인에 게시 한 내용과 비교할 때.

답변

2

먼저, $database=mysqli_select_db("icposts");에 연결해야합니다.

그러면 MySQL API를 mysql_query과 섞기 시작합니다. 그들은 단지 섞지 않는다.

$database=mysqli_select_db($connect,"icposts"); 

테이블과 열에 따옴표가 잘못 사용되었습니다.

중 하나를 사용 틱, 또는 쿼리에 연결 통과도 그들 (따옴표)를 제거하고 :

$query=mysqli_query($connect,"INSERT INTO `posts` (`id`, `username`, `title`, `body`, `date`) 

VALUES ('','$username','$title','$body','$date')"); 

또한 check for DB errorsmysqli_query()or die(mysqli_error($connection))를 추가, 당신은 오류를받지 못하고 있습니다 이유입니다; 너는 그들을 확인하지 않는다. Error reporting을 살펴 봐야합니다.

예 :

if (!mysqli_query($connection,"INSERT INTO `posts` (`id`, `username`, `title`, `body`, `date`) 
    VALUES ('','$username','$title','$body','$date')"); 
) 
    { 
    echo("Error description: " . mysqli_error($connection)); 
    } 
else{ 
    echo "Success!"; 
} 

당신은 대신 4 개 매개 변수를 사용할 수 있습니다

$connect=mysqli_connect("localhost", "root", "", "icposts"); 

당신은 또한

if(isset($_POST['submit'])) 

if($submit)을 대체 할 수 있습니다 당신은 얻을 수 있습니다 $submit=$_POST['submit']; 제거.isset()을 사용하는 것이 가장 좋습니다.

Nota :currentDate 열에 공백 데이터가 허용되는지 확인해야합니다. 그렇지 않으면 값 형식을 지정해야합니다.

"id"열에 대한 또 다른 메모입니다. auto_increment 인 경우 쿼리에서이를 생략 할 수 있습니다.

데이터베이스가 자체적으로 증가합니다.


(!) 참고 :

현재의 코드는 SQL injection에게 열려 있습니다. prepared statements 또는 PDO with prepared statements, 을 사용하면 훨씬 안전합니다. 당신이 준비된 문을 사용하여 들어갈 때까지 한편

는 사용하여 코드를 변경합니다

$username = stripslashes($_POST['poster']); 
$username = mysqli_real_escape_string($connection, $_POST['poster']); 

하고 모든 변수에 대해 동일한 작업을 수행. 내 미래의 프로젝트에 대한 보안을 염두에 계속 하겠지만, 지금은이에 대한 보안 될 필요가 없습니다, 도움을

<?php 
$link = new mysqli('localhost', 'root', '', 'database'); 
if ($link->connect_errno) { 
    throw new Exception($link->connect_error, $link->connect_errno); 
} 

// Check that the expected value has been provided via a POST request 
if (!isset($_POST['input1'])) { 
    throw new Exception('Missing POST request parameter [input1]'); 
} 

// now prepare an INSERT statement 
if (!$stmt = $link->prepare('INSERT INTO `your_table` (`name`) VALUES (?)')) { 
    throw new Exception($link->error, $link->errno); 
} 

// bind parameters 
$stmt->bind_param('s', $_POST['input1']); 

if (!$stmt->execute()) { 
    throw new Exception($stmt->error, $stmt->errno); 
} 
+0

도움을 주셔서 감사합니다! 임무를 위해이 작업을 수행하고 있으며 페이지가 안전 할 필요는 없지만 향후 프로젝트에서 SQL 주입을 염두에 두겠습니다. –

+0

쉐인을 도와 주셔서 감사합니다. 그것을 해결 된 것으로 표시하는 것을 기억하십시오 * 환호성 * –

0
$connect=mysqli_connect("localhost","root",""); 

는이 있음을 유의하십시오 마십시오

$query=mysqli_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')", $database); 

이어야한다

$connect=mysqli_connect("localhost","root","", "icposts"); 

그리고

$query=mysql_query("INSERT INTO 'posts'('id', 'username', 'title', 'body', 'date') VALUES ('','$username','$title','$body','$date')"); 

를 (선택 dB 간단하게 제거 할 수 있습니다)해야 하는가 정말 나쁜 aprouch, 또한 귀하의 쿼리를보고 id가 자동 증가 된 열인 것처럼 보입니다. 그렇다면 쿼리 자체에이 값을 적을 필요조차 없습니다.

매개 변수화 쿼리를 자세히 살펴볼 수도 있습니다. 이것은 좋은 소식입니다. How can I prevent SQL injection in PHP?

+0

감사 : 여기


는 준비된 명령문 프라이머입니다 나 순간. –