2010-03-03 39 views
12

Tôi sử dụng joomla để quản lý trang web ... và tôi đang phát triển một ứng dụng php độc lập sẽ chèn và sửa đổi dữ liệu vào các bảng được sử dụng bởi joomla để lưu trữ html của các trang web nó tạo động ...Chèn mã html vào bảng mysql

Cách hoạt động là tôi sử dụng thành phần joomla để tạo nội dung và mã html của các bài viết này được lưu trữ trong một trường trong bảng, nói content_table, bằng joomla .. Mã html này sau đó được truy xuất để xây dựng một phần của trang web.

Tôi muốn thực hiện tương tự với ứng dụng độc lập của mình ... nghĩa là thêm mã html vào nội dung được lưu trong content_table mà sau này có thể được truy xuất bởi joomla để xây dựng một phần của trang.

Vấn đề là: Mã html, dĩ nhiên, có rất nhiều dấu nháy đơn và kép và điều này đặt ra một vấn đề trong khi chèn vào cơ sở dữ liệu .. Tôi đã thử mysql_escape_string() và vẫn gặp lỗi cú pháp. .

tôi có thể sử dụng addslashes() nhưng vì joomla tự lấy mã sau, nó không phải là có thể sử dụng stripslashes() trong khi lấy nó sau này ....

Liệu có cách nào tôi có thể thêm mã html trường của bảng ...

Cảm ơn đề xuất của bạn ... !!

Edit: Sau khi thêm mysql_escape_string() tôi nhận được

Error adding details. Reason : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = '\n 

Đây là câu hỏi của tôi:

UPDATE $jos_content 
SET introtext = '$intro_code', 
     fulltext = '$article_code' 
WHERE id = '$article_id'"; 

Chuỗi đầu vào như sau:

$article_code = '<hr id="system-readmore" /> 
<center>{loadposition user50}</center> 
<p style="text-align: center;"> 
<span style="color: rgb(0, 255, 255);"> 
<i> 
<b> 
<span style="font-size: x-large;"> 
<span style="font-family: Arial;"> 
&nbsp; 
</span> 
</span> 
</b> 
</i> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<i> 
<b> 
<span style="font-size: x-large;"> 
<span style="font-family: Arial;"> 
<?php echo $title; ?> 
</span> 
</span> 
</b> 
</i> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<i> 
<b> 
<span style="font-size: x-large;"> 
<span style="font-family: Arial;"> 
<br /> 
</span> 
</span> 
</b> 
</i> 
</span> 
</p> 
<p style="text-align: center;"> 
<img height="269" width="515" border="3" 
title="<?php echo $title; ?>" 
alt=" <?php echo $title; ?>" 
src="<?php echo $article_image;?>" 
</p> 
<p> 
<span style="font-size: small;"> 
<span style="font-family: Arial;"> 
<span style="color: rgb(153, 204, 255);"> 
<p style="margin-top: 2px; margin-bottom: 2px; margin-left: 120px; text-align: left;"> 
<i> 
<span style="color: rgb(0, 255, 0);"> 
<strong> 
Cast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 
</strong> 
<b> 
</b> 
</span> 
</i> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<?php echo $cast; ?> 
</b> 
</span> 
<i> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<br /> 
</b> 
</span> 
</i> 
<span style="font-family: Arial;"> 
<span style="font-size: small;"> 
<span style="color: rgb(153, 204, 255);"> 
</span> 
</span> 
<span style="color: rgb(0, 255, 0);"> 
<i> 
<strong> 
Direction&nbsp;&nbsp;&nbsp; 
</strong> 
</i> 
<strong> 
: 
</strong> 
<b> 
</b> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<span class="href" 
id="ctl00_ContentPlaceHolderMainContent_FormView1_Director"> 
<?php echo $director; ?> 
</span> 
</b> 
</span> 
</span> 
<span style="font-family: Arial;"> 
<br /> 
<span style="color: rgb(0, 255, 0);"> 
<i> 
<strong> 
Production 
</strong> 
</i> 
<strong> 
: 
</strong> 
<b> 
</b> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<?php echo $direction; ?> 
</b> 
</span> 
<span style="color: rgb(255, 102, 0);"> 
<i> 
<b> 
<br /> 
</b> 
</i> 
</span> 
<span style="font-family: Arial;"> 
<span style="color: rgb(0, 255, 0);"> 
<span style="font-family: Arial;"> 
<span style="font-size: small;"> 
<i> 
<strong> 
Music&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</strong> 
</i> 
<strong> 
: 
</strong> 
</span> 
</span> 
</span> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<i> 
</i> 
<?php echo $music; ?> 
<i> 
<br /> 
<span style="color: rgb(0, 255, 0);"> 
Lyrics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</span> 
</i> 
<span style="color: rgb(0, 255, 0);"> 
: 
</span> 
<i> 
</i> 
</b> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<?php echo $lyrics; ?> 
</b> 
</span> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
<i> 
<br /> 
</i> 
<span style="color: rgb(0, 255, 0);"> 
<i> 
Year&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</i> 
: 
</span> 
<?php echo $year; ?> 
</b> 
</span> 
</span> 
<i> 
<span style="color: rgb(0, 255, 255);"> 
<b> 
</b> 
</span> 
</i> 
</p> 
</span> 
</span> 
</span> 
</p> 
<p> 
<left> 
{loadposition user14} 
&nbsp; 
</left> 
</p> 
<div style="text-align: center;"> 
<p> 
<i> 
<span style="font-family: Arial;"> 
<b> 
<span style="font-size: medium;"> 
<span style="color: rgb(51, 255, 255);"> 
Click 
<img src="images/stories/Play button1.png" 
alt="alt" /> 
in the Playlist to Download Songs 
</span> 
</span> 
</b> 
</span> 
</i> 
</p> 
</div> 
<table border="0" align="center"> 
<tbody> 
<tr> 
<td> 
<h4 style="text-align: center;"> 
<i> 
<span style="color: rgb(102, 255, 0);"> 
<b> 
<b> 
&nbsp;High Bandwidth Users 
</b> 
</b> 
</span> 
</i> 
<i> 
<span style="color: rgb(102, 255, 0);"> 
<b> 
<b> 
&nbsp; 
</b> 
</b> 
</span> 
</i> 
<span style="color: rgb(102, 255, 0);"> 
<b> 
</b> 
</span> 
</h4> 
</td> 
<td> 
<h4 style="text-align: center;"> 
<i> 
<span style="color: rgb(102, 255, 0);"> 
<b> 
<b> 
&nbsp;Low Bandwidth Users 
</b> 
</b> 
</span> 
</i> 
<span style="color: rgb(102, 255, 0);"> 
<b> 
<br /> 
</b> 
</span> 
</h4> 
</td> 
</tr> 
<tr> 
<td> 
{auto width=&quot;235&quot; displayheight=&quot;0&quot; height=&quot;225&quot;} <?php echo $hqList; ?> {/auto} 
</td> 
<td> 
{auto width=&quot;235&quot; displayheight=&quot;0&quot; height=&quot;225&quot;}<?php echo $lqList; ?>{/auto} 
</td> 
</tr> 
</tbody> 
</table> 
<center> 
{loadposition user50} 
</center>'; 
+2

