thoomaas
Goto Top

PHP - MySQL-Ausgabe editieren

Hallo alle zusammen!

Ich bin gerade dabei ein Portal für meine Firma zu basteln. Hierbei sollen die User Protokolle aus Besprechungen speichern können.

Die Seite zeigt ganz oben immer zuerst die zu dieser Woche fälligen Protokollteile an. Das heißt, derzeit KW37. Nun soll man diese Ausgaben bearbeiten können.

Angenommen ich habe zu heute 5 fällige Ereignisse. Dann werden 5 Ereignisse angezeigt. Unter jedem Ereignis ist nun ein "bearbeiten" Button, jedoch ohne Funktion. Ich möchte erreichen, dass wenn man dort drauf drückt, dass man genau dieses Ereignis bearbeiten kann und mit einem klick auf "Ok" ("speichern" ist schon belegt) soll das ganze in der Datenbank aktualisiert werden.

Ich finde nichts passendes, welches ein ähnliches Verhalten herbeiführt. Viele lagern das aus in andere PHP Dateien etc.. Ist aber Aufbaubedingt nicht zu 100% möglich bei der Seite. Hier ist der Code von der Ausgabe:

<h2>Zu heute f&auml;llige Ereignisse</h2>
		<?php
			mysql_connect ('localhost', 'user', '123456');  
			mysql_select_db ($dbname);
			$ausgabe = "SELECT * FROM protocol WHERE falligkeitsdatum LIKE '$year-W$week'";  
			$db_erg = mysql_query($ausgabe);
			if (!$db_erg){
				die(mysql_error());
			}
			while ($td = mysql_fetch_array($db_erg, MYSQL_ASSOC)){
				echo "<div class='card'>";  
					echo "<div class='kategorie'><b>Kategorie</b><p>";  
						echo $td['kategorie'];  
					echo "</div>";  
					echo "<div class='zustandigkeit'><b>Zust&auml;ndigkeit</b><p>";  
						echo $td['zustandigkeit'];  
					echo "</div>";  
					echo "<div class='datum'><b>F&auml;lligkeitsdatum</b><p>";  
						echo $td['falligkeitsdatum'];  
					echo "</div>";  
					echo "<div class='lastprotokoll'>";  
						echo $td['content'];  
					echo "</div>";  
					echo "<div class='edit'>";  
						echo "<form action='' method='post'>";  
							echo "<input type='submit' class='edit-button' name='".$td['id']."' value='bearbeiten'/>";  
						echo "</form>";  
					echo "</div>";  
					echo "<div class='autor'>";  
						echo "Geschrieben von <a href='mailto:".$mail."?subject=Erinnerung&body=".$td['content']." Bitte%20klären!'>".$td['autor']."</a>";  
					echo "</div>";  
				echo "</div>";  
			}
		?>

Wenn ihr mehr Code braucht, kann ich noch mehr zur Verfügung stellen. Die Ausgabe funktioniert einwandfrei, jedoch das bearbeiten will nicht. Dieses Beispiel ist OHNE meine Versuche, die Bearbeitung zu implementieren.

DANKE!! face-smile

Gruß
Thoomaas

Content-ID: 282496

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

Ausgedruckt am: 16.11.2024 um 19:11 Uhr

Tjelvar
Tjelvar 10.09.2015 um 11:58:07 Uhr
Goto Top
Also ich habe das, wobei das eher die unsaubere Variante so gelöst, dass ich bei der Ausgabe quasi einen Link angebe, bei der dann die DatensatzID via $_GET mitgegeben wird, und ein bestätigungsfeld wie "edit=1" o.Ä. Anschließend habe ich ein if eingebaut dass eben jede Get abfragt und dann mit den daten arbeitet

		echo "<td width=\"150px\">";  
				printf("<a id=\"loeschen\" href=\"../func/lizenz_loeschen.php?uid=$row[5]&liz=1\">Lizenz Löschen</a>");  
			echo "</td>";  
			echo "<td width=\"200px\">";  
				printf("<a id=\"loeschen\" href=\"../func/lizenz_loeschen.php?uid=$row[5]&zuord=1\">Zuordnung löschen</a>");  
			echo "</td>";  
			echo "<td width=\"200px\">";  
				printf("<a id=\"loeschen\" href=\"../content/lizenz.php?uid=$row[5]&zuord=1\">Zuordnung bearbeiten</a>");  
			echo "</td>";  


