2010-03-03 25 views
12

Używam joomli do zarządzania stroną internetową ... i tworzę samodzielną aplikację php, która wstawi i zmodyfikuje dane do tabel używanych przez joomla do przechowywania html stron internetowych dynamicznie tworzy ...Wstawianie kodu html w tabeli mysql

Sposób działania polega na użyciu komponentu joomla do tworzenia treści, a kod html tych artykułów jest przechowywany w polu w tabeli, na przykład content_table, przez joomla .. Ten kod html jest później pobrane w celu skonstruowania części strony internetowej.

Chcę zrobić to samo z moją samodzielną aplikacją ... tj. Dodać kod html do pliku w content_table, który później może być pobrany przez joomla w celu skonstruowania części strony.

Problem polega na tym, że kod HTML, oczywiście, ma wiele pojedynczych i podwójnych cytatów, a to stwarza problem podczas wstawiania do bazy danych. Próbowałem już mysql_escape_string() i nadal dostaję błędy składniowe. .

mogę używać addslashes(), ale ponieważ sama joomla pobiera kod później, nie jest możliwe użycie stripslashes() podczas pobierania go później ....

Czy mimo to mogę dodać kod HTML pole stołu ...

Dzięki za sugestie ... !!

Edycja: Po dodaniu mysql_escape_string() uzyskać

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 

To moje zapytanie:

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

Ciąg wejściowy jest w następujący sposób:

$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

"próbowałam mysql_escape_string() i wciąż błędy składni". Lubić ? – codaddict

+0

Jestem z kodaddict - nie powinieneś dostawać żadnych błędów, chyba że jest błąd w funkcji 'mysql_escape_string', co bardzo wątpię. –

+0

Czy możesz wydrukować zarówno wejście, jak i wyjście 'mysql_escape_string', które powoduje ten błąd? –

Odpowiedz

2

Well..Debugged to .. Okazuje się, że problem nie był przecież z funkcją uciekającego ...

wyjazdu zapytanie:

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

można zobaczyć „pełny” pole ... Wydaje się, że słowo „pełny” to mysql kluczowe ... Aby być precyzyjnym, to typ pola jak tekst, INT, MEDIUMTEXT etc ...

Zmieniłem zapytanie do tego

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

i voila ... !!!!

+0

upewnij się, że twój typ danych jest nvarchar – Nealv

+1

Właściwie to nie jest typ pola. To rodzaj indeksu. Sądzę, że mógłbyś uniknąć tego problemu, zamykając nazwę pola w tyłkach zwrotnych ('' ''). – JAL

7

Nie powinno być potrzeby ukośniki. Jedyną rzeczą, która spowoduje problem podczas normalnych wstawień, jest cytowanie, a mysql_escape_string() powinno obsługiwać te problemy z wyjątkiem zestawu znaków. Wypróbuj również mysql_real_escape_string().

Należy również pamiętać, że przechowywanie nieprzetworzonego kodu HTML dostarczanego przez użytkownika w bazie danych może prowadzić do problemów z bezpieczeństwem. Rozważ zamiast tego użycie czegoś takiego jak bbcode lub markdown.

+0

BBcode nie jest tu opcją .. Bo joomle po prostu dostaje wpis w polu i umieszcza go na stronie ... !! to nie robi żadnego parsowania ... – SpikETidE

1

Wystarczy, aby potwierdzić zapytanie wygląda to prawo:

$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

Wolę konwertować kod na zwykły ciąg przed wstawieniem do bazy danych. Myślę, że to najbezpieczniejszy scenariusz.Rozważ skorzystanie z tego kodu:

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

Tak więc, jeśli chcesz użyć tego kodu, po prostu dekoduj przy użyciu base64_decode. Proponuję użyć typu danych "tekst" do zapisania $ code_code zamiast "varchar".

+0

Masz rację, jedyne minusy, które dodałyby twoje dane o 33% więcej, ale o ile jest to rozwiązanie KISS! –

+13

A teraz uniemożliwiłeś przeszukiwanie bazy danych. –

1

to mysql predefiniowane słowo kluczowe. Proszę używać ostra (`) lub apostrof (')

Oto kod -

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

miałem ten sam problem, Naprawiłem go z wyrażeń regularnych. Można użyć czegoś takiego: $target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';

a następnie użyć preg_replace() funkcję:

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

Jeśli martwisz się o miejsca i korzystania z bazą 64 metodę kodowanie zamieszczonych tutaj można użyć polecenia gzdeflate w php, aby go przyciąć, a następnie zakodować. Oto mały skrypt testowy na niektórych generowanych przykładowych znakach. Oczywiście są różne metody kompresji, jeśli chodzi o rozmiar, ale oznaczałoby to, że można go umieścić w mysql minimalizując rozmiar na db. Następnie można go odczytać za pomocą 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

Wywołanie funkcji mysql_escape_string() przechodzącą w zmiennej, która przechowuje tekst HTML, takich jak:

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

zapewnia, że ​​znaki specjalne, takie jak cudzysłowy w tekście, nie spowodują błędu php, a baza danych zostanie pomyślnie zaktualizowana.

3

Jest to najlepszy sposób znalazłem addslashes()

$article_code = addslashes($article_code); 

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

użyj stripslashes, gdy chcesz używać tego kodu. –