Problem mit ?action=

Original geschrieben von Samuel
bzgl. sessions, das ist ganz einfach... lies dir einfach mal das manuel durch
http://de.php.net/set_cookie

Also ich krieg das einfach nicht gebacken mit den Cookies! Es fängt schon damit an das die Cookies gar nicht gesetzt werden. Ich schreib nochmal den Code. Vielleicht weiß ja einer weiter!

PHP:
<?
include("data/includes/mysql_connect.php");
include("data/includes/header.php");

//Wenn Cookie existiert
if(isset($_COOKIE['name'])) {
  $cookievar = preg_split("/#/", $name);
  $login    = $cookievar[0];
  $pw       = $cookievar[1];
  $nick     = $cookievar[2];
  $action   = "checklogin";
  echo"$nick";
}
else {
  $action = "";
}


//LOGIN Formular
if($action == "") {
  echo"
       <FORM action=\"$PHP_SELF?action=checklogin\" method=\"post\">
       <TABLE width=\"200\" cellspacing=\"1\" cellpadding=\"2\" border=\"1\">
       <tr>
         <td height=\"40\" valign=\"middle\">Name:</td>
         <td align=\"center\" valign=\"middle\">
          <input type=\"text\" name=\"login\" size=\"10\">
         </td>
       </tr>
       <tr>
         <td height=\"40\" valign=\"middle\">PW:</td>
         <td align=\"center\" valign=\"middle\">
          <input type=\"password\" name=\"pw\" size=\"10\">
         </td>
       </tr>
       <tr>
         <td height=\"40\" colspan=\"2\" align=\"center\" valign=\"middle\">
          <input type=\"submit\" value=\"Login\" class=\"button\">
         </td>
       </tr>
       </TABLE>
  ";
}
//LOGIN Check
elseif($action == "checklogin") {
  //DB REGUSER auslesen
  $result = mysql_query("SELECT pw, nick FROM $reguser WHERE (login=\"$login\")");
  if($result) {
    $Anzahl = mysql_num_rows($result);
    if($Anzahl > 0) {
      $pwdb  = mysql_result($result, $i, 0);
      $nick  = mysql_result($result, $i, 1);
      //PW überprüfen
      if ($pwdb == $pw) {
        
        $delta = 365*24*3600;
        $vars = "$login#$pwdb#$nick";
        setcookie("name", $vars, time() + $delta, "/");
        
        echo"Hallo $nick";
      }
      else {
        echo"Falsches Passwort<BR>";
        echo"<a href=\"$PHP_SELF\">Zurück</a>";
      }
    }
    else {
      echo"User existiert nicht<BR>";
      echo"<a href=\"$PHP_SELF\">Zurück</a> - <a href=\"$PHP_SELF\">Registrieren</a>";
    }
  }
  else {
    echo"Datenbankproblem<BR>";
    echo"Bitte kontaktieren Sie den Webmaster!";
  }
}
?>

Also laut Manual müsste das so gehen. Aber der setzt keinen Cookie.

MFG Raph
 
So ich hab das jetzt mit zusätzlichen Variabeln geändert so das er über die Zeile mit setcookie geht aber der cookie wird immer noch nicht gesetzt

PHP:
<?
include("data/includes/mysql_connect.php");
include("data/includes/header.php");
//COOKIE überprüfen
if(isset($_COOKIE['name'])) {
  $cookievar = preg_split("/#/", $name);
  $login     = $cookievar[0];
  $pw        = $cookievar[1];
  $nick      = $cookievar[2];
  $action    = "checklogin";
  $cookie    = 1;
}
else {
  $cookie = 0;
}
//LOGIN Formular
if($action == "" && $cookie == 0) {
  echo"
       <FORM action=\"$PHP_SELF?action=checklogin\" method=\"post\">
       <TABLE width=\"200\" cellspacing=\"1\" cellpadding=\"2\" border=\"1\">
       <tr>
         <td height=\"40\" valign=\"middle\">Name:</td>
         <td align=\"center\" valign=\"middle\">
          <input type=\"text\" name=\"login\" size=\"10\">
         </td>
       </tr>
       <tr>
         <td height=\"40\" valign=\"middle\">PW:</td>
         <td align=\"center\" valign=\"middle\">
          <input type=\"password\" name=\"pw\" size=\"10\">
         </td>
       </tr>
       <tr>
         <td height=\"40\" colspan=\"2\" align=\"center\" valign=\"middle\">
          <input type=\"submit\" value=\"Login\" class=\"button\">
         </td>
       </tr>
       </TABLE>
  ";
}
//LOGINCHECK wenn kein COOKIE vorhanden
elseif($action == "checklogin" && $cookie == 0) {
  //DB REGUSER auslesen
  $result = mysql_query("SELECT pw, nick FROM $reguser WHERE (login=\"$login\")");
  if($result) {
    $Anzahl = mysql_num_rows($result);
    if($Anzahl > 0) {
      $pwdb  = mysql_result($result, $i, 0);
      $nick  = mysql_result($result, $i, 1);
      //PW überprüfen
      if ($pwdb == $pw) {
        $delta = 365*24*3600;
        $vars = "$login#$pwdb#$nick";
        setcookie("name", $vars, time() + $delta, "/", ".domain");
        $cookie = 1;
        $action = "login";
      }
      else {
        echo"Falsches Passwort<BR>";
        echo"<a href=\"$PHP_SELF\">Zurück</a>";
      }
    }
    else {
      echo"User existiert nicht<BR>";
      echo"<a href=\"$PHP_SELF\">Zurück</a> - <a href=\"$PHP_SELF\">Registrieren</a>";
    }
  }
  else {
    echo"Datenbankproblem<BR>";
    echo"Bitte kontaktieren Sie den <a href=\"mailto:webmaster@domain?subject=Datenbanproblem\">Webmaster</a>!";
  }
}
//LOGINCHECK wenn COOKIE vorhanden
elseif($action == "checklogin" && $cookie == 1) {
  //DB REGUSER auslesen
  $result = mysql_query("SELECT pw, nick FROM $reguser WHERE (login=\"$login\")");
  if($result) {
    $Anzahl = mysql_num_rows($result);
    if($Anzahl > 0) {
      $pwdb  = mysql_result($result, $i, 0);
      $nick  = mysql_result($result, $i, 1);
      //PW überprüfen
      if ($pwdb == $pw) {
        $action = "login";
      }
      else {
        echo"Falsches Passwort<BR>";
        echo"<a href=\"$PHP_SELF\">Zurück</a>";
      }
    }
    else {
      echo"User existiert nicht<BR>";
      echo"<a href=\"$PHP_SELF\">Zurück</a> - <a href=\"$PHP_SELF\">Registrieren</a>";
    }
  }
  else {
    echo"Datenbankproblem<BR>";
    echo"Bitte kontaktieren Sie den <a href=\"mailto:webmaster@domain?subject=Datenbanproblem\">Webmaster</a>!";
  }
}
//LOGIN erfolgreich
elseif($action == "login" && $cookie == 1) {
  echo"Hallo $nick, wie gehts?";
  echo"<BR>Login erfolgreich!";
}
?>

