webentwicklung-frage-antwort-db.com.de

Einfügen von HTML-Code in eine MySQL-Tabelle

Ich verwende Joomla, um eine Website zu verwalten ... und ich entwickle eine eigenständige PHP-Anwendung, die Daten in die von Joomla verwendeten Tabellen einfügt und ändert, um die HTML-Dateien von Webseiten zu speichern, die dynamisch erstellt werden.

So funktioniert es: Ich verwende eine Joomla-Komponente, um Inhalte zu erstellen, und der HTML-Code dieser Artikel wird in einem Feld in einer Tabelle, z. B. content_table, von Joomla gespeichert. Dieser HTML-Code wird später abgerufen, um einen Teil einer Webseite zu erstellen.

Ich möchte dasselbe mit meiner Standalone-App tun ... Das heißt, den in content_table abgelegten HTML-Code hinzufügen, der später von Joomla abgerufen werden kann, um den Teil der Seite zu erstellen.

Das Problem ist: Der HTML-Code hat natürlich viele einfache und doppelte Anführungszeichen und dies stellt ein Problem beim Einfügen in die Datenbank dar. Ich habe es mit mysql_escape_string () versucht und bekomme immer noch Syntaxfehler.

Ich kann addslashes () verwenden, aber da joomla selbst den Code später abruft, ist es nicht möglich, striplashes () zu verwenden, während er später abgerufen wird.

Gibt es sowieso ich kann den HTML-Code das Feld der Tabelle hinzufügen ...

Danke für eure Vorschläge ... !!

Edit: Nach dem Hinzufügen von mysql_escape_string () bekomme ich 

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

Dies ist meine Frage: 

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

Die Eingabezeichenfolge lautet wie folgt: 

 $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>';
13
SpikETidE

Nun..Debugged es .. Stellt sich heraus, dass das Problem doch nicht mit der Escape-Funktion war ...

Überprüfen Sie die Abfrage:

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

Sie können das 'Volltext'-Feld sehen ... Anscheinend ist das Wort "Volltext" ein Mysql-Schlüsselwort ... Um genau zu sein, handelt es sich um einen Feldtyp wie TEXT, INT, MEDIUMTEXT usw.

Ich habe die Abfrage darauf geändert

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

Und voila ... !!!! 

2
SpikETidE

Ich bevorzuge es, Code vor dem Einfügen in eine Datenbank in eine normale Zeichenfolge zu konvertieren. Ich denke, es ist das sicherste Szenario. Erwägen Sie die Verwendung dieses Codes:

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

Wenn Sie diesen Code also wieder verwenden möchten, dekodieren Sie ihn einfach mit base64_decode. Ich empfehle Ihnen, den Datentyp 'text' zum Speichern von $ article_code anstelle von 'varchar' zu verwenden.

27
iroel

Sie sollten keine Schrägstriche brauchen. Das einzige Problem, das bei normalen Einfügungen zu Problemen führt, sind die Anführungszeichen, und mysql_escape_string() sollte mit Ausnahme von Zeichensatzproblemen umgehen. Versuchen Sie es auch mit mysql_real_escape_string().

Beachten Sie außerdem, dass das Speichern von rohem, vom Benutzer angegebenem HTML-Code in der Datenbank zu Sicherheitsproblemen führen kann. Verwenden Sie stattdessen so etwas wie bbcode oder markdown.

Dies ist der beste Weg, den ich gefunden habe addslashes() 

$article_code = addslashes($article_code);

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

Nur zur Bestätigung sieht Ihre Abfrage so aus:

$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).'"
";
1
K Prime

fulltext ist ein vordefiniertes mysql-Schlüsselwort. Bitte verwenden Sie Acute (`) oder einfaches Anführungszeichen (')

Hier ist Code - 

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

Ich hatte das gleiche Problem, ich habe es mit regulären Ausdrücken behoben. Sie können so etwas wie folgt verwenden: $target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';

und dann die Funktion preg_replace() verwenden:

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>
1
Waiyl Karim

wenn Sie sich Sorgen um den Platz machen und die hier beschriebene 64-Encodierungsmethode verwenden, können Sie den Befehl gzdeflate in PHP verwenden, um ihn zu reduzieren und dann zu codieren. Hier ist ein kleines Testskript für einige generierte Beispielzeichen. Offensichtlich gibt es verschiedene Komprimierungsmethoden, die Sie prüfen sollten, wenn Sie sich mit der Größe beschäftigen. Dies würde jedoch bedeuten, dass Sie sie in mysql verwenden könnten, um die Größe der Datenbank zu minimieren. Sie könnten es dann mit gzinflate (base64_decode (...)) zurücklesen.

<?php
//generate sample chars for the example
function generateRandomString($length = 10000) {
    $characters = '01234"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
Rob Smart

Beim Aufruf der Funktion mysql_escape_string () wird die Variable übergeben, die den HTML-Text enthält:

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

stellt sicher, dass die Sonderzeichen wie Anführungszeichen im Text keinen PHP-Fehler verursachen und die Datenbank erfolgreich aktualisiert wird.

0
user3053637

fügen Sie den HTML-Code in die Datenbank ein

$title = $_POST['title'];
$code = '<h1>hello</h1></p>this html tage</p>';
$htmlcode = addslashes($code);

 $query = "INSERT INTO `template` (`title`,`code`) VALUES ('".$title."','".$htmlcode."');"; 
mysqli_query($con,$query);

nachdem Sie Daten in die Datenbank eingefügt haben, zeigen Sie die Daten in der Auflistungsseite an

$result = mysqli_query($con,'SELECT * FROM template');                                  
while($row = mysqli_fetch_assoc($result)) {

 echo htmlentities($row['code']);

}
htmlentities($row['code']); //here your row name;
0
nirali