. Như ? – codaddict

+0

Tôi với codaddict - bạn không nên nhận được bất kỳ lỗi nào trừ khi có một lỗi trong 'mysql_escape_string' chức năng, mà tôi rất nghi ngờ. –

+0

Bạn có thể in ra cả đầu vào và đầu ra của 'mysql_escape_string' gây ra lỗi này? –

Trả lời

2

Well..Debugged nó .. Hóa ra vấn đề là sau khi tất cả không phải với chức năng thoát ...

Check-out truy vấn:

UPDATE $jos_content 
SET introtext = '$intro_code', 
     fulltext = '$article_code' 
WHERE id = '$article_id'"; 

Bạn có thể thấy trường 'toàn văn' ... Rõ ràng, từ "toàn văn" là một từ khóa mysql ... Để được chính xác, đó là một loại lĩnh vực như TEXT, INT, MEDIUMTEXT vv ...

Tôi đã thay đổi truy vấn để này

"UPDATE $jos_content 
SET $jos_content.introtext = '$intro_code', 
     $jos_content.fulltext = '$article_code' 
WHERE $jos_content.id = '$article_id'"; 

Và thì đấy ... !!!!

+0

đảm bảo kiểu dữ liệu của bạn là nvarchar – Nealv

+1

Thực ra nó không phải là một kiểu trường. Đó là một loại chỉ mục. Tôi tin rằng bạn cũng có thể tránh được vấn đề bằng cách kèm theo tên trường trong dấu tick ('\' ') – JAL

7

Bạn không nên cần dấu gạch chéo. Điều duy nhất sẽ gây ra vấn đề trong quá trình chèn thông thường là các dấu ngoặc kép và mysql_escape_string() sẽ xử lý vấn đề đó ngoại trừ các vấn đề về ký tự. Hãy thử mysql_real_escape_string().

Ngoài ra, lưu ý rằng việc lưu trữ HTML nguyên do người dùng cung cấp trong cơ sở dữ liệu có thể dẫn đến các sự cố bảo mật. Hãy xem xét sử dụng một cái gì đó như bbcode hoặc markdown để thay thế.

