MySQL Fehler bei Hochstrich

iProfi

Grünschnabel
Hallo,
bin noch ein frischer MySQL Anfänger und habe auch gleich das erste (zweite) Problem.
Hab ein Textfeld, wenn ich dort was eingebe und auf Speichern klicke ist auch alles in der MySQL Datenbank gespeichert.
Wenn ich nun aber in dem Textfeld einen Hochstrich eingebe (z.B. des Blog's) zeigt MySQL einen Fehler an:

Code:
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 ''des Blog'' WHERE `SPALTE` = ''' at line 1

Habe in dem Textfeld "des Blog's" eingegeben.

Hier der Code:

Code:
<body background="pinstripes.png">
<form action="text_schreiben.php" method="post" name="form1" class="text"> 
<p><? echo $textbearbeiten; ?> editieren<br> 
<textarea name="text" cols="70" rows="15" wrap="OFF" id="text">
 
<?php 
$ergebnis = mysql_query("SELECT * FROM `TABELLENNAME` WHERE `SPALTE` = '$theme'") or die(mysql_error());
while($row = mysql_fetch_object($ergebnis))
$text = $row->$spalte;
$umlaute = array("ä", "ö", "ü","Ä","Ö","Ü","ß");
$htmlbuchstaben = array("&auml;", "&ouml;", "&uuml;","&Auml;","&Ouml;","&Uuml;","ss");
$text = str_replace ($umlaute,$htmlbuchstaben,$text);
echo $text;
?>

Wenn ich in einer URL z.B. auch einen Hochstrich eingebe (index.php?theme=')
Kommt dann folgender Error:

Code:
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 '.deb'' at line 1

Hier auch der Code:
Code:
<?php
$standart = "$themename";
$ergebnis = mysql_query("SELECT * FROM `downloads` WHERE `filename` = '$themefile'") or die(mysql_error());
while($row = mysql_fetch_object($ergebnis))
$text = $row->displayname;

if ($text == "") {
mysql_query("UPDATE `downloads` SET `displayname` = '$standart' WHERE `filename` = '$themefile'");
echo "$standart";
}else{
	echo "$text";
}
?>

Weiß leider momentan nicht weiter. Habe schon viel gesucht...noch nichts richtiges gefunden...
Hoffe ihr könnt mir helfen.

Gruß & Danke
iProfi
 
Mit einem Hochstrich beendest du ja den String im SQL-Query.

Gegen solche Probleme nutzt man [phpf]mysql_real_escape_string[/phpf].
Übrigens kann man so auch andere Befehle wie DROP TABLE [tbl] einschleusen!
 
Hallo,
Danke für deine Antwort.
Habe es nun nach langem Suchen so hinbekommen:

Code:
$umlaute = array("ä", "ö", "ü","Ä","Ö","Ü","ß","'");
$htmlbuchstaben = array("&auml;", "&ouml;", "&uuml;","&Auml;","&Ouml;","&Uuml;","ss","&apos;");

Aber nur mein 1. Problem ist gelöst.

Das zweite ist immer noch da..
Werde mal deinen Vorschlag ausprobieren....Danke!

Gruß
iProfi

EDIT:
Sorry, aber wo muss mysql_real_escape_string(); hin?
In etwa so?

Code:
<?php
$standart = "$themename";
$ergebnis = mysql_query("SELECT * FROM `downloads` WHERE `filename` = '$themefile'") or die(mysql_error());
while($row = mysql_fetch_object($ergebnis))
$text = $row->displayname;
mysql_real_escape_string($themename)
 
if ($text == "") {
mysql_query("UPDATE `downloads` SET `displayname` = '$standart' WHERE `filename` = '$themefile'");
echo "$standart";
}else{
    echo "$text";
}
?>

Oder habe ich wieder was falsch gemacht? :/
 
Zuletzt bearbeitet:
So:
PHP:
<?php 
$theme = mysql_real_escape_string($theme);
$ergebnis = mysql_query("SELECT * FROM `TABELLENNAME` WHERE `SPALTE` = '$theme'") or die(mysql_error());
while($row = mysql_fetch_object($ergebnis))
$text = $row->$spalte;
$umlaute = array("ä", "ö", "ü","Ä","Ö","Ü","ß");
$htmlbuchstaben = array("&auml;", "&ouml;", "&uuml;","&Auml;","&Ouml;","&Uuml;","ss");
$text = str_replace ($umlaute,$htmlbuchstaben,$text);
echo $text;
?>
und
PHP:
<?php
$standart = "$themename";

$themefile = mysql_real_escape_string($themefile);
// "Standard" schreibt man übrigens mit D
$standart = mysql_real_escape_string($standart);

$ergebnis = mysql_query("SELECT * FROM `downloads` WHERE `filename` = '$themefile'") or die(mysql_error());
while($row = mysql_fetch_object($ergebnis))
$text = $row->displayname;
mysql_real_escape_string($themename)
 
if ($text == "") {
mysql_query("UPDATE `downloads` SET `displayname` = '$standart' WHERE `filename` = '$themefile'");
echo "$standart";
}else{
    echo "$text";
}
?>
Denn sonst wird ja der neue Wert, der von [phpf]mysql_real_escape_string[/phpf] zurückgegeben wird, nicht zugewiesen und die Variable bleibt unverändert.
 
Hallo und vielen Dank schonmal!
Leider zeigt mir das Ganze nun eine leere Seite an.
Werde natürlich nochmal nachgucken was ich da falsch gemacht habe.
Trotzdem vielen Dank!

Gruß
iPr0fi
 
Setzte dann an den Anfang deines Scriptes einmal folgendes:
PHP:
ini_set('display_errors', 1);
error_reporting(E_ALL);

Damit aktivierst du Fehlermeldungen.
 
Zurück