Webdesign in Siegen

Probleme mit kleinem Script

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Probleme mit kleinem Script

Beitragvon maex11 am 25.06.2008, 20:35

Hallo Leutz,

ich weis nicht aber es kommt ne Fehlermeldung her bei einem } else {

Fehlermeldung
Parse error: syntax error, unexpected T_ELSE in G:\wampserver\www\maexology.bplaced.net\index.php(53) : eval()'d code(3) : eval()'d code on line 36


Script
Code: Alles auswählen
<?php
   if($_SESSION["login"] == false) {
                  echo '<p align="center">Du kannst deinen Account nicht ändern, da du nicht eingeloggt bist.</p>';
                    } else {
      // Config include
      include(lib/configuration.php);

      // Überschrift & Formular
      echo '<B>Profil ändern</b><BR>';
      echo '<form methode="POST" action="">';
      echo '<tr><td align="right">Altes Passwort:</td><td><input name="pw_old" type="password"></td></tr>';
      echo '<tr><td align="right">Email:</td><td><input name="mail" type="text" value="$_SESSION[email]"></td></tr>';
      echo '<tr><td align="right">Neues Passwort:</td><td><input name="pw" type="password"></td></tr>';
      echo '<tr><td align="right">Neues Passwort wdh.:</td><td><input name="pw_wdh" type="password"></td></tr>';
      echo '</form>';

      // Variabeln aus dem Formular
      $email = $_POST['mail'];
      $password  = md5($_POST['pw']);         // md5 verschlüsselt das Passwort
      $password_wdh = $_POST['pw_wdh'];
      $email = $_POST['mail'];
      $pw_old = $_POST['pw_old'];
   
      // if-Abfrage
      if($pw_old !== $_SESSION['password'])
         if(empty($email) OR empty($password) OR empty($password_wdh)) {
            echo 'ERROR - Du hast ein Feld nicht ausgefüllt.';
              } else {
            // Neue Passwörter identisch?
            if($password !== $password_wdh) {
               echo "ERROR - Deine neuen Passwörter sind nicht identisch!";
               } else {
               $mysql =  "UPDATE usersystem_users Set password = '$password', email = '$email' WHERE id = '$_SESSION[id]'";   
            }
         }
        } else {
         echo 'ERROR - Dein Aktuelles Passwort ist falsch.';
      }
   }
?>


MFG maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon Ingo am 25.06.2008, 21:13

Ein simpler Klammerfehler: Entweder hinter dem if($pw_old !== $_SESSION['password']) eine Klammer
aufmachen oder vor dem letzten else die Klammer weglassen. 8)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Probleme mit kleinem Script

Beitragvon maex11 am 26.06.2008, 13:46

ach mist... :lol: :lol: bin halt noch am Anfang Danke schön...

mFg
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon maex11 am 29.06.2008, 13:20

Huhu Leutz,

Code: Alles auswählen
<?php
   echo '<br>';
   if($_SESSION["login"] == false) {
                  echo '<p align="center">Du kannst deinen Account nicht ändern, da du nicht eingeloggt bist.</p>';
                    } else {
                  // Config include
                  include('lib/configuration.php');
                  
                  // Überschrift & Formular
                  echo '<B>Profil ändern</b><BR>';
                  echo '<form methode="POST" action="index.php?page=40" tarPOST="">';
                  echo '<BR><tr><td align="left">Altes Passwort:</td><td align="right"><input name="pw_old" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Email:</td><td align="right"><input name="mail" type="text" value="$_SESSION[email]"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort:</td><td align="right"><input name="pw" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort wdh.:</td><td align="right"><input name="pw_wdh" type="password"></td></tr>';
                  echo '<BR><input type="submit" name="submit" value="Absenden">';
                  echo '</form>';

                  // Variabeln aus dem Formular
                  $email = $_POST['mail'];
                  $password  = md5($_POST['pw']);         // md5 verschlüsselt das Passwort
                  $password_wdh = md5($_POST['pw_wdh']);    // mit Verschlüsselt, damit die Passwörter gleich sind. Wird nicht gespeichert
                  $email = $_POST['mail'];
                  $pw_old = $_POST['pw_old'];
                  $submit = $_POST['submit'];
               
                  // if-Abfrage
                  if($pw_old !== $_SESSION['password']) {
                     if(empty($email) OR empty($password) OR empty($password_wdh)) {
                        echo 'ERROR - Du hast ein Feld nicht ausgefüllt.';
                          } else {
                        // Neue Passwörter identisch?
                        if($password !== $password_wdh) {
                           echo "ERROR - Deine neuen Passwörter sind nicht identisch!";
                           } else {
                           $mysql =  "UPDATE usersystem_users Set password = '$password', email = '$email' WHERE id = '$_SESSION[id]'";   
                        }
                     }
                      } else {
                     echo 'ERROR - Dein Aktuelles Passwort ist falsch.';
                  }
   }

