Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Editierung per Textarea

Frage Entwicklung PHP

Mitglied: Mitchell

Mitchell (Level 2) - Jetzt verbinden

11.05.2012, aktualisiert 18.05.2012, 5138 Aufrufe, 13 Kommentare

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 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:

01.
<p>W&auml;le den zu bearbeitenden Text</p><br> 
02.
	<form action="" method="post"> 
03.
	<select name="texte" size="1"> 
04.
		<option value="text1.php">Einleitung</option> 
05.
		<option value="text2.php">Unterschriftenaktion</option> 
06.
		<option value="text3.php">Datenschutz</option> 
07.
	</select> 
08.
	<input type="submit" value="W&auml;hlen"> 
09.
	</form>
01.
<?php 
02.
text_edit(); 
03.
?>
nun die Funktion:

01.
	$ausgabe = $_POST['ausgabe']; 
02.
	$auswahl = $_POST['texte']; 
03.
	$editieren = $_POST['edit']; 
04.
	$text = $_POST['aenderung']; 
05.
 
06.
 
07.
	$out_sql = mysql_query("SELECT inhalt, datum, datei FROM kf_texte WHERE file = '$auswahl' ORDER BY change_date DESC"); 
08.
	$text_out= mysql_fetch_array($out_sql); 
09.
 
10.
	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>"
11.
 
12.
// bis hier hin läufts :-) 
13.
 
14.
	if ($editieren == 'Ändern') 
15.
	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
Mitglied: nxclass
11.05.2012 um 14:19 Uhr
man könnte es mit einem Hidden Formular Feld durch reichen
01.
echo '<form  ....   ><input type="hidden" name="texte" value="'.$auswahl.'"> ....  ';
btw. http://de.wikipedia.org/wiki/SQL-Injection
Bitte warten ..
Mitglied: SlainteMhath
11.05.2012 um 14:24 Uhr
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

lg,
Slainte
Bitte warten ..
Mitglied: Mitchell
11.05.2012 um 18:47 Uhr
@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

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Mitglied: nxclass
11.05.2012 um 18:58 Uhr
Auch das hidden Formular ist natürlich beim Absenden des Formulares weg
.. Zauberei.

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

Evtl. solltest Du deinen Code mal etwas umbauen, so dass erst die Daten verarbeitet werden und erst am Schluss die Ausgabe erfolgt.
Bitte warten ..
Mitglied: Mitchell
12.05.2012 um 12:43 Uhr
.. Zauberei.

ich mag dich auch :-P

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

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Mitglied: nxclass
12.05.2012 um 15:43 Uhr
es soll am Schluss aber gar keine Ausgabe erfolgen, also was soll ich hier umbauen?
01.
// 1 - prüfen ob Formular Daten gesendet wurden und diese in der DB speichern 
02.
// 2 - prüfen ob Formulardaten aus der DB geholt werden müssen und Daten holen 
03.
// 3 - Formular mit den Daten darstellen (oder auch nicht)
Bitte warten ..
Mitglied: Mitchell
12.05.2012 um 21:02 Uhr
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?

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

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Mitglied: nxclass
12.05.2012 um 23:38 Uhr
... 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.
Bitte warten ..
Mitglied: Mitchell
13.05.2012 um 19:25 Uhr
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 . 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

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Mitglied: nxclass
14.05.2012 um 20:24 Uhr
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 )
01.
echo <<<__HTML__ 
02.
<form action="" name="aenderung" method="post"> 
03.
	<input type="hidden" name="datei" value="$datei" /> 
04.
	<input type="submit" name="action" value="&Auml;ndern" /> 
05.
	<p> <textarea name="ausgabe" cols="105" rows="30">$text</textarea> </p> 
06.
</form> 
07.
__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.
!?
Bitte warten ..
Mitglied: Mitchell
15.05.2012 um 17:24 Uhr
kopf > tisch | auuuuuuuuuuuuutttttttttsssssssscccccccchhhhhhhhhhh

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

01.
$textwahl = $_POST['textauswahl']; 
02.
 
03.
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>"
04.
	if ($editieren == 'Ändern'
05.
	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.

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Mitglied: nxclass
15.05.2012 um 21:42 Uhr
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.
Bitte warten ..
Mitglied: Mitchell
16.05.2012 um 08:37 Uhr
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

Mit freundlichen Grüßen
Mitchell
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...