Er gibt mir "Hallo $nick" aus. ALso geht er über die setcookie schleife weil sonst "$action = "login" " nicht gesetzt würde und er mir dann nicht "Hallo $nick" ausgeben würde. Aber da muss auch noch ein anderes Prob sein ausser dem cookie weil er mir nur "Hallo $nick" ausgibt und nicht "Hallo $nick, wie gehts? Login erfolgreich". Aber das Script ansich läuft d.h. PW falsch, User nicht vorhanden läuft alles problemlos!

Gruß Raph
 
Hat noch keiner en Fehler entdeckt? Hmm also ich komm da nicht weiter! Hab einiges ausprobiert aber der setzt diesesn dummen Cookie einfach net!

MFG Raph
 
Er gibt mir "Hallo $nick" aus. ALso geht er über die setcookie schleife weil sonst "$action = "login" " nicht gesetzt würde und er mir dann nicht "Hallo $nick" ausgeben würde.
Falsch, es gibt bei deinem Quellcode zwei Möglichkeiten dass action = login gesetzt wird:
1. LOGINCHECK wenn kein COOKIE vorhanden
2. LOGINCHECK wenn COOKIE vorhanden

Bekommst du irgendeine Fehlermeldung?
 
Nein keine Fehlermeldung. Das Script funktionniert ansich wunderbar! Nur der setzt den Cookie halt net.
 
Bist du dir sicher, dass der das Cookie nicht setzt? Normalerweise kommt da glaub ich eine Fehlermeldung wenns nicht geht... Hast du schon mal bei dir auf dem PC geschaut ob ers gesetzt hat, oder ob du Cookies überhaupt aktiviert hast?
 
Also ich hab im Browser die Cookie Funktion aktiviert und auf meiner Festplatte gibt es den Cookie nit. Außerdem müsste der sich ja, wenn der Cookie existiert, automatisch einloggen.
 
Original geschrieben von leuchte
Und wenn wir dann noch schön sauber arbeiten wollen, machen wir entweder.
PHP:
if() {
}
elseif {
}
.
.
.
else {
}

oder das ganze mit einer switch-Anweisung, aber bitte nicht zwei if() hintereinander. Das geht zwar, aber ist überhauptgarnicht schön :rolleyes:

naja das is aber auch nicht grad nach dem standard!!!
Code:
if()
{
   //3 eingerückt
} /* if(gleiche anweisung iwe oben) */
else if
{
   //3 eingerückt
} /* else if() */
else
{
   //3 eingerückt
} /* else */

so siehts aus! :)

Grtz MrF
 
Ich denke, dass es am Include des Headers liegt.
Die Funktion setcookie muss immer als erstes ausgegeben werden. Wenn schon HTML-Code an den Browser gesendet worden ist wird das Cookie nicht gesetzt (glaub ich hat was mit dem Header zu tun. Cokkie ist im Header und Header muss auch von HTML-Code kommen).

Sollte das in Klammern nicht stimmen, bitte berichtigen.
Ich war bisher der Meinung, dass es so läuft.

Also:
Nie eine Ausgabe vor der Funktion setcookie.

Auch eine Leerzeile vor <?php im script ist schon eine Ausgabe.
In der Include-Datei steht bestimmt eine Ausgabe. Sie ist leider nicht mit gepostet.
 
Zurück