?>


1) Was ist daran falsch das es in der URL index.php?pw_old=&mail=%24_SESSION[email]&pw=&pw_wdh=&submit=Absenden statt index.php?page=40

2) Warum ist das hier "ERROR - Du hast ein Feld nicht ausgefüllt." schon da obwohl noch gar nicht der Button gedrückt worden ist.

Sessions von der Datei userpanel.php - Wenn man sich einloggt werden die Sessions gespeichert:
Code: Alles auswählen
                                // Daten Holen
                                $takedata = mysql_query("SELECT * FROM usersystem_users WHERE username = '$username' AND password = '$password'");

                                if( mysql_num_rows( $takedata ) > 0 ) {

                                        // Erforderliche Daten in einer Session speichern
                                        $took = mysql_fetch_array($takedata);
                                        $_SESSION['id'] = $took['id'];
                                        $_SESSION['username'] = $took['username'];
                                        $_SESSION['password'] = $took['password'];
                                        $_SESSION['email'] = $took['email'];
                                        $_SESSION['rang'] = $took['rang'];
                                        $_SESSION['login'] = true;
                                        echo '<meta http-equiv="refresh" content="0; url=">';

                                } else {
                                        echo $lang['wronguserdata'];
                                }


Ich weis nicht warum es nicht funkts.......

Freue mich auf Tipps die mir weiter helfen.

mFg Maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon Basti am 29.06.2008, 14:28

Also das mit der URL liegt schon einmal daran, dass du anstatt method als Parameter methode geschrieben hast, sodass auf die Standardmethode GET zurückgegriffen wird. Da muss also einfach das e entfernt werden.

Das mit der schon zu Beginn erscheinenden Fehlermeldung kommt dadurch, dass du einfach nur überprüfst, ob das Session-Passwort und die entsprechende Variable aus dem Script nicht übereinstimmen. Wenn das Formular aber noch nicht abgeschickt wurde, ist deine zugewiesene Variable einfach leer und somit trotzdem ungleich dem Passwort in der Session (vorausgesetzt natürlich es ist nicht auch leer ;) ).
Deshalb solltest du einfach vor den entsprechenden Operationen rund um die Formulareingaben if-Abfragen machen, ob das Formular überhaupt abgeschickt wurde, die entsprechenden POST-Variablen also existieren. Das geht einfach über die Funktion isset():

Code: Alles auswählen
if(isset($_POST['mail']) && isset($_POST['pw']) && ...)
{
}
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Re: Probleme mit kleinem Script

Beitragvon Ingo am 29.06.2008, 14:49

Ergänzend dazu: Unterscheide Strings in einfachen 'Anführungszeichen' von Strings in doppelten "Anführungszeichen":
Bei einfachen Anführungszeichen werden Variablen innerhalb des Strings nicht ersetzt, bei doppelten hingegen schon:

Code: Alles auswählen
<?php
$huhu = 'hallo'; 

