Wie kann ich was Editieren?

cheergirly

Grünschnabel
Hallo euch allen,

ich habe mal eine Frage. Aber vor weg ich bin ganz neu in PHP und kenne mich noch kaum aus. Ich wurde gerne folgendes haben:

Ich habe eine Seite die heißt:

test.php wie die Datei aussieht das seht Ihr hier:

PHP:
<?php
include "config.php";
if(!empty($_POST))
{
		$sql = "INSERT INTO test 
				(
					titel,
					text,
					datum
				)
				VALUES
				(
					'" . addslashes($_POST["titel"]) . "',
					'" . addslashes($_POST["text"]) . "',
					NOW()

				)
				";
		mysql_query($sql) OR die(mysql_error());
		
		header("Location: test_1.php");
exit;
}
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Nur zum Test</title>
</head>

<body>
<form name="form1" method="post" action="">
  <table width="50%"  border="0">
    <tr>
      <td width="28%" height="29"><strong>&Uuml;berschrift:</strong></td>
      <td width="72%"><input name="titel" type="text" id="titel" size="30"></td>
    </tr>
    <tr>
      <td height="77"><strong>Test:</strong></td>
      <td><textarea name="text" cols="50" id="text"></textarea></td>
    </tr>
    <tr>
      <td height="42">&nbsp;</td>
      <td><input name="eintragen" type="submit" id="eintragen" value="&gt;&gt; Senden"></td>
    </tr>
  </table>
</form>
</body>
</html>

So die Tabelle in der DB sieht dann so aus:

CREATE TABLE `test` (
`id` INT( 6 ) NOT NULL ,
`titel` VARCHAR( 200 ) NOT NULL ,
`text` TEXT NOT NULL ,
`datum` DATETIME NOT NULL
);

So dann habe ich noch eine Datei die heißt edit.php

Wie die datei

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Nur zum Test</title>
</head>

<body>
<form name="form1" method="post" action="">
  <table width="50%"  border="0">
    <tr>
      <td width="28%" height="29"><strong>&Uuml;berschrift:</strong></td>
      <td width="72%"><input name="titel" type="text" id="titel" size="30"></td>
    </tr>
    <tr>
      <td height="77"><strong>Test:</strong></td>
      <td><textarea name="text" cols="50" id="text"></textarea></td>
    </tr>
    <tr>
      <td height="42">&nbsp;</td>
      <td><input name="eintragen" type="submit" id="eintragen" value="&gt;&gt; Senden"></td>
    </tr>
  </table>
</form>
</body>
</html>

So meine Frage ist nun wie muss ich das machen, dass wenn ich dann auf einen Beitrag klicke, dass ich den dann editieren kann und zwar mit dem Formular edit.php und wie muss der Link dann aussehen bei dem Beitrag?

Ich komme da einfach nicht weiter. Ich hoffe von euch kann mir da jemand weiter helfen odeR?

Gruß cheergirly
 
