PHP Link in Datenbank speichern

Spliffy83

Cadet 4th Year
Registriert
Feb. 2013
Beiträge
74
Moin!
Ich versuche mich gerade mal wieder ein bisschen in PHP, html, css und bin ziemlich schnell an einem Problem hängen geblieben:
Auf meiner Seite habe ich ein html-Formular in welches man in ein Textfeld den Namen für ein neues Thema eingeben können soll $_POST["Themen_Name"]). Wenn man dieses Formular dann abschickt wird aus dem eingegebenem Text ein Link generiert der dann in die Datenbank geschrieben werden soll. Das funktioniert jedoch nicht.
Wie im Screenshot rot markiert zu sehen, wird der Link jedoch richtig aufgebaut. Eben nur nicht in die Datenbank gespeichert.

Trage ich einen solchen Link manuell über phpmyadmin in die Datenbank ein funktioniert es.
Baue ich das Skript um, sodass nur die Variablen $Themen_Name_Raw1 und $Themen_Name_Raw2 in die Datenbank geschrieben werden klappt es. als: $Themen_Name = $Themen_Name_Raw1 . Themen_Name_Raw2;

Das Problem muss demnach schon beim Eintrag in die Datenbank ($sql) liegen. Denke ich zumindest^^'


PHP:
$Themen_Name_Raw1 = str_replace(" ", " ", $_POST["Themen_Name"]);
$Themen_Name_Raw2 = str_replace(" ", "+", $_POST["Themen_Name"]);
$Themen_Name = "<a href='?Site=" .  $Themen_Name_Raw2 . "'>" . $Themen_Name_Raw1 . "</a>";	
$Themen_Autor = $_SESSION["User_ID"];

$sql = "INSERT INTO Themen "
	. "(`Themen_Name`, `Themen_Ordnung`, `Themen_Autor`) values " 
	. "('" . $Themen_Name . "', "
	. "'" . 1 . "', "
	. "'" . $Themen_Autor . "')";


mysqli_query($con, $sql);
echo $Themen_Name;
echo $Themen_Name_Raw1;
echo $Themen_Name_Raw2;

Die Tabelle Themen besteht aus den Spalten:
Themen_ID INT Auto Increment
Themen_Name Varchar 256
Themen_Ordnung INT
Themen_Autor INT


Ich hoffe ich konnte mein Problem einigermaßen verständlich erklären und bedanke mich schon einmal für konstruktive Beiträge und Kritik : )
Falls ich nicht schon im ersten Post auf einen dummen Fehler hingewiesen werde xD

LG
Spliffy


mysite.png
 
Zuletzt bearbeitet: (Formatierung...)
Zunächst einmal ist es bei sowas immer hilfreich, sich die Fehlermeldung bei der Ausführung von mysqli_query() ausgeben zu lassen:
Code:
mysqli_query($con, sql);
var_dump(mysqli_error($con));
die();

Ich sehe in der SQL-Abfrage an sich keinen Fehler.

Darüber hinaus gibt es da mehrere Dinge, die du beachten solltest:

1. Du ermöglichst SQL-Injections: https://secure.php.net/manual/de/security.database.sql-injection.php
Besser, wenn du Prepared Statements nutzt.
2. Ich würde keinen Link generieren, sondern nur die Daten für den Link in die DB schreiben - es kann ja schließlich sein, dass du evtl. später das Linkformat anpassen möchtest.
 
Du musst den SQL-String escapen, weil darin Hochkommata ' enthalten sind (Zeile 8 verweist ja auf $Themen_Name, darin wiederum ist bei href=' ein Hochkomma enthalten, dadurch entsteht ein Syntax Error).

PHP:
$Themen_Name_Raw1 = str_replace(" ", "&nbsp;", $_POST["Themen_Name"]);
$Themen_Name_Raw2 = str_replace(" ", "+", $_POST["Themen_Name"]);
$Themen_Name = "<a href='?Site=" .  $Themen_Name_Raw2 . "'>" . $Themen_Name_Raw1 . "</a>";	
$Themen_Autor = $_SESSION["User_ID"];
 
$sql = "INSERT INTO Themen "
	. "(`Themen_Name`, `Themen_Ordnung`, `Themen_Autor`) values " 
	. "('" . mysqli_real_escape_string($Themen_Name) . "', "
	. "'" . 1 . "', "
	. "'" . mysqli_real_escape_string($Themen_Autor) . "')";
 
 
mysqli_query($con, $sql);
echo $Themen_Name;
echo $Themen_Name_Raw1;
echo $Themen_Name_Raw2;
 
@CryNickSystems
zu Punkt1: da das Ganze nur auf einem Raspi im Heimnetzwerk läuft habe ich mir um Injections ehrlich gesagt keine Gedanken gemacht^^' Aber du hast Recht, der Sauberkeit halber werde ich das noch einbringen.

Zu Punkt2: ok klar macht auch mehr Sinn auch den "richtigen" Namen in die Db aufzunehmen und nicht nur den direkten Link.

@Benj
Oha jetzt wo du es sagst. Ich fürchte das wäre mir im Leben nicht aufgefalllen^^'

Danke euch!
 
Zurück
Oben