2012-11-06 3 views
1

현재 OpenCart로 가져 오는 1000 개의 제품 목록이 있습니다. . 제품 제목의 일부는MySQL에서 인용 부호 사용하기

(예 : 5 "의 경우) 인치를 상징하는 따옴표가 들어 나는 성공적이 쿼리를 사용하여 이러한 모든 제품을 수입 한 :

$data['name'] = mysql_escape_string($data['name']); 
$sql = "INSERT INTO ".DB_PREFIX."product-description SET language_id = '1', name = '".$data['name']."'"; 
$query = mysql_query($sql); 

을 나는 목록 OpenCart에서 오전 때 또한 제품을 프로 버럴하게 보여 주지만 제품을 편집 할 때 제목 입력 필드 (제목 표시)는 "기호 전방"에서 제목을 잘라냅니다. 여기

은 시각적 인 예입니다 : 여기 enter image description here

우리는 제목이 여기 enter image description here

우리가 "후에 절단 된 같은 제목을보고 완료보고

나는 그것을 확인할 수 있습니다. 인터페이스에서 제품을 수동으로 삽입하면 "제대로 작동하기 때문에 OpenCart 코딩 오류가 아닙니다. 오류는 내 쿼리 내에 있어야합니다.

내 쿼리에 문제가있는 경우 모든 제품을 다시 삽입하지 않고 업데이트 할 수있는 쿼리가 있습니까?

+0

"설명 마크"는 것이 아니다. 그것들은 * 따옴표입니다. – meagar

+0

메트릭으로 전환해야하는 또 다른 이유. –

+1

[mysql_escape_string] (http://php.net/manual/en/function.mysql-escape-string.php) 함수는 PHP 5.3.0에서 사용되지 않습니다. 대신 [mysqli_real_escape_string] (http://www.php.net/manual/en/mysqli.real-escape-string.php) 함수를 사용해야합니다. – Alexander

답변

1

모든 따옴표를 '를 교체하지만,이 증상은 매우 명확하고 일반적인이다.

여기 은 "후에 절단 된 우리가 제목을 참조

이 일반적으로 콘텐츠를 먼저 탈출 적절한 HTML을하지 않고 HTML에 전달되는 의미 예를 들어, 다음과 같은 INPUT 가지고 :.

<input type="text" value="#VAL#" /> 

#VAL#은 필요에 따라 값으로 대체되는 자리 표시 자입니다. 하지만 당신의 가치 즉이다 Tablet 7" No Name 그런 다음 HTML이처럼 보이는 끝날 것 :

<input type="text" value="Tablet 7" No Name" /> 

을가 처음 " 후 절단하는 이유 명확하게 설명한다. 해결 방법은 으로 이스케이프 처리하거나 (보다 적절한 이름을 사용하여 특수 문자를 엔터티으로 변환하는 것입니다.) HTML의 경우 htmlspecialchars() 함수로 PHP에서 처리 할 수 ​​있으므로 SQL 쿼리와 아무 관련이 없습니다 - HTML 마크 업을 잘못 처리하는 문제 일뿐입니다. 이 같은 예는 (소스) 보일 것보다 실체가 제대로 처리하는

:

다음 (추가 "으로 제대로 " 엔티티를 표시되고 브라우저) 브라우저에 아무 문제도하지 않습니다
<input type="text" value="Tablet 7&quot; No Name" /> 

.

자세한 내용은 htmlspecialchars()이며 일반적으로 특수 문자는 is here입니다.

+0

이것이 문제 일 수 있습니다! 나는 그런 생각조차하지 않았다! 내가 이해할 수없는 것은 편집 페이지로 갈 때 인터페이스를 사용하여 제품을 삽입 할 때입니다. 직접 쿼리를 사용하면 좋아하지 않습니다. 어쨌든, 시도해 보겠습니다. –

+1

감사합니다. 나는 이것을 답으로 표시하는 것을 잊었다! 다시 한 번 감사드립니다! –

-3

양식에서 데이터를 수집 할 때는 백 슬래시 \을 사용하여 모든 인용 부호를 이스케이프하면됩니다. 내가 OpenChart의 내부를 모르는 \'

+2

그게 그의 행입니다 :'$ data [ 'name'] = mysql_escape_string ($ data [ 'name']);'않습니다. – newfurniturey

+0

그래, 그게 내가 생각했던거야? –

2

openCart는 데이터베이스 에 저장하려고하는 모든 HTML의 모든 HTML을 이스케이프 처리하여 저장합니다.

$data['name'] = mysql_escape_string($data['name']); 

로 : 그래서 당신은 그냥 수정해야

$data['name'] = mysql_escape_string(htmlspecialchars($data['name'], ENT_QUOTES)); 
관련 문제