Ich setzte also einen link auf die datei selbst lizenz.php dann zwei Get Parameter uid und liz/zuord <- die dienen mir für folgendes Formular als Schlüssel zum anzeigen

 if(isset($_GET["zuord"])){  
			if($_GET["zuord"] == 1){  
			$res = $mysqli->query("Select * from Lizenztyp");  
			$res2 = $mysqli->query("Select * from Mitarbeiternamen");  
			$res3 = $mysqli->query("Select LizSum.LizenzID, Liz.Lizenznummer, LizTyp.LizenztypName, LizSum.Lizenz_sumID from Lizenz_sum as LizSum left outer join lizenzen as Liz on LizSum.LizenzID = Liz.Lizenzid left outer join Lizenztyp as LizTyp on Liz.LizenztypID = LizTyp.LizenztypID");  
			$row2 = $res3->fetch_assoc();
			?>
			<form action="../func/lizenz_eintragen.php?updt=1" method="post">  
            <input type="hidden" name="lizenzid" id="lizenzid" value="<?php echo $row2["Lizenz_sumID"] ?>" />  
			<label for="lizenz">Lizenznummer</label>  
			<input type="text" id="lizenz" size="24" maxlength="50" name="lizenz" value="<?php echo $row2["Lizenznummer"]; ?>" /><br />  
			<label for="mitarbeiter">Mitarbeiter</label>  
             <input list="mitarbeiter" name="mitarbeiter">  
              <datalist id="mitarbeiter">  
			<?php while($row = $res2->fetch_row()){ 
				 echo "<option value=\"$row\">$row[2] $row[1]</option>";  
				}
				?>
              </datalist>
			<label for="lizenztyp">Lizenztyp</label>  
			<select name="lizenztyp" id="lizenztyp" >   
			<?php while($row = $res->fetch_row()){ 
				 echo "<option value=\"$row\">$row[1]</option>";  
			}
			?>
			</select> 
			<input type="submit" value="Abschicken">  
			</form>


und hier frage ich dann wie oben erwähnt das "zuord" ab und zeige dann entsprechend die Tabelle an. Füge dann da via MYSQL Query die Daten ein und gebe das dann an ein Verarbeitendes Script via $_POST weiter wenn ich die bearbeitet hab
SlainteMhath
SlainteMhath 10.09.2015 um 11:59:11 Uhr
Goto Top
Moin,

wenn ich dich richtig verstehe willst du die Daten "inline" editieren - also ohne das die anzeigende Seite neu lädt oder eine neu Seite geladen wird, richtig?

Das wirst du mit "normalen" PHP/HTML nicht hinbekommen. Dafür musst du dann eintsprechende AJAX Funbktionilität in deine Seite einbauen (z.b. über jQuery ohne ähnliche Frameworks). Das mach die Seite aber um den Faktor 5 komplizierter.

lg,
Slainte
wiesi200
wiesi200 10.09.2015 um 11:59:16 Uhr
Goto Top
Hallo,

die frage ist grundstätzlich wie du dir das mal vorstellst.

Kommt dann ein neues Fenster wo du die Werte ändern kannst, denn in dem Code finde ich jetzt kein Formularfeld wo man Werte ändern kann.

Aber im Endeffekt must du per POST ein SQL Statement abgeben das die die Werte in die Datenbank schreibt mehr nicht.
Thoomaas
Thoomaas 10.09.2015 aktualisiert um 12:06:11 Uhr
Goto Top
Zitat von @SlainteMhath:

Moin,

wenn ich dich richtig verstehe willst du die Daten "inline" editieren - also ohne das die anzeigende Seite neu lädt oder eine neu Seite geladen wird, richtig?

Das wirst du mit "normalen" PHP/HTML nicht hinbekommen. Dafür musst du dann eintsprechende AJAX Funbktionilität in deine Seite einbauen (z.b. über jQuery ohne ähnliche Frameworks). Das mach die Seite aber um den Faktor 5 komplizierter.

lg,
Slainte

Moin SlainteMhath,

ich bin gerade dabei auf die Seite "edit.php" mittels <form Action='edit.php'........> umzuleiten. Das funktioniert. Der Button hat als Name die ID des Datenbankeintrags. Dort habe ich mit Auto_increment gearbeitet.

Wenn jemand ein neues Protokoll schreibt bekommt er folgendes:

<?php
					if ($_POST['senden'] == 'speichern') {  
						$kategorie = $_POST['kategorie'];  
						$zustandigkeit = $_POST['zustandigkeit'];  
						$datum = $_POST['falligkeitsdatum'];  
						$protokoll = $_POST['protokoll'];  
						/*echo $kategorie.$zustandigkeit.$datum.$protokoll;*/
						if($_POST['zustandigkeit'] == ''){  
							$zustandigkeit = 'alle';  
						}
						mysql_connect($servername, $username, $password) or die ("Verbindung fehlgeschlagen!");  
						mysql_select_db ('protokoll');  
						mysql_query("  
							INSERT INTO protocol
								(uniqid, content, falligkeitsdatum, kategorie, zustandigkeit, autor)
							VALUES
								('$zeileid', '$protokoll', '$datum', '$kategorie', '$zustandigkeit', '$_SESSION[username]')")  
							or die (mysql_error());
					}
				?>

Das wird auch auf edit.php angezeigt werden. Wie ändere ich das nun geschickt um, sodass nur dieser eine Eintrag bearbeitet wird?

uniqid ist ebenfalls eine id die wir intern benutzen für Protokolle...das hat nichts mit der Auto_increment zu tun.
Thoomaas
Thoomaas 10.09.2015 um 12:03:19 Uhr
Goto Top
Zitat von @wiesi200:

Hallo,

die frage ist grundstätzlich wie du dir das mal vorstellst.

Kommt dann ein neues Fenster wo du die Werte ändern kannst, denn in dem Code finde ich jetzt kein Formularfeld wo man Werte ändern kann.

Aber im Endeffekt must du per POST ein SQL Statement abgeben das die die Werte in die Datenbank schreibt mehr nicht.

Hallo, danke!

Siehe meine Antwort an Slainte...
SlainteMhath
SlainteMhath 10.09.2015 um 12:13:22 Uhr
Goto Top
$zustandigkeit = $_POST['zustandigkeit'];   
[...]
VALUES ('$zeileid', '$protokoll', '$datum', '$kategorie', '$zustandigkeit', '$_SESSION[username]')")   
Zu allererst solltetest du deinen Code gegen SQL Injections absichern. D.h. keine POST Variablen direkt und geprüft in SQL Statements verwenden
mysql_real_escape_string ist hier dein Freund

Wie ändere ich das nun geschickt um, sodass nur dieser eine Eintrag bearbeitet wird?
Das verstehe ich nicht ganz. Was genau funktioniert jetzt nicht? der INSERT?
Thoomaas
Thoomaas 10.09.2015 um 12:20:13 Uhr
Goto Top
Zitat von @SlainteMhath:

> $zustandigkeit = $_POST['zustandigkeit'];   
> [...]
> VALUES ('$zeileid', '$protokoll', '$datum', '$kategorie', '$zustandigkeit', '$_SESSION[username]')")   
> 
Zu allererst solltetest du deinen Code gegen SQL Injections absichern. D.h. keine POST Variablen direkt und geprüft in SQL Statements verwenden
mysql_real_escape_string ist hier dein Freund

Wie ändere ich das nun geschickt um, sodass nur dieser eine Eintrag bearbeitet wird?
Das verstehe ich nicht ganz. Was genau funktioniert jetzt nicht? der INSERT?

Ich habe jetzt einen Button mit bearbeiten. Der hat den Namen der ID des Datenbankeintrags.

Wenn ich drauf drücke werde ich weitergeleitet auf "edit.php". Dort soll nun ein Formular entstehen, welches den Inhalt aus der Datenbank zu der besagten ID hat und diese soll man nun bearbeiten können.

D.h., ich würde jetzt so dran gehen, dass die ID auf edit.php weitergegeben wird. Dann würde ich die Datenbank auslesen "Select * from XXX where ID like ".$id
Im Anschluss die gleiche Maske die beim erstellen eines neuen Protokolls angezeigt wird als values mit den Daten aus der Datenbank füllen und bei einem klick auf den Button "speichern" werden die Inhalte mit einem Update-Befehl (?) in die Datenbank zurückgeschrieben. Denke ich soweit richtig?
SlainteMhath
Lösung SlainteMhath 10.09.2015 aktualisiert um 15:23:51 Uhr
Goto Top
Im Anschluss die gleiche Maske die beim erstellen eines neuen Protokolls angezeigt wird als values mit den Daten aus der Datenbank füllen und bei
einem klick auf den Button "speichern" werden die Inhalte mit einem Update-Befehl (?) in die Datenbank zurückgeschrieben. Denke ich soweit richtig?

Ja, richtig .)
Thoomaas
Thoomaas 10.09.2015 um 12:35:14 Uhr
Goto Top
Zitat von @SlainteMhath:

Im Anschluss die gleiche Maske die beim erstellen eines neuen Protokolls angezeigt wird als values mit den Daten aus der Datenbank füllen und bei
einem klick auf den Button "speichern" werden die Inhalte mit einem Update-Befehl (?) in die Datenbank zurückgeschrieben. Denke ich soweit richtig?

Ja, richtig .)

Ok, dann habe ich wohl die ganze Zeit richtig gedacht aber irgendwie nicht hingekommen. face-big-smile

Derzeit habe ich das Problem, dass die Variable bzw Datenbankausgabe $td['id'] nicht auf edit.php übergeben wird. Wie bekomme ist das nun hin? In dem Fall soll er als Inhalt die 5 übergeben. Allerdings, wenn ich auf der edit.php
echo $td['id'];  
eingebe bekomme ich keine Ausgabe, weil scheinbar der Inhalt fehlt.....
SlainteMhath
Lösung SlainteMhath 10.09.2015 aktualisiert um 15:24:28 Uhr
Goto Top
Quick*n*Dirty(tm):
echo "<input type='hidden' name='id'  value='".$td['id']."';  
eisbein
eisbein 10.09.2015 aktualisiert um 12:55:00 Uhr
Goto Top
Mahlzeit!

Derzeit habe ich das Problem, dass die Variable bzw Datenbankausgabe $td['id'] nicht auf edit.php übergeben wird.

Nachdem du bereits SESSION-Variablen benutzt, kannst du den Wert ebenfalls in eine Session-Variable stecken face-wink

Wie wurde der Wert übergeben, per POST oder GET?

Gruß
Eisbein
Thoomaas
Thoomaas 10.09.2015 um 12:54:53 Uhr
Goto Top
Zitat von @eisbein:

Mahlzeit!

Derzeit habe ich das Problem, dass die Variable bzw Datenbankausgabe $td['id'] nicht auf edit.php übergeben wird.

Nachdem du bereits SESSION-Variablen benutzt, kannst du den Wert ebenfalls in eine Session-Variable stecken face-wink

Gruß
Eisbein
Erzähle mir mehr... face-smile
eisbein
eisbein 10.09.2015 aktualisiert um 13:04:22 Uhr
Goto Top
Hallo!

Wie wird der Wert derzeit an edit.php übergeben per POST oder GET?

Edit:
Mein Lösungsvorschlag wäre, bei jedem Klick auf den Edit-Button ein PHP-Script aufzurufen, welches den aktuellen Wert in eine Session-Variable schreibt.
Danach wird die aktuelle Seite neu aufgerufen und beim entsprechenden Eintrag mittels IF überprüft ob die aktuelle Session-Variable den gleichen Wert hat wie die der ID des Eintrages. Falls Ja, wird ein Include edit.php ausgeführt.
Hat den Vorteil, dass alles immer auf der selben Seite ist.
Ich hoffe ich habe mich verständlich ausgedrückt.

Gruß
Eisbein
Thoomaas
Thoomaas 10.09.2015 um 12:57:49 Uhr
Goto Top
Zitat von @SlainteMhath:

Quick*n*Dirty(tm):
echo "<input type='hidden' name='id'  value='".$td['id']."';  

Danke, hat funktioniert! face-smile

Ich habe exakt das gleiche gehabt und auch selbst geschrieben ohne Recherche, aber irgendwie scheine ich dort ein Zeichen vergessen zu haben. face-wink
Thoomaas
Thoomaas 10.09.2015 um 12:58:07 Uhr
Goto Top
Zitat von @eisbein:

Hallo!

Wie wird der Wert derzeit an edit.php übergeben per POST oder GET?

Gruß
Eisbein

Per POST..
eisbein
eisbein 10.09.2015 aktualisiert um 13:02:48 Uhr
Goto Top
Hallo!

echo $_POST["id"];  

Gruß
Eisbein
Thoomaas
Thoomaas 10.09.2015 um 13:04:47 Uhr
Goto Top
Zitat von @eisbein:

Hallo!

> echo $_POST["id"];  
> 

Gruß
Eisbein

Das funktioniert ja mittlerweile. face-big-smile

Ich bin eher an den Sessions interessiert. Diese habe ich ja bereits. Nur die Variable in Sessions übergeben...Das habe ich auch mit anderen Foren noch nicht 100%ig gerafft.
Anmeldedaten sind in der Datenbank hinterlegt. Ein nächstes Feature, bis das Grundgerüst für das ganze steht, ist sowieso eine AD-Anbindung. Aber das dauert noch..
eisbein
eisbein 10.09.2015 um 13:07:15 Uhr
Goto Top
Hallo!

Nochmals, da ich den letzten Eintrag bearbeitet habe.

Mein Lösungsvorschlag wäre, bei jedem Klick auf den Edit-Button ein PHP-Script aufzurufen, welches den aktuellen Wert in eine Session-Variable schreibt.
Danach wird die aktuelle Seite neu aufgerufen und beim entsprechenden Eintrag mittels IF überprüft ob die aktuelle Session-Variable den gleichen Wert hat wie die der ID des Eintrages. Falls Ja, wird ein Include edit.php ausgeführt.
Hat den Vorteil, dass alles immer auf der selben Seite ist.
Ich hoffe ich habe mich verständlich ausgedrückt.

Gruß
Eisbein
eisbein
Lösung eisbein 10.09.2015 aktualisiert um 15:24:49 Uhr
Goto Top
Ich bin eher an den Sessions interessiert. Diese habe ich ja bereits. Nur die Variable in Sessions übergeben...Das habe ich auch mit anderen Foren noch nicht 100%ig gerafft.

<?php
session_start();

$_SESSION['farbe'] = 'grün';  
?>


Somit wird der Session-Variable "farbe" der Wert "grün" zugeordnet.

Gruß
Eisbein