PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Problem mit Formular


Scream
2008-03-05, 18:19:27
Ich habe ein Problem mit einem Formular, mit dem ich Kommentare verwalten kann.
Wenn ich einen Kommentar erfolgreich bearbeite verschwindet das "Bearbeitungsfeld", bei einem Fehler bleibt es sichtbar. Soweit so gut.

Wenn ich einen Kommentar bearbeite und speichere und gleich darauf nochmal den gleichen Kommentar bearbeiten mag geht das nicht. Mache ich zwischendurch etwas anderes klappts wieder.

Das Problem liegt an meiner Abfrage, wann das Bearbeitungsformular angezeigt werden soll, aber ich weiß nicht wie ich es richtig machen sollte, hab schon einige Möglichkeiten ausprobiert.

Hier mein Code:

$errors = array(); // Nachrichten (Fehler, Erfolg)

//--------------------------------------------------------------------------
// bearbeiteter Kommentar speichern
//--------------------------------------------------------------------------
if(!empty($_POST['kommentar_bearbeiten']))
{
$p_name = strip_tags(trim(stripslashes($_POST['p_name'])));
$p_text = htmlspecialchars(trim(stripslashes($_POST['p_text'])));
$nid = $_GET['p_kbearb'];

if (empty($p_name)) {$errors[] = 'nachrichtenbox("fehler","Name muss angegeben werden.");';}

else
{
mysql_verbinden();
$db_abfrage = "UPDATE kommentare SET
name='" . $p_name . "',
kommentar='" . $p_text . "';";
$erfolg = mysql_query($db_abfrage);

if(!$erfolg)
{
$errors[] = 'nachrichtenbox("fehler","Fehler beim Bearbeiten des Kommentars.");';
}
else
{
$errors[] = 'nachrichtenbox("erfolg","Kommentar erfolgreich geändert!");';
$status = '1';
}

}
}


//------------------------------------------------------------------------------
// Kommentare ausgeben
//------------------------------------------------------------------------------

[...] // DB-Anweisungen

while($k_zeilenfeld = mysql_fetch_array($k_datensatz))
{

[...] // Kommentar ausgeben

// Bearbeitungslink ausgeben
echo '<a href="' . $_SERVER['PHP_SELF'] . '?p_kat=news_detail&p_kbearb=' . $comment_id . '
" title="Kommentar bearbeiten"></a>';
}


//------------------------------------------------------------------------------
// Formular: Kommentar bearbeiten
//------------------------------------------------------------------------------
if(!empty($_GET['p_kbearb']) && !isset($status))
{
[...] // DB-Anweisungen

echo '<form action="' . $_SERVER['PHP_SELF'] . '?p_kat=news_detail&p_kbearb='
. $_GET['p_kbearb'] . '&p_detail=' . $news_id . '#comment_write" method="post">';
echo '<p><label>Name:</label><input type="text" class="text" value="' . $zeilenfeld['name']
. '" name="p_name"></p>';
echo '<p><label>Kommentar:</label><textarea name="p_text" cols="" rows="">'
. $zeilenfeld['kommentar'] . '</textarea></p>';

echo '<div class="buttons"><p><button type="submit" value="kommentar_bearbeiten"
name="kommentar_bearbeiten"><img src="layout/ok.png" /> Speichern</button></p></form>';
}


//------------------------------------------------------------------------------
// Meldungen ausgeben
//------------------------------------------------------------------------------
if (!empty($errors))
{
foreach ($errors as $error)
{
eval($error);
}
}


Hoffentlich hab ich jetzt nichts vergessen ;)

Kinman
2008-03-05, 21:18:42
Ich machs immer so das die daten gespeichert werden und anschließend auf die auflistung weitergleitet wird.


if (isset($_GET['action'])) $action = $_GET['action'];
else $action = 'list';

if ($action == 'list')
//Beiträge anzeigen

if ($action == 'edit')
//Bearbeitungsformular anzeigen, action-Eigenschaft des Formulars verweist auf ?action=save

if ($action == 'save')
//Bearbeitung speichern, "Bitte warten" ausgeben und auf ?action=list weiterleiten


mfg Kinman

Scream
2008-03-05, 21:50:45
man könnte auch switch case verwenden oder?

ich hab jetzt selbst ne lösung gefunden ;)
ich übergeb einfach noch nen zusatzwert mit, beim abschicken des formulars und schon klappts auch

Kinman
2008-03-05, 22:08:02
man könnte auch switch case verwenden oder?


Jein. Für diesen simplifizierten Code ja, im realen Code (bei mir) nein, da ich teilw. mehrere Bedingungen abfrage.

mfg Kinman