echo 'Die Variable hat den Wert $huhu!';    // Variable wird _nicht ersetzt
// Ausgabe: Die Variable hat den Wert $huhu!

echo "Die Variable hat den Wert $huhu!";    // so geht's
// Ausgabe: Die Variable hat den Wert hallo!

echo 'Die Variable hat den Wert '.$huhu.'!';  // so auch
// Ausgabe: Die Variable hat den Wert hallo!
?>

Innerhalb von einfachen Anführungszeichen sind " ganz normale Zeichen, die einfach wörtlich wiedergegeben
werden. Sie markieren weder String-Anfang noch -Ende. - Du könntest deinen Code wie im 3. Beispiel abändern:

Code: Alles auswählen
echo '<BR> ... <input name="mail" type="text" value="'.$_SESSION[email].'"></td></tr>';

D.h. hinter value=" den String beenden, mit . (Punkt) die Variable anhängen, wieder mit . den Rest anhängen.
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Probleme mit kleinem Script

Beitragvon maex11 am 29.06.2008, 17:20

Huhu

Code: Alles auswählen
<?php
   echo '<BR>';
   if($_SESSION["login"] == false) {
               echo '<p align="center">Du kannst deinen Account nicht ändern, da du nicht eingeloggt bist.</p>';
                   } else {
               // Config include
               include('lib/configuration.php');
               
               // Überschrift & Formular
                  echo '<B>Profil ändern</b><BR>';
                  echo '<form method="POST" action="index.php?page=40" target="">';
                  echo '<BR><tr><td align="left">Altes Passwort:</td><td align="right"><input name="pw_old" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Email:</td><td align="right"><input name="mail" type="text" value="'.$_SESSION[email].'"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort:</td><td align="right"><input name="pw" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort wdh.:</td><td align="right"><input name="pw_wdh" type="password"></td></tr>';
                  echo '<BR><input type="submit" name="submit" value="Absenden">';
                  echo '</form>';

                  // Variabeln aus dem Formular
                     $email = $_POST['mail'];
                     $password  = md5($_POST['pw']);         // md5 verschlüsselt das Passwort
                     $password_wdh = md5($_POST['pw_wdh']);    // mit Verschlüsselt, damit die Passwörter gleich sind. Wird nicht gespeichert
                     $pw_old = $_POST['pw_old'];
                     $submit = $_POST['submit'];
                     $id = $_SESSION[id];
                  
               if(isset($id) && isset($email) && isset($password) && isset($password_wdh) && isset($pw_old) && isset($submit)) {                        
                  // if-Abfrage
                  if($pw_old !== $_SESSION['password']) {
                     if(empty($email) OR empty($password) OR empty($password_wdh)) {
                        echo 'ERROR - Du hast ein Feld nicht ausgefüllt.';
                          } else {
                        // Neue Passwörter identisch?
                        if($password !== $password_wdh) {
                           echo "ERROR - Deine neuen Passwörter sind nicht identisch!";
                           } else {
                            $mysql = "UPDATE usersystem_users Set password = '.$password.', email = '.$email.' WHERE id = '.$id.'";   
                           echo 'Du hast dein Profil erfolgreich geändert.';
                        }
                     }
                      } else {
                     echo 'ERROR - Dein Aktuelles Passwort ist falsch.';
                  }
                }else{
                  echo '';
               }
   }
?>


Also bis jetzt funkts schonmal... nur das der MySQL befehl nicht ausgeführt wird.

Code: Alles auswählen
                  // Variabeln aus dem Formular
                     $email = $_POST['mail'];
                     $password  = md5($_POST['pw']);         // md5 verschlüsselt das Passwort
                     $password_wdh = md5($_POST['pw_wdh']);    // mit Verschlüsselt, damit die Passwörter gleich sind. Wird nicht gespeichert
                     $pw_old = $_POST['pw_old'];
                     $submit = $_POST['submit'];
                     $id = $_SESSION[id];