PHP:
<?php
if (isset($id)) { // Wenn die ID gesetzt ist, also über den Link übergeben wird dann
include "config.php"; 
$result = mysql_query("SELECT * FROM test WHERE City='" . $id ."'") OR die(mysql_error()); // Datensatz auslesen.
$result = mysql_fetch_array($result); // Wird benötigt um darauf zuzugreifen. (könnte auch ohne, aber so ist's angenehmer ;)
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Nur zum Test</title> 
</head> 

<body> 
<form name="form1" method="post" action=""> 
<table width="50%" border="0"> 
<tr> 
<td width="28%" height="29"><strong>&Uuml;berschrift:</strong></td> 
<td width="72%"><input name="titel" type="text" id="titel" size="30" value="<?php echo $result['titel']; ?>"></td> 
</tr> 
<tr> 
<td height="77"><strong>Test:</strong></td> 
<td><textarea name="text" cols="50" id="text"><?php echo $result['text']; ?></textarea></td> 
</tr> 
<tr> 
<td height="42">&nbsp;</td> 
<td><input name="eintragen" type="submit" id="eintragen" value="&gt;&gt; Senden"></td> 
</tr> 
</table> 
</form> 
</body> 
</html>

Ist nicht getestet.
Der Link sieht dann so aus:
http://dein-pfad.com/edit.php?id=idDesAnzuzeigendenBeitrages

Wenn du jetzt aber auf eintragen klickst wird nochmals ein Datensatz erstellt. Da musst du dann schon noch was abändern. Kannst ja zum Beispiel über ein Hidden Feld die Varialbe ID mitgeben und kannst dann beim Speichern abfangen ob ID gesetzt ist oder nicht. Wenn es gesetzt ist (kannst du testen mit der funktion isset()) musst du den Beitrag mit der ID updaten und sonst einen neuen speichern. Verstanden?

MFG
redX
 
Zuletzt bearbeitet:
Hallo,

um ehrlich zu sein habe ich gerade gar nichts mehr verstanden.

Hab das mal bis jetzt so gemacht:

PHP:
<?php
include "../data/config.php";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
<style type="text/css">
<!--
.Stil25 {font-family: Arial, Helvetica, sans-serif; color: #000000; font-weight: bold; }
-->
</style>
</head>

<body>
<p>Ausgabe:</p>
<?php // auslesen der Daten//
				$sql = "SELECT
					id,
					titel,
					text			
				
					FROM
					test
					";
					$return = mysql_query($sql) OR die(mysql_error());
					?>
                           <?php
					while($_data = mysql_fetch_assoc($return))
					{
					?>
<table width="50%"  border="0">
  <tr>
    <td width="23%" height="29"><strong>&Uuml;berschrift:</strong></td>
    <td width="77%"><span class="Stil25"><?php echo $_data['titel']; ?></span></td>
  </tr>
  <tr>
    <td height="31"><strong>Nachricht:</strong></td>
    <td><span class="Stil25"><?php echo $_data['text']; ?></span></td>
  </tr>
  <tr>
    <td height="31">Edit:</td>
    <td><a href="edit.php?id=id">[ zum edit ] </a></td>
  </tr>
  <tr>
    <td height="31">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <?php
					}
					?>
</table>
<p></p>
<p><a href="test.php">[ Eintragen ]</a></p>
</body>
</html>

den Link zum Editieren habe ich nun so gemacht:

<a href="edit.php?id=id">[ zum edit ] </a>

aber da wird dann gar keine ID mit übergeben :-( Hmm ich habe mir das alles leichter vorgestellt und was du bei deinem Edit noch geschrieben hast das habe ich auch nicht verstanden. Ich hoffe du kannst mir nochmals helfen
 
Na klar wird da keine ID übergeben ;)

<td><a href="edit.php?id=id">[ zum edit ] </a></td>

Du hast hier ja fest eingetragen: id=id. Wie soll es denn da ne ID überbeben. Die ID steht ja auch in der $_data variabel drin. Also mach mal so was:

PHP:
<td><a href="edit.php?id=<?php echo $_data['id']; ?>">[ zum edit ] </a></td>

Hast du das mal verstanden?
Jetzt wird edit.php übergeben und dort hast du dann die ID zur verfügung.

PHP:
<?php 
if (isset($id)) { // Wenn die ID gesetzt ist, also über den Link übergeben wird dann 
include "config.php"; 
$result = mysql_query("SELECT * FROM test WHERE City='" . $id ."'") OR die(mysql_error()); // Datensatz auslesen. 
$result = mysql_fetch_array($result); // Wird benötigt um darauf zuzugreifen. (könnte auch ohne, aber so ist's angenehmer ;) 
} 
?>

Dies liest nun eben einen Datensatz aus der DB. Und welcher? Der mit der ID, die über die URL übergeben wurde. Das Resultat ist dann in der Variabel $result gespeichert. Auf diese kannst du zugreifen wie bei dem Code den du gezeigt hast -> $_data['titel']

PHP:
<?php 
if (isset($id)) { // Wenn die ID gesetzt ist, also über den Link übergeben wird dann 
include "config.php"; 
$result = mysql_query("SELECT * FROM test WHERE City='" . $id ."'") OR die(mysql_error()); // Datensatz auslesen. 
$result = mysql_fetch_array($result); // Wird benötigt um darauf zuzugreifen. (könnte auch ohne, aber so ist's angenehmer ;) 
} 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Nur zum Test</title> 
</head> 

<body> 
<form name="form1" method="post" action=""> 
<table width="50%" border="0"> 
<tr> 
<td width="28%" height="29"><strong>&Uuml;berschrift:</strong></td> 
<td width="72%"><input name="titel" type="text" id="titel" size="30" value="<?php echo $result['titel']; ?>"></td> 
</tr> 
<tr> 
<td height="77"><strong>Test:</strong></td> 
<td><textarea name="text" cols="50" id="text"><?php echo $result['text']; ?></textarea></td> 
</tr> 
<tr> 
<td height="42">&nbsp;</td> 
<td><input name="eintragen" type="submit" id="eintragen" value="&gt;&gt; Senden"></td> 
</tr> 
</table> 
</form> 
</body> 
</html>

Nun haben wir eben dieses Codestück. Das ist dazu da, um neue Datensätze anzulegen sowie diese zu bearbeiten. Jetzt, wenn auf eintragen geklickt wird, wird jedesmal ein neuer Datensatz angelegt. Auch wenn du einen Datensatz editiern möchtest. So weit mal verstanden?
Jetzt möchtest du ja, wenn er editiern geklickt hat einen Datensatz abändern, und nicht einen neuen anlegen. Also musst du irgendwann mal testen, ob er einen neuen anlegen oder einen Editiern möchte und dann musst du ja ein anderes Statement auslösen.

Habe das Codestück noch angepasst. Natürlich kannst du es auch anderst lösen


PHP:
<?php 
$action = "save_new.php"; // Standard mässig wird das save_new.php aufgerufen wenn man speicher möchte. Also wird ein neuer Eintrag in die DB geschrieben
if (isset($id)) { // Wenn die ID gesetzt ist, also über den Link übergeben wurde, was bedeutet, der User möchte einen Eintrage editieren 
include "config.php"; 
$result = mysql_query("SELECT * FROM test WHERE City='" . $id ."'") OR die(mysql_error()); // Datensatz auslesen. 
$result = mysql_fetch_array($result); // Wird benötigt um darauf zuzugreifen. (könnte auch ohne, aber so ist's angenehmer ;) 
$action = "save_edit.php"; // Da der User einen Eintrage editieren möchte, wird nicht save_new.php aufgerufen sondern save_edit.php
} 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Nur zum Test</title> 
</head> 

<body> 
<form name="form1" method="post" action="<?php echo $action; /* Hier wird nun eingetragen, welche aktion ausgefürht wird. Also save new oder save edit... */ ?>"> 
<table width="50%" border="0"> 
<tr> 
<td width="28%" height="29"><strong>&Uuml;berschrift:</strong></td> 
<td width="72%"><input name="titel" type="text" id="titel" size="30" value="<?php echo $result['titel']; ?>"></td> 
</tr> 
<tr> 
<td height="77"><strong>Test:</strong></td> 
<td><textarea name="text" cols="50" id="text"><?php echo $result['text']; ?></textarea></td> 
</tr> 
<tr> 
<td height="42">&nbsp;</td> 
<td><input name="eintragen" type="submit" id="eintragen" value="&gt;&gt; Senden"></td> 
</tr> 
</table> 
</form> 
</body> 
</html>

Nun verstanden? Das ganze ist ungetestet...

MFG & gn8
redX
 
Hallo und guten Morgen,

danke für deinen Ausführliche Erklärung. Hab soweit auch alles verstanden und ich habe es auch schon mal versucht. Nur jetzt kommt noch eine Frage hoch. Was steht denn in:

save_new.php

und in

save_edit.php

Das sind ja wieder zwei Dateien was ich anlegen muss oder? Hmm ich währe dir sehr Dankbar, wenn du mir da nochmals helfen wurdest.

Gruß

PS: Aus dem City habe ich nun mal id gemacht das ist doch OK oder?
 
klar muss city id heissen. sorry ;)

Also das mit save_new und save_edit ist nur eine möglichkeit wie du das problem lösen kannst. Du kannst es auch in einem File machen. Es geht einfach darum, das du entweder, nämlich wenn man einen neuen Beitrag erstellen möchte, eine INSERT INTO SQL Statement abgeben muss, und wenn man einen Beitrag editiren möchte, muss man ne UPDATE Statment schreiben. Leider ist PHP nun nicht so gescheit und kann selber entscheiden ob ein UPDATE oder ein INSERT INTO abgeben muss. Also musst du das machen. Jetzt, ebe mit save_new und save_edit hast du entweder das save_new File mit der INSERT INTO Anweisung oder das save_edit mit der UPDATE Anweisung.
Du kannst aber auch ein save.php machen. Und dann, wenn eine ID über das Formular übergeben wurde (was bedeutet, das man einen Beitrag editiern möchte, eben den mit der ID im Link) wird der UPDATE Befehl ausgefürht. Wenn keine ID vorhanden ist wird ein INSERT INTO gemacht. Kannst es machen wie du möchtest...

Alles klar?

MFG
redX
 
Hallo,

danke dass du dich nochmals gemdelrt hast. OK bei

save_new.php

kommt dann also nochmals folgendes rein:

PHP:
if(!empty($_POST))
{
        $sql = "INSERT INTO test
                (
                    titel,
                    text,
                    datum
                )
                VALUES
                (
                    '" . addslashes($_POST["titel"]) . "',
                    '" . addslashes($_POST["text"]) . "',
                    NOW()

                )
                ";
        mysql_query($sql) OR die(mysql_error());
        
        header("Location: test_1.php");
exit;
}
?>

Habe ich das richtig verstnaden?

Und bei save_edit.php kommt dann folgendes rein:

PHP:
if(!empty($_POST))
{
        $sql = "$sql = "UPDATE 
test
                (
                    titel,
                    text,
                    datum
                )
                VALUES
                (
                    '" . addslashes($_POST["titel"]) . "',
                    '" . addslashes($_POST["text"]) . "',
                    NOW()

                )
                ";
        mysql_query($sql) OR die(mysql_error());
        
        header("Location: test_1.php");
exit;
}
?>

Habe ich das nun auch so richtig verstanden?
 
Stimmt genau ;-]

