Umleitungsproblem mit header-Funktion

Admi

Erfahrenes Mitglied
Folgendes Problem habe ich gerade:

Übersicht -> Editierungsseite -> Verarbeitungsskript

Auf der Übersichtsseite wird eine Tabelle generiert. Im ganz rechten Feld jeder Tabellenreihe kann man über Icons bestimmte Aktionen durchführen. Etwa einen Nutzer zu aktivieren, zu deaktivieren oder zu löschen.
Beim Editieren von zB Userdaten leite ich auf eine Editierseite um. Wenn dort neue Daten eingetragen bzw alte geändert wurden leitet dieses Script die Daten an das Verarbeitungsskript weiter, dass in einer untergeordneten Ordnerebene liegt.
Dieses bearbeitet das ganze, schreibt die Daten in die Datenbanktabelle und leitet via header an die Übersicht zurück.
Das funktioniert auch alles wunderbar.

Allerdings möchte ich eigentlich auf die Editierungsseite zurückleiten, was ja eigentlich gehen sollte. Nur bringt er mir da einen SQL-Fehler in der Ausführung. Das macht mich natürlich stutzig, da das Skript ja fehlerfrei funktioniert, wenn ich zur Übersicht umleite.

Vielleicht könnt ihr mir ja sagen, woran das liegen könnte.

Verwendet wird eine Datenbankklasse, die der in den Tutorials sehr ähnlich ist. Die Seiten werden über die URL includiert (so wie es beim Tutorial "wie geht das mit index.php?section=xxx" beschrieben wird)

Nun noch die Quelltexte:

Übersicht: (admin1.php)
PHP:
<?php

session_start();

require ('./inc/login.inc.php');

if(is_logged_in())
    {
  echo "<h3>Administratoren&uuml;bersicht</h3>";
  //Statusbericht
  require ('./inc/status.inc.php');
  if ($_REQUEST['status']) { echo "<p class=\"status\">"; status($_REQUEST['status']); echo "</p>"; }
  elseif ($_REQUEST['error']) { echo "<p class=\"error\">"; error($_REQUEST['error']); echo "</p>"; }  
  //Variablen laden
  require_once('./inc/config.inc.php');
  require_once('./class/class_db.php');
  //Datenbankverbindung aufbauen
  $connection = new datenbank($db_host, $db_user, $db_pass, $db_name);
  $connection->datenbankQuery("SELECT id, nummer, benutzer, nachname, vorname, mail, pw, UNIX_TIMESTAMP(datetime) AS datetime, UNIX_TIMESTAMP(datetime2) AS datetime2, active FROM admin ORDER BY id ASC");
  echo "<table>";
  echo "<thead>";
  echo "<tr>";
  echo "<th>#</th>";  
  echo "<th>Nummer</th>";
  echo "<th>Benutzer</th>";
  echo "<th>Nachname</th>";
  echo "<th>Vorname</th>";
  echo "<th>Registriert</th>";  
  echo "<th>letzte &Auml;nderung</th>";
  echo "<th>Aktiv?</th>";
  echo "<th>Aktion</th>";
  echo "</tr>";
  echo "</thead>";
  echo "<tbody>";
  //Daten holen
  $id = 0;
  while($ausgabe = $connection->ressourceHolen()) 
  {
  //ID inkrementieren
  $id++;
  echo "<tr>";
  echo "<td>$id</td>";  
  echo "<td>$ausgabe[nummer]</td>";
  echo "<td>$ausgabe[benutzer]</td>";
  echo "<td>$ausgabe[nachname]</td>";
  echo "<td>$ausgabe[vorname]</td>";
  //Datumsformatierung
  $datum1 = StrFTime('%d.%m.%Y-%H:%M:%S Uhr',$ausgabe[datetime]);
  echo "<td>$datum1</td>";  
  //Datumsformatierung
  $datum = StrFTime('%d.%m.%Y-%H:%M:%S Uhr',$ausgabe[datetime2]);
  echo "<td>$datum</td>";
  //Aktivit&auml;tsabfrage
  if ($ausgabe[active] == 0) {
  $active = "<img src=\"../udb/pics/user_on.gif\" border=\"0\" alt=\"Administrator aktiv\" title=\"Administrator aktiv\">"; }
  elseif ($ausgabe[active] == -2) {
  $active = "<img src=\"../udb/pics/user_off.gif\" border=\"0\" alt=\"Administrator inaktiv - inaktive Benutzer d&uuml;rfen sich nicht mehr im System anmelden\" title=\"Administrator inaktiv - inaktive Benutzer d&uuml;rfen sich nicht mehr im System anmelden\">"; }
  echo "<td>$active</td>";
  //Aktionenfeld
  echo "<td><a href=\"index.php?section=activate_admin&id=$ausgabe[id]&name=$ausgabe[nachname]\"><img src=\"pics/thread.gif\" border=\"0\" alt=\"Administrator $ausgabe[nachname] aktivieren\" title=\"Administrator $ausgabe[nachname] aktivieren\"></a>&nbsp;<a href=\"index.php?section=inactivate_admin&id=$ausgabe[id]&name=$ausgabe[nachname]\"><img src=\"pics/thread_lock.gif\" border=\"0\" alt=\"Administrator $ausgabe[nachname] deaktivieren\"  title=\"Administrator $ausgabe[nachname] deaktivieren\"></a>&nbsp;<a href=\"index.php?section=delabfrage2&id=$ausgabe[id]&name=$ausgabe[nachname]\"><img src=\"pics/delete.png\" border=\"0\" alt=\"Administrator $ausgabe[nachname] l&ouml;schen\"  title=\"Administrator $ausgabe[nachname] l&ouml;schen\"></a>&nbsp;<a href=\"mailto:$ausgabe[mail]\"><img src=\"pics/mail.gif\" border=\"0\" alt=\"Administrator $ausgabe[nachname] eine E-Mail senden\"  title=\"Administrator $ausgabe[nachname] eine E-Mail senden\"></a>&nbsp;<a href=\"index.php?section=edit_admin&id=$ausgabe[id]\"><img src=\"pics/edit.png\" border=\"0\" alt=\"Administratordaten von $ausgabe[nachname] editieren\"  title=\"Administratordaten von $ausgabe[nachname] editieren\"></a>&nbsp;<a href=\"index.php?section=new_pw&id=$ausgabe[id]&name=$ausgabe[nachname]\"><img src=\"pics/lock.gif\" border=\"0\" alt=\"Neues Passwort f&uuml;r $ausgabe[nachname] erzeugen\"  title=\"Neues Passwort f&uuml;r $ausgabe[nachname] erzeugen\"></a>";
  echo "</td>";
  echo "</tr>";
  }
  echo "</tbody>";
  echo "</table>";
  }
