mitchell
Goto Top

Editierung per Textarea

Textarea bekommt Daten über DB, diese sollen editiert und wieder abgespeichert werden

Hallo Freunde der Kunst,

ich habe mal wieder ein Problem, weiß aber diesmal wenigstens schonmal, woran es liegt face-smile Ist auch wirklich dumm, ich komm nur einfach nicht drauf...naja, vielleicht landets ja in LSW Beiträgen des Jahres.

Wie oben kurz beschrieben, habe ich Texte in einer (MySql)Datenbank, welche zum Bearbeiten in eine Textarea geladen werden. So weit, so gut. Das nochmalige Abspeichern bereit mir aber irgendwie Probleme...Lösung sollte aber simpel sein, ich seh sie nur nicht.

Tabellenstruktur: id | inhalt | datum | datei

In der admin.php ist das erste Formular + Funktionsaufruf:

<p>W&auml;le den zu bearbeitenden Text</p><br>
	<form action="" method="post">  
	<select name="texte" size="1">  
		<option value="text1.php">Einleitung</option>  
		<option value="text2.php">Unterschriftenaktion</option>  
		<option value="text3.php">Datenschutz</option>  
	</select>
	<input type="submit" value="W&auml;hlen">  
	</form>
<code="php">
<?php
text_edit();
?>


nun die Funktion:

	$ausgabe = $_POST['ausgabe'];  
	$auswahl = $_POST['texte'];  
	$editieren = $_POST['edit'];  
	$text = $_POST['aenderung'];  


	$out_sql = mysql_query("SELECT inhalt, datum, datei FROM kf_texte WHERE file = '$auswahl' ORDER BY change_date DESC");  
	$text_out= mysql_fetch_array($out_sql);

	echo "<form action='' name='aenderung' method='post'><input name='edit' type='submit' value='&Auml;ndern'><p><textarea name='ausgabe' cols='105' rows='30'>".html_entity_decode($text_out['inhalt'])."</textarea></p></form>";  

// bis hier hin läufts :-)

	if ($editieren == 'Ändern')  
	mysql_query("UPDATE tbl SET inhalt='$ausgabe', datum=NOW() WHERE datei= '$auswahl'");  

Was funktioniert nicht und warum?
Das Abspeichern, wie oben schon gesagt, aus folgendem Grund: Sobald ich auf "Ändern" klicke, ist natürlich die Variable $auswahl weg und damit die Datei, mit der sich die WHERE Klausel befassen kann.
Mein Problem: Wie bekomme ich das Formular dazu, die Variable $auswahl beizubehalten oder zumindest zu sagen "du speicherst nun den Text, der in der Textarea steht"?

Ich danke schonmal für eure Hilfe

Gruß
Mitchell

Content-Key: 184870

Url: https://administrator.de/contentid/184870

Printed on: April 18, 2024 at 04:04 o'clock

Member: nxclass
nxclass May 11, 2012 at 12:19:04 (UTC)
Goto Top
man könnte es mit einem Hidden Formular Feld durch reichen
echo '<form  ....   ><input type="hidden" name="texte" value="'.$auswahl.'"> ....  ';  

btw. http://de.wikipedia.org/wiki/SQL-Injection
Member: SlainteMhath
SlainteMhath May 11, 2012 at 12:24:47 (UTC)
Goto Top
Moin,

.... type='submit' value='&Auml;ndern'> ....
if ($editieren == 'Ändern')
bau hier doch mal ein "echo $editieren" ein