Jetzt hat der Code eifach noch ein paar Syntax Fehler ... aber ich denke das ist dir beim Copy & Past unterlaufen :p

Schön wäre es natürlich wenn du noch anzeigst: Beitrage gespeichert oder Beitrag editiert. Aber das ist dann nur noch Kosmetik ...

MFG
redX
 
Hallo,

hmm wo sind denn da noch Fehler drin? * grübel *

Schön wäre es natürlich wenn du noch anzeigst: Beitrage gespeichert oder Beitrag editiert. Aber das ist dann nur noch Kosmetik ...

Hmm ich hatte eigentlich gedacht dass ich das noch so mache, dass ich auch nee Ausgabe mache dass dieser Beitrag editiert worden ist. Denn eine Ausgabe wenn der Beitrag geschrieben worden ist das habe ich schon. Aber ich weiß nicht wie ich das machen muss dass ich noch eintragen lassen kann wenn der Beitrag editiert worden ist. Dann hatte ich noch gedacht dass ich auch noch anzeigen lasse wie oft der Beitrag editiert worden ist. Geht das denn auch wenn ja das muss ich ja dann in der edit Datei machen gelle oder? Hmm ich weiß es nicht. Meine PHP Kenntnisse sind wie gesagt noch nicht so gut.

Gruß cheergirly
 
Hallo,

so hab es gerade mal ausprobiert und nun bekomme ich folgende Meldung:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO test ( titel, text, ) VALUES

und zwar in der save_edit.php

Die Datei sieht nun so aus:

PHP:
<?php
include "config.php";
if(!empty($_POST))
{
		$sql = "Update INTO test 
				(
					titel,
					text,
				)
				VALUES
				(
					'" . addslashes($_POST["titel"]) . "',
					'" . addslashes($_POST["text"]) . "',
				)
				";
		mysql_query($sql) OR die(mysql_error());
		
		header("Location: ");
exit;
}
?>
 
Zurück