Ob es an diesen Zeilen liegt, denke ich mal nicht oder muss ich " " einsetzten?

mFg
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon Avedo am 29.06.2008, 17:29

Welches Error wird den ausgegeben? ich würde mal
Code: Alles auswählen
if($password != $password_wdh) {...}
anstatt
Code: Alles auswählen
if($password !== $password_wdh) {...}
schreiben. Eine Typ-Überprüfung ist hier überflüssig.
MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 613
Registriert: 09.12.2007, 20:12
Wohnort: Göttingen

Re: Probleme mit kleinem Script

Beitragvon maex11 am 29.06.2008, 17:36

Huhu,

1:
Es wird kein ERROR ausgegeben, wenn ich auf Absenden drücke im Formulaar kommt haltd ie Meldung wenn es erfolgreoich war.
Aber es wird nicht geupdate in der DB. Weil ich mich mit dem alten PW einloggen kann, aber nicht mit dem neuen.

Noch ne Frage:
Code: Alles auswählen
if($sql) {
             echo 'Ausführung erfolgreich';
} else {
             echo 'Ausführung gescheitert';
}

Würde so etwas funktionieren?


mFg maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon Ingo am 29.06.2008, 18:28

Jaja, die Strings ... :mrgreen: Versuch mal folgende Änderung von ...
$mysql = "UPDATE usersystem_users Set password = '.$password.', email = '.$email.' WHERE id = '.$id.'";
in ...
Code: Alles auswählen
$mysql = "UPDATE usersystem_users Set password = '$password', email = '$email' WHERE id = '$id'"; 

Also einfach die Punkte weglassen. Innerhalb von doppelten Anführungszeichen kann man Variablen einfach
so 'reinschreiben; die werden automatisch ersetzt. Die einfachen Anführungszeichen spielen innerhalb
von " " keine Rolle. :stapelschwein:

PS: Wo wir gerade bei dieser Zeile sind: Ich sehe in dem gesamten Code keinen MySQL-Zugriff der Form
mysql_query("BEFEHL", $db) OR die(mysql_error());. Bis jetzt ist ja nur die Variable $mysql belegt,
aber keine DB-Aktion ausgeführt - oder passiert das anderswo/später?
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Probleme mit kleinem Script

Beitragvon Avedo am 29.06.2008, 18:51

Er braucht nicht einmal die ', denn wie du schon richtig gesagt hast können Variabeln in doppelten Anführungszeichen einfach so ausgegeben bzw. gesetzt werden. Also:
Code: Alles auswählen
$pet = 'Hase';
echo "Ich habe ein $pet .";

MfG, Andy

//EDIT: Deshalb sollte man möglichst oft normale Anführungszeichen verwenden, da dies die Performence eines Scripts steigert, da bei doppelten Anführungszeichen der übergebene Inhalt noch auf eventuell vorkommende Variabeln geprüft werden muss bzw. diese ersetzt werden müssen.
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 613
Registriert: 09.12.2007, 20:12
Wohnort: Göttingen

Re: Probleme mit kleinem Script

Beitragvon Ingo am 29.06.2008, 19:04

Jo, d'accord soweit; hier geht's nun allerdings speziell um einen MySQL-Query; dort müssen (Feld-)Werte
je in Anführungszeichen gesetzt werden. Jedenfalls scheint das die gängige Praxis zu sein.

Übrigens: Bastis MySQL-Grundlagen -Tutorial :wink:
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 724
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Probleme mit kleinem Script

Beitragvon maex11 am 29.06.2008, 19:48

Huhu,
schon mal danke an alle die mir helfen :D

also den DB Code der is nicht extern der kommt ins ding noch.

nur ich hab grad ne Idee mit ner If Anfrage noch:
Code: Alles auswählen
$ausführen = mysql_query($mysql);

if($ausführen) {
          echo "Dein Profil wurde erfolgreich geändert."; // MySQL erfolgreich geupdatet
}else{
          echo "Dein Profil wurde nicht erfolgreich geändert"; // MySQL gescheitert zu updaten
}