?>
Editierungsseite (edit_admin.php)

PHP:
<?php

session_start();

require_once('./inc/login.inc.php');

if (is_logged_in()) {

echo '<h3>Admindaten &auml;ndern:</h3>';

require_once('./inc/config.inc.php');
require_once('./class/class_db.php');

echo "<form action=\"admin/edit_admin.php?id=".$_REQUEST['id']."\" method=\"post\">";
echo "<fieldset><legend><b>Nutzerdaten</b></legend>";

require ('./inc/status.inc.php');
if ($_REQUEST['status']) { echo "<p class=\"status\">"; status($_REQUEST['status']); echo "</p>"; }
elseif ($_REQUEST['error']) { echo "<p class=\"error\">"; error($_REQUEST['error']); echo "</p>"; }

$connection = new datenbank($db_host, $db_user, $db_pass, $db_name);
$connection->datenbankQuery("SELECT id, nummer, benutzer, nachname, vorname, mail, UNIX_TIMESTAMP(datetime) AS datetime, active FROM admin WHERE id = ".$_REQUEST['id']."");
$ausgabe = $connection->ressourceHolen();
echo "<p>";
echo "<label for=\"nummer\">Nummer</label>";
echo "<input type=\"text\" name=\"nummer\" id=\"nummer\" value=\"$ausgabe[nummer]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"nummer2\"></label>";
echo "<input type=\"hidden\" name=\"nummer2\" id=\"nummer2\" value=\"$ausgabe[nummer]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"vname\">Vorname</label>";
echo "<input type=\"text\" name=\"vname\" id=\"vname\" value=\"$ausgabe[vorname]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"vname2\"></label>";
echo "<input type=\"hidden\" name=\"vname2\" id=\"vname2\" value=\"$ausgabe[vorname]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"name\">Nachname</label>";
echo "<input type=\"text\" name=\"name\" id=\"name\" value=\"$ausgabe[nachname]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"name2\"></label>";
echo "<input type=\"hidden\" name=\"name2\" id=\"name2\" value=\"$ausgabe[nachname]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"mail\">E-Mail</label>";
echo "<input type=\"text\" name=\"mail\" id=\"mail\" value=\"$ausgabe[mail]\"/>";
echo "</p>";
echo "<p>";
echo "<label for=\"mail2\"></label>";
echo "<input type=\"hidden\" name=\"mail2\" id=\"mail2\" value=\"$ausgabe[mail]\"/>";
echo "</p>";
echo "</fieldset>";
echo "<fieldset><legend><b>Best&auml;tigung</b></legend>";
echo "<p>";
echo "<input type=\"submit\" class=\"submit\" value=\"Administratordaten &auml;ndern\">";
echo "</p>";
echo "</fieldset>";
echo "</form>";

}

