Inhalt eines Textfeldes als PhP Datei speichern

erixschueler

Cadet 1st Year
Registriert
Juni 2014
Beiträge
9
Hi. Ich hab erneut ein Problem mit meinen Script. Ich hab immernoch meine Tabelle in meiner Datenbank (interpret, album, song, url). Das Eintragen in die Datenbank sowie die Kontrolle ob der song bereits existiert klappt hervorragend. Allerdings hab ich jetzt ein anderes kleines Problem.
Und zwar möchte ich bei dem Klick auf einen Button die Überprüfung ob der Song bereits in der Datenbank gespeichert ist ablaufen lassen. Ist er vorhanden soll eine Fehlermeldung kommen. Ist er allerdings nicht vorhanden soll sich ein Textfeld (textarea) öffnen indem man etwas hereinschreiben kann, was gleichzeitig mit einem Klick auf einem zweiten Button in eine neue php-datei gespeichert wird. Außerdem soll parallel dazu noch die Daten (interpret, album, song, url) in die Datenbank eingetragen werden. Mein Script funktioniert jetzt derweil so, dass ich beim klicken auf dem ersten Button überprüfe ob der song bereits in der Datenbank steht und leider wird dieser falls er noch nicht exestiert auch in die Datenbank eingetragen. Nach dem Klick auf dem ersten Button öffnet sich das Textfeld, kann allerdings keine Datei anlegen da die oben definierten Variablen $interpreter,... nihct mehr vorhanden sind und das wie man im nachfolgenden php script sieht von einander abhängig ist. Ich habe es bereits mit session verscuht aber hab da nicht wirklich durchgeblickt. Ich hoffe das war eigenermaßen verständlich.

PHP:
<?php
session_start();

	
	$interpret = ucwords($_SESSION["interpret"]);
	$album = ucwords($_SESSION["album"]);
	$song = ucwords($_SESSION["song"]);
	$interpret = str_replace(' ', '-', $interpret);
	$album = str_replace(' ', '-', $album);
	$song = str_replace(' ', '-', $song);
	
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
	
    <table width="200" border="0">
  <tr>
    <td>Interpret:</td>
    <td><input type="text" name="interpret" /></td>
  </tr>
  <tr>
    <td>Album:</td>
    <td><input type="text" name="album" /></td>
  </tr>
  <tr>
    <td>Song:</td>
    <td><input type="text" name="song" />
    
    </td>
  </tr>
  

</table>

 <br />
    <input type="submit" value="Speichern" />
</form>
<?php
trim ( $interpret );
if ( empty ( $interpret ) ) {
   echo "Interpret leer<br>";
}
trim ( $album );
if ( empty ( $album ) ) {
   echo "Album leer<br>";
}

trim ( $song );
if ( empty ( $song ) ) {
   echo "Song leer";
}


else {
  
$verbindung = mysql_connect ("localhost", "name", "pw")
	or die ("Fehler im System");
	
	mysql_select_db ("name")
	or die ("Verbindung war nicht möglich.");
	
	$control = 0;
	$abfrage = "SELECT interpret FROM Lieder WHERE interpret = '$interpret'";
	$ergebnis = mysql_query ($abfrage);
	while($row = mysql_fetch_object($ergebnis))
		{
			$control++;
	}
if ($control !=0) {
	echo "Dieser Song exestiert bereits in unserer Datenbank.";}
	
	else {
	?>
	
	<textarea name="text"></textarea>
<?php
$text = $_POST['text'];
$file = 'band/$interpret/$album/$song.php';
file_put_contents($file, $text);

	
	$eintrag = "INSERT INTO Lieder
	(interpret, song, album, url)
	
	VALUES
	('$interpret', '$song', '$album', 'band/$interpret/$album/$song.php')";
	
	$eintragen = mysql_query($eintrag);
	
	if ($eintragen == true) {
		echo "Vielen Dank.";}
}}

session_destroy();
?>

Ich hoffe ihr könnt mir helfen, da ich mit meinen Latein am Ende bin.
 
Moin,

das mit den Sessionvariablen wird so auch nicht funktionieren, alleine deswegen schon nicht, weil Du die ja am Ende löscht, so mit sind die beim nächsten Aufruf ja auch gar nicht mehr da, allerdings setzt Du die Session ja nicht mal.

Mein Tipp, nimm erstmal session_start und session_destroy raus und ersetze $_SESSION durch $_POST, dann sollten zumindest Deine Variablen nicht mehr leer sein.

Das die Daten trotzdem in die DB geschrieben werden ist ja auch nach dem Skript richtig so, da die ELSE-Schleife der $control != 0 aufgeführt wird und diese enthält das Datei erzeugen und das INSERT.

Außerdem wird das Erzeugen der Datei auch nur klappen, wenn die Verzeichnisse schon entsprechend exisitieren, dort sollte vorher noch eine Abfrage rein und um diese dann ggf. anlegen lassen.

Die Textaera steht außerdem ausserhalb des <form>.

Das sind nur ein paar Ansätze und schau Dir die PHP-Fehlerausgaben an, da werden noch einige Hinweise bezüglich Variablen drin sein.
 
Zuletzt bearbeitet:
Welchen Sinn soll es eigentlich haben, dass du wüsten Text in einer .php - Datei speicherst? Das macht nur Sinn, wenn du z.B. dynamisch eine config.php manipulierst, wie es z.B. die Installer von CMS & Shopsystemen oft machen. Für alles andere ist das, was du da tust, in erster Linie ein gewaltiges Sicherheitsleck.

Ansonsten fehlts hier hinten und vorn an Grundlagen.
1.) Wenn du innerhalb einer Seite "Prüfe, dann zeige Eingabe" durchführen willst, dann geht das wahlweise über eine Kombination aus $_POST und $_SESSION, oder aber (was deutlich sinnvoller ist), über AJAX.
2.) Befass dich mal mit PHP Data Objects. Die Art, wie du auf die Datenbank zugreifst, ist nicht nur veraltet sondern auch hochgradig unsicher. Das heißt: Vergiss alles, was du bisher in der Richtung gemacht hast. Streich den ganzen "mysql_..."-Mist aus deinem Gedächtnis. Fang mit PDO neu an, so wird heute gearbeitet. PDO mit Prepared Statements ist: übersichtlicher, flexibler, erweiterbarer, sicherer, schneller,...
 
Zurück
Oben