so mach ich es jetzt............ und so schaut dann der Code aus:
Code: Alles auswählen
<?php
/*******************************************/
/***  Usersystem Addon ©  by Maexology.de.vu ***/
/***             Addon: Profil ändern                         ***/
/***  MAIL:                  maexology@yahoo.de      ***/
/*******************************************/
   echo '<BR>';
   if($_SESSION["login"] == false) {
               echo '<p align="center">Du kannst deinen Account nicht ändern, da du nicht eingeloggt bist.</p>';
                   } else {
               // Config include
               include('lib/configuration.php');
               
               // Überschrift & Formular
                  echo '<B>Profil ändern</b><BR>';
                  echo '<form method="POST" action="index.php?page=40" target="">';
                  echo '<BR><tr><td align="left">Altes Passwort:</td><td align="right"><input name="pw_old" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Email:</td><td align="right"><input name="mail" type="text" value="'.$_SESSION[email].'"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort:</td><td align="right"><input name="pw" type="password"></td></tr>';
                  echo '<BR><tr><td align="left">Neues Passwort wdh.:</td><td align="right"><input name="pw_wdh" type="password"></td></tr>';
                  echo '<BR><input type="submit" name="submit" value="Absenden">';
                  echo '</form>';

                  // Variabeln aus dem Formular
                     $email = $_POST['mail'];
                     $password  = md5($_POST['pw']);         // md5 verschlüsselt das Passwort
                     $password_wdh = md5($_POST['pw_wdh']);    // mit Verschlüsselt, damit die Passwörter gleich sind. Wird nicht gespeichert
                     $pw_old = $_POST['pw_old'];
                     $submit = $_POST['submit'];
                     $id = $_SESSION[id];
                  
               if(isset($id) && isset($email) && isset($password) && isset($password_wdh) && isset($pw_old) && isset($submit)) {                        
                  // if-Abfrage
                  if($pw_old !== $_SESSION['password']) {
                     if(empty($email) OR empty($password) OR empty($password_wdh)) {
                        echo 'ERROR - Du hast ein Feld nicht ausgefüllt.';
                          } else {
                        // Neue Passwörter identisch?
                        if($password !== $password_wdh) {
                           echo "ERROR - Deine neuen Passwörter sind nicht identisch!";
                           } else {
                            $mysql = "UPDATE usersystem_users Set password = '$password', email = '$email' WHERE id = '$id'";   
                           $ausführen = mysql_query($mysql);
                           if($ausführen) {
                                     echo "Dein Profil wurde erfolgreich geändert."; // MySQL erfolgreich geupdatet
                             }else{
                                     echo "Dein Profil wurde nicht erfolgreich geändert"; // MySQL gescheitert zu updaten
                           }
                        }
                     }
                      } else {
                     echo 'ERROR - Dein Aktuelles Passwort ist falsch.';
                  }
                }else{
                  echo '';
               }
   }
/*******************************************/
/***  Usersystem Addon ©  by Maexology.de.vu ***/
/***             Addon: Profil ändern                         ***/
/***  MAIL:                  maexology@yahoo.de      ***/
/*******************************************/
?>


mFg Maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon maex11 am 30.06.2008, 14:15

Huhu

komisch also, wenn ich jetzt mich einloggen will muss ich das von gestern geänderte PW eingeben. Also liegt da iwas mit deb $_SESSION oder warum geht die Einstellung erst am nächsten Tag?

mFg maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22

Re: Probleme mit kleinem Script

Beitragvon maex11 am 01.07.2008, 15:35

Huhu,
*COOL Bin - 3fach Post in :dw: :stapelschwein: *


~~ Problem gelöst ~~~
(vorerst)

=====
mfg maex11
maex11
Mitglied
 
Beiträge: 68
Registriert: 16.05.2008, 11:22


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast