2014-02-18 2 views
-1

저는 초보 프로그래머입니다. 기술 향상을위한 포럼을 만들고 있지만 현재 문제에 대해 걷고 있습니다. 다음은 코드 문제입니다.PhP를 사용하여 섹션을 작성합니다.

문제는 다음과 같습니다. 단일 인용 부호를 사용할 수 없어 따옴표를 사용하고 인용 부호를 사용하고 싶습니다.

가 데이터베이스에 들어가는 곳이다 :

// get data that sent from form 
$topic=$_POST['topic']; 
$detail=$_POST['detail']; 
$name=$_SESSION['display']; 
$email=$_POST['email']; 

이 양식의 일부입니다 : 내가 그래서 우리는 단일 및 dubble 따옴표를 사용 할 수 있습니다 추가해야 할 무엇

<tr> 
    <td width="14%"><strong>Topic</strong></td> 
    <td width="2%">:</td> 
    <td width="84%"><input name="topic" type="text" id="topic" size="50" /></td> 
</tr> 
<tr> 
    <td valign="top"><strong>Detail</strong></td> 
    <td valign="top">:</td> 
    <td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td> 
</tr> 

? 나는 무엇을해야합니까? 때문에 어떤 사람이 내가

if($result){ 
echo "Successful<BR>"; 
echo "<a href=index.php>View your topic</a>"; 
header("Location: localhost/forum/"); 
} 
else { 
echo "ERROR"; 
} 

을주는 오류 메시지입니다

메시지가 충돌 단일 견적을 .. 사용 그리고 그것은에가는 곳 인 경우 :

$sql="INSERT INTO $qtbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')"; 
$result=mysql_query($sql) 

;

+1

에 매개 변수의 사용에 대한 자세한 내용해야 PHP에서 프로그래밍 기술의 다음 수준에 도달하려면 함수들 [escape your variables] (http://uk3.php.net/mysql_real_escape_string)보다 나은 해결책은 그 페이지의 큰 붉은 색 상자를주의 깊게 살펴보고 그것이하는 바를 행하는 것입니다. – MLeFevre

답변

1

당신은 "SQL 주입"이라고 불리는 것을 실행하고 있습니다. 이것은 심각한 문제입니다.

http://php.net/mysql_real_escape_string을 읽고이 기능을 사용하여 입력 데이터의 특수 문자를 이스케이프 처리하십시오.

INSERT INTO tbl (`topic`) VALUES ('foobar'); 

인 : 그래서 생성 된 쿼리 문자열

$topic = "foobar"; 
$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 
echo $query; 

가 발생합니다 어쩌면처럼

$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 

:

이 같은 쿼리를 가지고 보인다 좋은. 하지만 :

INSERT INTO tbl (`topic`) VALUES('f'); delete from tbl; 

을하고 이것은 당신이 무슨 일이 일어날 무엇을 원하는되지 않습니다 :

$topic = "f'); delete from tbl;"; 
$query = "INSERT INTO tbl (`topic`) VALUES ('$topic');" 
echo $query; 

반환됩니다.

당신이 PDO-문서 ( http://php.net/pdo)를 읽고 난 당신이 mysql_로를 사용하는 추측 오전 SQL 문을 :

+0

Soo 나는 가져온 것의 변수를 만들어야 만합니까? 위의 코드를 변경 했으므로 코드가 어떻게 바뀌는 지 확인할 수 있습니다. – Harryaars

+0

나는 내 대답에 아무 것도 추가 할 수 없습니다. 제 링크를 따라주세요. 코드가 예상대로입니다. PDO에 대해 mysql_real_escape_string 또는 - better - read를 사용하십시오. 행복하다면 제 대답을 수락하십시오. – tjati

+0

감사합니다. 나는 그것을 추가하고 싶었다. – Harryaars