$ausgabe = $_POST['ausgabe'];
mysql_query("UPDATE tbl SET inhalt='$ausgabe' ....
Und hier wieder mein Liebliengs PHP-Thema SQL injection face-smile

lg,
Slainte
Member: Mitchell
Mitchell May 11, 2012 at 16:47:44 (UTC)
Goto Top
@nxclass: Hatte ich anfangs auch, bringt aber genau das selbe. Auch das hidden Formular ist natürlich beim Absenden des Formulares weg.

@slan...: Ich habe schon alle Variablen durchexerziert, aber wenns dich weiterbringt ^^. Die Ausgabe von $editeren bringt mir ein "'Ändern" (nach Abschicken des Editbuttons natürlich).

Zu euren Injektions...auf was bezieht ihr das, die Variablen? Keine Angst, vor dem Update wird $ausgabe natürlich noch durch htmlentities und mysql_real_escape geschickt face-smile

Mfg
Mitchell
Member: nxclass
nxclass May 11, 2012 at 16:58:14 (UTC)
Goto Top
Auch das hidden Formular ist natürlich beim Absenden des Formulares weg
.. Zauberei.

... schade das die OO Programmierung schon wieder aus der Mode ist. face-wink

Evtl. solltest Du deinen Code mal etwas umbauen, so dass erst die Daten verarbeitet werden und erst am Schluss die Ausgabe erfolgt.
Member: Mitchell
Mitchell May 12, 2012 at 10:43:12 (UTC)
Goto Top
.. Zauberei.

ich mag dich auch :-P

es soll am Schluss aber gar keine Ausgabe erfolgen, also was soll ich hier umbauen?

Mfg
Mitchell
Member: nxclass
nxclass May 12, 2012 at 13:43:49 (UTC)
Goto Top
es soll am Schluss aber gar keine Ausgabe erfolgen, also was soll ich hier umbauen?
// 1 - prüfen ob Formular Daten gesendet wurden und diese in der DB speichern
// 2 - prüfen ob Formulardaten aus der DB geholt werden müssen und Daten holen
// 3 - Formular mit den Daten darstellen (oder auch nicht)
Member: Mitchell
Mitchell May 12, 2012 at 19:02:13 (UTC)
Goto Top
Es geht doch darum, dass ich eine Variable erhalten will, da gibts vorher nichts zu prüfen. Auch nicht, ob die Formulardaten aus der DB geholt werden müssen, weil das ja definitiv der Fall ist.

Der User hat sein Dropdown, dort wählt er den Text zum Editieren. Sobald er diesen ausgewält hat, wird dieser angezeigt, also die Daten aus der DB genommen. Nun soll der editierte Text neu abgespeichert werden...hab ich mich falsch ausgedrückt am Anfang? face-smile

Außerdem hattest du doch schon vorgeschlagen, es mit einem hidden-field durchzureichen...was halt nicht klappt. Die Antwort ".. Zauberei." lässt mich irgendwie denken, dass du das wusstest :-P

Mfg
Mitchell
Member: nxclass
nxclass May 12, 2012 at 21:38:52 (UTC)
Goto Top
... ok - zum Verständnis: Dein Script wird 3-mal durchlaufen

1
  • Anzeige des "W&auml;le den zu bearbeitenden Text" - Formulars

2
  • Auswahl empfangen
  • Daten aus der DB holen
  • und Anzeige des "Änderung" Formulars mit den Daten

3
  • Empfangen der Daten
  • Speichern der Daten
  • Formular wieder anzeigen oder zurück zum "W&auml;le den zu bearbeitenden Text" -Formulars oder was auch immer

... ich glaube das Punkt 3 fehlt - und um im Punkt 3 die Daten speichern zu können müsst Du aus 2. die ID ($auswahl) in einem hidden Feld durch schleifen.
Member: Mitchell
Mitchell May 13, 2012 at 17:25:02 (UTC)
Goto Top
Punkt 3 fehlt, korrekt. Leider geht dein Plan so nicht ganz auf...$auswahl wird ja bei Punkt 2 schon durchgeschleift, zwar nicht in einem hidden Feld, aber es passiert face-smile. So, nun sind die Daten von $auswahl also da und mir wird auch ordentlich z. B. "text 2" angezeigt. Sobald ich aber nun auf "Ändern" klicke, ist die Variable $auswahl weg und das UPDATE funktioniert natürlich nicht mehr.

Nach dem Abschicken des geänderten Formulares gibt es logischerweise nur noch zwei Variablen, und zwar

- $edititeren | mit der ausgabe "Ändern"
und
- $ausgabe | mit dem geänderten Text

Mfg
Mitchell
Member: nxclass
nxclass May 14, 2012 at 18:24:45 (UTC)
Goto Top
zwar nicht in einem hidden Feld, aber es passiert
... na wie auch immer - ist ja nicht so wichtig

Nach dem Abschicken des geänderten Formulares gibt es logischerweise nur noch zwei Variablen, und zwar
... dann solltest Du evtl doch mal dem Formular ein Hidden-Input Feld spendieren, und es mit der Variablen $auswahl füllen.
( und wieso $auswahl - ist ist doch eher $datei ... ich bin echt verwirrt )
echo <<<__HTML__
<form action="" name="aenderung" method="post">  
	<input type="hidden" name="datei" value="$datei" />  
	<input type="submit" name="action" value="&Auml;ndern" />  
	<p> <textarea name="ausgabe" cols="105" rows="30">$text</textarea> </p>  
</form>
__HTML__;

BTW . da ich fasst am verzweifeln bin hab ich schon mal ein Script geschrieben dazu - mich wundert jetzt aber das deine SQL Statements
  • auf unterschiedliche Tabellen verweisen
  • $auswahl gegen unterschiedliche Datenfelder geprüft wird ( `datei` bzw `file` )
  • das es offenbar eine Art Versions-Kontrolle gibt für die Texte, aber Du beim speichern diese aktualisiert anstatt eine neue Version anzulegen.
!?
Member: Mitchell
Mitchell May 15, 2012 at 15:24:41 (UTC)
Goto Top
kopf > tisch | auuuuuuuuuuuuutttttttttsssssssscccccccchhhhhhhhhhh

Da könnt ich mir doch...danke für dein Script, seit gestern brauche ich es aber nicht mehr face-smile. Ich Depp habe dem falschen Formular das hidden Feld übergeben...dem mit dem Text-Select nämlich. So läufts dann endlich:

$textwahl = $_POST['textauswahl'];  

echo "<form action='panel.php' method='post'><input type='hidden' name='textauswahl' value=".$auswahl."><input class='panel_button' name='edit' type='submit' value='&Auml;ndern'><p><textarea name='ausgabe' cols='105' rows='30'>".$text_out['inhalt']."</textarea></p></form>";  
	if ($editieren == 'Ändern')  
	mysql_query("UPDATE tbl SET inhalt='$ausgabe', datum=NOW() WHERE datei = '$textwahl'");  

Tschuldige die Verwirrung, ich wars halt auch und konnte es nicht ändern ^^.

"auf unterschiedliche Tabellen verweisen" | wie meinst du das? Es werden 3 Tabellen verwenden (inhalt, datum, datei)
"$auswahl gegen unterschiedliche Datenfelder geprüft wird ( `datei` bzw `file` )" | ähm...nö, wo denn?
"das es offenbar eine Art Versions-Kontrolle gibt für die Texte, aber Du beim speichern diese aktualisiert anstatt eine neue Version anzulegen." | nein, eine Kontrolle findet nicht statt. Der Text wird so ausgegeben, wie er einst in der DB abgespeichert wurde. Beim Abspeichern gibts nur ein Update des eben editierten Textes, richtig.

Mfg
Mitchell
Member: nxclass
nxclass May 15, 2012 at 19:42:39 (UTC)
Goto Top
So läufts dann endlich
... gut das freut mich - und ich hoffe Du versucht mal mehr mit Objekten und MVC zu Arbeiten. Am Anfang wird dir das sicherlich als viel unnötige coderei vorkommen, aber man hat im Endeffekt eine bessere Struktur im Code.
Member: Mitchell
Mitchell May 16, 2012 at 06:37:23 (UTC)
Goto Top
Ich habe bei Klassen ehrlich gesagt noch nicht den richtigen Durchblick (Aufbau und Sinn sind mir aber bekannt ^^)...brings mir zwar bei, aber leider momentan wenig Zeit dafür. MVC halte ich irgendwie nichts von...bei kleinen Projekten wie diesen sehe ich den Nutzen nicht wirklich.

Danke nochmal für die Gedult...noch einer, dem ich ein Bier schulde face-smile

Mfg
Mitchell