?>
Verarbeitungsskript (edit_admin.php -> im Adminordner)

PHP:
<?php

session_start();

require ('./inc/login.inc.php');

if(is_logged_in())
    {  
  if ($_REQUEST['nummer'] == $_REQUEST['nummer2'] && $_REQUEST['name'] == $_REQUEST['name2'] && $_REQUEST['vname'] == $_REQUEST['vname2'] && $_REQUEST['mail'] == $_REQUEST['mail2'])
  {
  header("Location: /udb/index.php?section=admin1&error=error10");  
  } else {
  //Variablen laden  
  require_once('./inc/config.inc.php');
  require_once('./class/class_db.php');
  //Datenbankverbindung aufbauen
  $connection = new datenbank($db_host, $db_user, $db_pass, $db_name);
  $timestamp = time();   
  //Update
  $connection->datenbankQuery("UPDATE admin SET 
  nummer = '".$_REQUEST['nummer']."',
  vorname = '".$_REQUEST['vname']."',
  nachname = '".$_REQUEST['name']."',
  mail = '".$_REQUEST['mail']."',
  datetime2 = FROM_UNIXTIME($timestamp)   
  WHERE id = ".$_REQUEST['id']."");
  //Protokoll schreiben
  $connection->datenbankQuery("INSERT INTO protokoll (
  nummer,
  nachname,
  vorname,
  datetime,
  prot
  ) VALUES (
  '".$_SESSION['nummer']."',
  '".$_SESSION['username']."',
  '".$_SESSION['vorname']."',
  FROM_UNIXTIME($timestamp),
  'Administratordaten von ".$_REQUEST['name2']." in ".$_REQUEST['name']." ge&auml;ndert')");
  header("Location: /udb/index.php?section=admin1&status=status8");
  }
  }
  
?>
 
Hallo!

Kann es sein dass die Session ID nicht übergeben wird und Du somit ausgelogt bist?
header() hat gesagt.:
Anmerkung: Die Session-ID wird nicht mit dem Location-Header übermittelt, außer Sie haben session.use_trans_sid eingeschaltet. Sie muss daher manuell durch Verwendung der SID-Konstante hinzugefügt werden.
Und dann solltest Du Deine Location vervollständigen.
header() hat gesagt.:
Anmerkung: HTTP/1.1 verlangt einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad als Argument von Location:, aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:
Gruss Dr Dau
 
An einen Sessionfehler dachte ich garnicht? Da er mir ja mit der mysql_error(); Meldung von der SQL-Ausführung kommt. Die Session ist ja auch überall aktiv über session_start();
Naja, schaden kanns ja nicht, die SID mal testweise anzuhängen.

Das Location nen absoluten Pfad will, wusst ich auch net *g* Dann setz ich den einfach mal in die Config und vor den relativen Pfad und mal schaun, was mit beiden Änderungen so rauskommt. Tät mich ja freuen, wenns klappt. Weil die Umleitung auf die Übersicht ja nicht so das wahre ist.

Werd ich morgen mal antesten. Besten Dank schonmal für die erste Hilfe :D
 
Edit: Hat sich geklärt.
Die User-ID fehlte im header-Link und damit wusste die Editseite nicht mehr, um welchen User es ging und daher der Fehler.

Trotzdem danke an alle :D Manchmal sind die einfachsten Fehler die schlimmsten.
 
Zuletzt bearbeitet:
Zurück