php login-problem



  • Hi,

    hab ihr ein großes Problem mit meinem login...
    Ich bau hier gerade ein Login. Mit Name und passwort. Die Tabellenstruktur sieht folgendermaßen aus:

    Spalten: Rollen_id, MA_PersNR, Passwort.

    Zur Erklärung in der Rollen-id steht entweder eine 1 oder eine o
    1= Admin
    0= Mitarbeiter

    Die Ma_PersNR beinhaltet die Personal Nummer.

    Passwort halt passwort.

    So nun folgender Code, den ich mir gebastelt hab, jedoch knallt es.
    Hab 2 Dateien einmal login.php (beinhaltet halt die Maske quasi HTML Code)
    und dann die Datei check.php die halt alles checked.

    So nun die login.php.

    <?
    ob_start(); 
    $sname=" / Login";
    include("includes/config.php"); 
    ?>
    
    <style type="text/css">
    <!--
    body {
    	margin-left: 0px;
    	margin-top: 0px;
    	margin-right: 0px;
    	margin-bottom: 0px;
    }
    -->
    </style>
    <link href="style_norm.css" rel="stylesheet" type="text/css">
    
    <style type="text/css">
    <!--
    .style3 {font-size: 11px}
    -->
    </style>
    <table width="100%" height="100%"  border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td align="center" valign="middle"><table width="251"  border="1" cellpadding="5" cellspacing="0" bordercolor="#006600">
          <tr>
            <td width="251" align="center"><table width="100%" border="0" cellspacing="5" cellpadding="5">
              <tr>
                <td><img src="images/logo.gif" width="149" height="74"></td>
                </tr>
              <tr>
                <td><span class="style3">Bitte loggen Sie sich mit Ihrem Benutzernamen und Passwort ein. </span></td>
              </tr>
              <tr>
                <td>
    
    			<form name="Eingabe" action="check.php" method="post">
                                <table width="250" border="0" align="center" cellpadding="1" cellspacing="1">
                                  <tr> 
    				<td>Name:</td>
    				<td><input name="ma_pnr" type="text" class="loginfield" size="20"></td>
    			   </tr>
    			   <tr>
    				<td>Passwort:</td>
    				<td><input name="passwort" type="password" class="loginfield" size="20" maxlength="15"></td>
    			   </tr>
    			   <tr> 
    				<td>&nbsp;</td>
    				<td><input class="button" onclick="this.blur()" onfocus="this.blur()" type="submit" name="submit" value="Login"> 
    				 <input name="send" type="hidden" id="send" value="1">
                                      <input name="url" type="hidden" id="url" value="adminverwaltung.php">
                                     <br>                                  </td>
    			   </tr>
    			  </table>
    			 </form>			</td>
                </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
         </tr>
         <td align="center"><a href="adminverwaltung.php" target="_self">zu Adminverwaltung</a></td>
         </tr>
         <tr>
         <td align="center"><a href="Mitarbeiter_account.php" target="_self">zum Mitarbeiter Account</a></td>
    
            <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
         </tr>
    
    </table>
    

    und jetzt die check.php

    <html><body>
    
    <?php
    	$benutzer=$HTTP_POST_VARS['benutzer'];
    	$pass=$HTTP_POST_VARS['pass'];
    	$db=mysql_connect("localhost","root","");
    	mysql_select_db("tecsphere);
    	$anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='$passwort' AND user_activated='1' AND user_gesperrt='0'";
    	$anfrage.=$benutzer;
    	$anfrage.="'";
    	$anfrage.="'";
    	$ergebnis=mysql_query($anfrage);
    	$anz=mysql_num_rows($ergebnis);
    	if/$anz==1)  {
    		$zeile=mysql_fetch_row($ergebnis);
    		if($pass==$zeile[1])  {
    			print("<b>Login korrekt</b>");
    			print"<p>Klicken Sie hier zum Zugang:</p>);
    			print("<a href='test.html'>Geschützer Bereich</a>");
    		}
    		else  {
    			print("Benutzername korrekt, Passwort NICHT KORREKT!");
    			print("<a href='login.php'>Noch ein Versuch...</a>;
    
    		}
    		}
    	else {
    		print("Benutzername NICHT vorhanden!<br>");
    	print(" href='login.php'> Noch ein VErsuch..</a>;
    	}
    	mysql_close($db);
    	?>
    </body></html>
    

    Sorry, wenn ich falsch gepostet hab aber ich habs sehr eilig... 😞
    Ich hoffe, irgendwer kann mir helfen...

    Lg jule



  • $benutzer=$HTTP_POST_VARS['benutzer'];
        $pass=$HTTP_POST_VARS['pass'];
        $db=mysql_connect("localhost","root","");
        mysql_select_db("tecsphere);
        $anfrage="SELECT * FROM login WHERE ma_pnr='".$_REQUEST[ma_pnr]."' AND passwort='$passwort' AND user_activated='1' AND user_gesperrt='0'";
        $anfrage.=$benutzer;
        $anfrage.="'";
        $anfrage.="'";
    

    1. Woher bekommst du "ma_pnr"?
    2. Wieso hängst du an die "SELECT"-Anweisung den Benutzernamen?



  • Was heisst es "kracht".
    Haben denn alle Variablen den korrekten Inhalt?
    Liefert dein Query das richtige Ergebniss?



  • [quote]1. Woher bekommst du "ma_pnr"?[code]

    ma_pnr ist die spalte von der tabelle login.
    Dort wird die Personalnr gespeichert.

    Ich wollte quasi alles über ein SELECT abfragen.
    geht das nicht? Was wäre denn die bessere Lösung?

    lg Jule



  • Ich wollte quasi alles über ein SELECT abfragen.
    geht das nicht?[/quote]

    Was meinst du damit? Willst du nur alle Datensätze auslesen oder was anderes?

    Ich kann aus deinem Code nicht ersehen, wo der Inhalt der Variablen $benutzer herkommt. Desweiteren benutzt du im HTML Code ein Feld namens "passwort", im PHP Code hast du aber nur 'pass'. Schreibfehler oder Absicht?



  • Ne ist eigentlcih keine Absicht. Hab den Code Teilweise aus einem Buch
    und deswegen diesen Fehler nicht berücksichtigt.
    Ich hab halt meine Ideen noch mit ein bezogen, die realisiert werden müssen.
    Dabei ist wohl etwas schief gelaufen...

    Ich muss dazu sagen das PHP nicht meine Welt ist und ich aus der c++ ecke komme.
    Deswegen hab ich n großes Problem mich in kurzer zeit mit php auseinander zusetzten.

    Hat jemand einen anderen Lösungsvorschlag??
    Denn die schon oben genannten tabellen Struktur will ich nicht ändern die soll
    so bleiben.
    Das Komplizierte ist halt diese Rechtevergabe 1= Admin und 0= Mitarbeiter
    und das soll bei dem Login berücksichtigt werden...

    Herje... 😞



  • Hi.

    Die check.php würde ich so nicht machen.
    Da hast du auch paar Sicherheits relevante Daten unssauber behandelt.
    Warum und Wo?

    if/$anz==1)  { 
      $zeile=mysql_fetch_row($ergebnis); 
      if($pass==$zeile[1])  { 
        print("<b>Login korrekt</b>"); 
        print"<p>Klicken Sie hier zum Zugang:</p>); 
        print("<a href='test.html'>Geschützer Bereich</a>"); 
      } 
      else  { 
        print("Benutzername korrekt, Passwort NICHT KORREKT!"); 
        print("<a href='login.php'>Noch ein Versuch...</a>; 
      } 
    } 
    else { 
      print("Benutzername NICHT vorhanden!<br>"); 
      print(" href='login.php'> Noch ein VErsuch..</a>;
    }
    

    Ich würde bei falschen Login-Daten nicht so eine Fehlermeldung bringen.
    Eher das sagen: "Benutzername oder Passwort falsch!!!", somit weiß niemand ob der Benutzername exestiert oder ob nur das PWD falsch ist.

    Hier ein Lösungsvorschlag (nicht getestet und anpassen):

    <html><body> 
    <?php
      $benutzer = $HTTP_POST_VARS['ma_pnr'];
      $pass     = md5($HTTP_POST_VARS['passwort']);  //md5() nur nutzen, wenn PAsswörter mit md5() verschlüsselt wurden. Sonst anpassen.
    
      if ((!isset($username)) OR (!isset($pass))) {
        die ("Sorry, aber ohne Name bzw. Passwort geht hier nichts !");
      }
    
      $db = mysql_connect("server","user","pwd");
      mysql_select_db("tecspere",$db);
    
      $login_check  = "SELECT `password`,`user_activated`,`user_gesperrt` ";
      $login_check .= "FROM `login` ";
      $login_check .= "WHERE `name` = '".$benutzer."'";
    
      $result = mysql_query($login_check,$db);
    
      $zeileholen = mysql_fetch_array($result,MYSQL_ASSOC);
      mysql_close($db);
    
      if(!$zeileholen || $zeileholen["password"] <> $pass) {
        die("Benutzername oder Passwort falsch!!!");
      }
    
      if($zeileholen["user_activated"] == 0) {
        die("Benutzername ist inaktiv!!!");
      }
    
      if($zeileholen["user_gesperrt"] == 1) {
        die("Benutzer gesperrt!!!");
      } 
    ?>
    <a href="test.html">Geschützer Bereich</a>
    </body></html>
    


  • <html><body> 
    <?php 
    
    if ( !isset($ma_pnr)) $ma_pnr=0;
    
    $benutzer = $HTTP_POST_VARS['ma_pnr']; 
    $pass = md5($HTTP_POST_VARS['passwort']); //Passwort ist mit md5 verschlüsselt.
    
    if ((!isset($benutzer)) OR (!isset($pass))) { 
    die("Name und Passwort ist nicht bekannt !"); 
    } 
    
    $db = mysql_connect("localhost","root",""); 
    mysql_select_db("test"); 
    
    $login_check .= "SELECT `password`,`rollen_id`"; // user_activated`,`user_gesperrt soll eigentlich nur rollen_id überprüft werden
    $login_check .= "FROM `login` "; 
    $login_check .= "WHERE `ma_pnr` = '".$benutzer."' and 'passwort' = '".$pass."`"; 
    
    $result = mysql_query($login_check,$db); 
    
    $zeileholen = mysql_fetch_array($result); 
    mysql_close($db); 
    
    if(!$zeileholen || $zeileholen["password"] <> $pass) { 
    echo("Benutzername oder Passwort falsch!!!"); 
    } 
    
    if($zeileholen["rollen_id"] == 0) { 
    echo("Als Mitarbeiter eingeloggt"); 
    echo("<a href='Mitarbeiter_account.php'> Geschützer Bereich</a>");
    } 
    
    if($zeileholen["rollen_id"] == 1) { 
    echo("Als Admin eingeloggt"); 
    echo("<a href='adminverwaltung.php'> Geschützer Bereich</a>");
    } 
    ?> 
    <!--<a href="adminverwaltung.php">Geschützer Bereich</a>-->
    </body></html>
    

    Hi,

    hab jetzt das Problem das, er hier nen Fehler ausgibt.
    Ab hier knallt es:
    zeileholen=mysql_fetch_array(zeileholen = mysql\_fetch\_array(result);

    Dabei hab ich ma_pnr jetzt auf null gesetzt, siehe oben.
    Eigentlich sollte doch über das "Query" alles enthalten sein, oder?

    Ich merke gerade, das ich momentan echt net weiter komme...gnrrrr 🙄



  • Geb doch mal vor "zeileholen=mysql_fetch_array(zeileholen = mysql\_fetch\_array(result);"

    echo "<b>Sql:</b> ".$login_check."<br>";
    echo "<b>Fehlermeldung:</b>".mysql_error()."<br><br>";

    ein und sag was da rauskommt.

    Kann das sein das zwischen '`rollen_id`' und FROM ein Leerzeichen fehlt?;



  • Hm, wo genau soll da ein Leerzeichen sein???

    Also die Fehlermeldung:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\web\web\checked.php on line 22

    Aber was jetzt genau fehlt weiß ich auch nicht.



  • Naja der Query ist falsch soweit ich das sehe, der baut

    $login_check .= "SELECT `password`,`rollen_id`FROM `login` WHERE `ma_pnr` = 'blabla' and 'passwort' = 'blablabla`";

    Da seh ich schon 4 Fehler :o

    Überprüf mal Leerzeilen zwischen den Wörtern und ' bzw ` Setzung



  • Hm, ja das ist die Frage was ist in php erlaubt?
    nur so ´ oder ' oder `.
    Oder kann ich die genaue syntax von sql nehmen?

    Letzendlich denke ich doch, das der Hauptfehler bei diesen fetch ist. 😕
    Trotzdem danke.



  • Letzendlich denke ich doch, das der Hauptfehler bei diesen fetch ist.

    C++lerin schrieb:

    Also die Fehlermeldung:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\web\web\checked.php on line 22

    Also ist dein $result vom Query nicht korrekt!

    Du kannst dir den Query ja mal mit echo ausgeben lassen und diesen Text dann im phpmyadmin mal ausprobieren.

    Soweit ich weiss, kann man die Syntax in php genauso verwenden wie in mysql, denn der Query wird ja so wie er ist als Zeichenkette übergeben.
    Ein "´" ist mir in mysql noch nicht unter gekommen.



  • hab den fehler, hab machmal password geschrieben und dann manchmal passwort.
    na ja, als admin kann ich mich jetzt einloggen, aber wenn ich mich jetzt
    als mitarbeiter einlogge, (der ja quasi dann mit 0 erkannt wird!!)
    gibt es das aus:

    Benutzername oder Passwort falsch!!!Als Mitarbeiter eingeloggt Geschützer Bereich

    Und es soll nur Als Mitarbeiter eingeloggt Geschützer Bereich
    ausgegeben werden...hm... 😉 😮

    //Benutzername oder Passwort falsch!!! soll dann ausgegeben werden
    wenn nichts erkannt wird.



  • Also das ` braucht man nur bei spaltennamen die aus mehreren Wörtern bestehen.
    Beispiel:

    SELECT `ein Feld` FROM tabelle

    Da das aber niemand wirklich machen will(und sollte), kann man die auch weglassen.

    ' hingegen brauchst du wenn du mit Strings arbeitest, also

    SELECT feld1, feld2 FROM tabelle WHERE name = 'dreaddy';

    PS. spinnt der Login und die Codetags eigentlich nur bei mir heute?



  • Das Login funzt jetzt, hab abe jetzt Probleme wenn bei einer Maske
    Datensätzen per Textfelder in die DB einlesen will.

    Dabei ist Datei Checked1.php in der davorigen Maske richtig eingebunden sie
    wird mit dem Befehl "Action="checked1.php" welches der Button auslöst aufgerufen.

    Der Code (von der cheched.php) hier:

    <html>
    	<Body>
    	<?php
    
    	//$db = mysql_connect("localhost","root",""); 
    	$db = mysql_connect();
    	mysql_select_db("test", $db);
    	//mysql_select_db("test"); 
    
    	$sqlbef = "INSERT mitarbeiter VALUES
    	('$vn', '$nn', '$sto', '$ab')";
    	$sqlerg =mysql_query($sqlbef,$db);
    	If ($sqlerg)
    		ECHO "Datensatz hinzugefügt!";
    		else 
    		ECHO "Kein Datensatz hinzugefügt!";
    	mysql_close($db);
    	?>
        </body>
    </html>
    

    Ausgegeben wird halt nur: Kein Datensatz hinzugefügt!
    Auch hier knallt es wieder, dabei sind das Textfelder die den Wert als "Text"
    haben und müssen daher im php code mit ' eingebunden werden.
    Hm...ey warum kann nicht EINMAL was klappen 😉 ?



  • Die Anweisung sollte doch "INSERT INTO " heissen, oder`?



  • C++lerin schrieb:

    Hm...ey warum kann nicht EINMAL was klappen 😉 ?

    Dann nim dir das PHP-Handbuch mal zur Hilfe: php.net oder MySQL



  • Also ich empfehle auch mal einen Blick ins MySQL-Handbuch.

    Das Statement muß heißen:

    $sqlbef = "INSERT INTO mitarbeiter (vn, nn, sto, ab) VALUES
        ('$vn', '$nn', '$sto', '$ab')";
    

    Natürlich weiß ich nicht, ob Deine Spalten so heißen wie oben, musste evtl. noch anpassen.

    Gruß - Xaron


Log in to reply