Sven Rautenberg: & (PHP) Feldwert: Resource id #2

Beitrag lesen

Moin!

Ich möchte in einer Tabelle einen URL speichern. Die Spalte hat folgende Attribute:

Name: url
Typ: VARCHAR(255)
Kollation: utf8_general_ci
Attribute: NOT NULL, kein Standardwert, keine Extras, Volltext

Klingt alles normal - einzig die Feldlänge könnte dir mit 255 Zeichen eventuell zu kurz werden, URLs können durchaus auch länger sein. Das ist aber ein Detailproblem und kein grundsätzliches.

Versuche ich nun, 'http://www.example.org' zu speichern, enthält das Feld den Wert 'Resource id #2', ich möchte aber, dass wie in den anderen Feldern auch der URL im Klartext gespeichert wird.

Wie stellst du das fest? PhpMyAdmin?

Das Einfügen geschieht mittels PHP, hier mal der relevante gekürzte Teil:

Zuviel gekürzt, dein Code endet mit dem Erstellen des SQL-Statements, zeigt aber nicht, wie die Datenbank davon Kenntnis erhält.

  

> if(!isUTF8($_POST['link'])) {  
>   $link = utf8_encode($_POST['link']);  
> }  
> else {  
>   $link = $_POST['link'];  
> }  
  
// Das sieht irgendwie schrill aus. Weißt du nicht, ob du UTF-8 kriegst, dann solltest du das lieber exakt definieren - in deinem Formular. Alles andere ist ziemlich schwachsinnig. utf8_encode wandelt von ISO-8859-1 nach UTF-8 - was natürlich nur richtig funktioniert, wenn du wirklich ISO-8859-1 erhälst, ansonsten zerstört es dir so oder so den Textinhalt.  
  

> if(get_magic_quotes_gpc()) {  
>   $link = addslashes($link);  
> }  
  
// Das ist nun mal komplett falsch. Wen magic_quotes_gpc gesetzt ist, willst du stripslashes() machen, um diesen Effekt wieder rückgängig zu machen. Und du willst das auch als allerallererstes machen, noch vor irgendeinem UTF-8-Gedöns.  
  

> $query = "INSERT INTO news SET url=_utf8'$link'";  
  
// Und hier fehlt noch mysql_escape_string() oder mysql_real_escape_string(), welches auf $link angewendet wird. DAS IST DAS WICHTIGSTE!  
  
// Und wie erwähnt, fehlt der Code, um den SQL-String in die DB zu kriegen.  

- Sven Rautenberg

--
My sssignature, my preciousssss!