Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Mitchell

Mitchell (Level 2) - Jetzt verbinden

11.05.2012, aktualisiert 18.05.2012, 5501 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

Mfg
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?

Mfg
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

Mfg
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

Mfg
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.

Mfg
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

Mfg
Mitchell
Bitte warten ..
Ähnliche Inhalte
PHP

MySQL Abfrage aus Textarea ausführen und anzeigen.

gelöst Frage von MrHToastPHP2 Kommentare

Hallo, ich habe die Aufgabe eine HTML Seite zu erstellen. Mit der man eine variable MySQL Abfrage ausführen kann, ...

JavaScript

Textarea mit java und vbs zum sprechen bringen also ich will dass der Text dehn ich in die Textarea eingebe mit voise vbs oder java voise spricht

gelöst Frage von KekeheldtJavaScript16 Kommentare

<html><head> <body> <script Language="vbscript" Type="Text/vbscript" Function 5() Set Objvoice = CreateObject("sapi.spvoice") Set objFile = CreateObject("sapi.spFileSream.1") Objvoice.speak text Text = ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 1 TagSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit18 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing17 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...