+0

BBcode không phải là một tùy chọn ở đây .. Bởi vì joomle chỉ nhận được các mục nhập trong lĩnh vực này và ouputs nó trong trang ... !! nó không làm bất kỳ loại phân tích nào ... – SpikETidE

1

Chỉ cần để xác nhận, truy vấn của bạn trông giống như quyền này:

$query = ' 
    UPDATE "'.mysql_real_escape_string ($jos_content).'" 
    SET introtext = "'.mysql_real_escape_string ($intro_code).'", 
      fulltext = "'.mysql_real_escape_string ($article_code).'" 
    WHERE id = "'.mysql_real_escape_string ($article_id).'" 
"; 
25

Tôi thích chuyển đổi mã thành chuỗi thông thường hơn trước khi chèn vào cơ sở dữ liệu. Tôi nghĩ, đó là kịch bản an toàn nhất.Xem xét sử dụng mã này:

$article_code = base64_encode($article_code); 
/* insert to database */ 

Vì vậy, khi bạn muốn sử dụng mã đó, chỉ cần giải mã bằng base64_decode. Tôi đề nghị bạn sử dụng kiểu dữ liệu 'văn bản' để tiết kiệm $ article_code thay vì 'varchar'.

+0

Bạn nói đúng, nhược điểm duy nhất là sẽ tăng thêm dữ liệu của bạn thêm 33% nhưng đến nay nó là một giải pháp KISS! –

+13

Và bây giờ bạn đã làm cho cơ sở dữ liệu của bạn không thể tìm kiếm. –

1

fulltext là từ khóa định trước mysql. Vui lòng sử dụng cấp tính (`) hoặc dấu nháy đơn (')

Đây là mã -

UPDATE $jos_content 
SET `introtext` = '$intro_code', 
     `fulltext` = '$article_code' 
WHERE `id` = '$article_id'"; 
1

tôi đã cùng một vấn đề, tôi cố định nó với biểu thức thông thường. Bạn có thể sử dụng một cái gì đó như thế này: $target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';

và sau đó sử dụng preg_replace() chức năng:

class handle 
{ 
    public static function makehtml($target) 
    { 
    $output = preg_replace("#{~#", "<", $target); 
    $output = preg_replace("#~}#", ">", $target); 
    $output = preg_replace("#{{q}}#", '"', $target); 
    return $output; 
} 
} 
echo handle::makehtml($target); 
// output : <p class="important-text">Some text here</p> 
0

nếu bạn đang lo lắng về không gian và đang sử dụng các căn cứ 64 mã hóa phương pháp được đăng ở đây bạn có thể sử dụng lệnh gzdeflate trong php để cắt nó xuống sau đó mã hóa nó. Đây là một kịch bản thử nghiệm nhỏ trên một số ký tự mẫu được tạo. Rõ ràng có các phương pháp nén khác nhau để xem xét nếu bạn quan tâm đến kích thước nhưng điều này có nghĩa là bạn có thể đặt nó vào mysql giảm thiểu kích thước trên db. Sau đó bạn có thể đọc lại nó bằng gzinflate (base64_decode (...));

<?php 
//generate sample chars for the example 
function generateRandomString($length = 10000) { 
    $characters = '"56/789abcdefghij:klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++) { 
     $randomString .= $characters[rand(0, strlen($characters) - 1)]; 
    } 
    return $randomString; 
} 
// 

$string =generateRandomString(); 
echo 'string size:'.strlen($string); 
$b64html = base64_encode($string); 
echo '<br/>'.'Original base64 size:'.strlen($b64html); 
$compressed = gzdeflate($string, 9); 
echo '<br/>'.'compressed size:'.strlen($compressed); 
echo '<br/>'.'base64 compressed size:'.strlen(base64_encode($compressed)); 
/* insert into db the base64_encode($compressed); */ 
?> 
0

Gọi mysql_escape_string() chức năng đi qua trong biến chứa nội dung html như:

mysql_escape_string ($ _ POST [ "text"]);

sẽ đảm bảo rằng các ký tự đặc biệt như dấu ngoặc kép trong văn bản sẽ không gây ra lỗi php và cơ sở dữ liệu sẽ được cập nhật thành công.

3

Đây là cách tốt nhất tôi tìm thấy "mysql_escape_string Tôi đã thử() và vẫn nhận được lỗi cú pháp" addslashes()

$article_code = addslashes($article_code); 

UPDATE $jos_content 
SET introtext = '$intro_code', 
     fulltext = '$article_code' 
WHERE id = '$article_id'"; 
+0

sử dụng stripslashes bất cứ khi nào bạn muốn sử dụng mã đó. –

Các vấn đề liên quan