Login-Script mit PHP und Mysql ...

-GS-Master

Erfahrenes Mitglied
Ich hab schon seid längerer Zeit ein Loginscript, welches aber bisjetzt mit Textdateien arbeitete. Es suchte immer nach einem einer Datei und las daraus dann den Namen und das mit md5 Codierte Passwort.

Nun möchte ich dieses Loginscript etwas verändern, dass es die Daten aus einer Tabelle ausließt
-----------------------------
| Name | Passwort |
-----------------------------

Da das ganze mit Sessions arbeitet brauche ich nur diesen Teil hier reinstellen, da der Rest ja geht ^^ nur bei dem weiß ich nicht ob das stimmt ... soweit ich gemerkt habe nicht ^^ weiß aber auchnicht wie ich das ändern muss

PHP:
// inlcude --> database, pw, name etc.
include_once 'include/dcon.php';
$sql="SELECT * admin";
$result = mysql_query($sql,$verbindung);

while($row = mysql_fetch_array($result)){
//Eingaben überprüfen
if($name == $row["name"] && $pw == $row["pwd"]){
$_SESSION["eingeloggt"] = "true";
}
}
 
Dein Query ist völlig falsch:

PHP:
$sql = 'SELECT * FROM admin WHERE `nickname`="'.$nickname.'" AND `passwort`="'.$passwort.'"';


ich würde den unteren Teil allerdings anders machen. Es gibt unter den Tutorials ein Login Tutorial
 
Habs nun so gelöst !!

PHP:
<?php
session_start();

include_once 'include/dcon.php';
$select = mysql_query("SELECT * FROM admin ORDER by Name");

//Anmelden
if (isset($_POST['Login'])){
$name = $_POST['name'];
$pw = $_POST['pw'];

$name = md5($name); 
$pw = md5($pw); 

while($row = mysql_fetch_array($select)){
//Eingaben überprüfen
if($name == $row["Name"] && $pw == $row["Passwort"]){
$_SESSION["eingeloggt"] = "true";
}
}
}
 
Je mehr User dein Projekt haben wird, desto länger wird der Login dauern.

Wieso hast du dich nicht an Kalmas Vorschlag orientiert?
 
Hi,
kurz zwei drei kleine dinge:

//Edit: da war wohl jemand schneller :)
1. Das Query von Kalma ist besser. Wenn du zb. 1000 oder mehr benutzer hast, und ne liste bekommst, in der dein benutzer am ende der liste steht, dann brauchst du seehr lange, um jemanden einzuloggen. Die Datenbank kann das besser, als irgendein PHP script.

2. Glaube nie, was ein Benutzer eingibt. Sowas hier, kann unter umständen dein script zerhauen. Besser du überprüfst, dass da kein schadcode drin ist.

3. Warum verschlüsselst du den Namen? Wenn du später wegen irgendetwas in deiner Datenbank mit phpMyAdmin oder so Benutzer löschen musst, dann hast du dicke probleme, weil du sie nicht findest.

MfG
Xean

PS: Die Tipps sind alle auf ein Projekt bezogen, was du nicht lokal für dich benutzt, sondern, was irgendwann im Internet benutzt wird.
 
N'abend,

ich könnte jetzt einfach den Link zu dem Tutorial geben, aber ich hab eh grad langeweile, also schreib ichs auf...

zuerst mal deine Form:
HTML:
<form action="login.php" method="post">
  Nickname: <br />
  <input type="text" name="nickname" />

  <br /><br />

  Passwort: <br />
  <input type="password" name="passwort" />

  <br /><br />
  <input type="submit" value="Login" name="submit" />
</form>

dann deine login.php
PHP:
<?php
  # prüfe, ob "submit" benutzt wurde #
  if((isset($_POST['submit'])) && ($_POST['submit'] == 'Login')) {
    # Daten posten #
    $nickname  = $_POST['nickname'];
    $passwort   = $_POST['passwort'];

    $query = 'SELECT
                       *
                  FROM
                       deine_user_tabelle
                  WHERE
                       `nickname` = "'.$nickname.'"
                  AND
                       `passwort` = "'.$passwort.'"
                  LIMIT
                       1'; # Das Limit 1 nur, wenn du jeden Usernamen nur einmal vergeben lässt.
    $result = mysql_query($query) or die(mysql_error());

    if(mysql_num_rows($result) == 1) {
      # session starten #
      session_start();
      $data = mysql_fetch_array($result);

      $_SESSION['user_id'] = $data['id'];
      $_SESSION['nick']      = $data['nickname'];

       header('Location: private_seite.php');
    } else {
       die('Deine Login-Daten waren falsch!');
    }
  } else {
    header('location: login_form.php');
  }
?>

dann noch die Funktion, die prüft, ob ein User eingeloggt ist:
PHP:
function check_user()
{
  if((!isset($_SESSION['user_id']) || (empty($_SESSION['user_id']))) {
    header('location: login_form.php');
  }
}

Hoffe ich hab nichts vergessen... ist nicht perfekt, aber so geht's :P
 
PHP:
$nickname  = $_POST['nickname'];
    $passwort   = $_POST['passwort'];

    $query = 'SELECT
                       *
                  FROM
                       deine_user_tabelle
                  WHERE
                       `nickname` = "'.$nickname.'"
                  AND
                       `passwort` = "'.$passwort.'"
                  LIMIT
                       1';
sehr böse!
gib mal als Username einen namen ein den es als user gibt, und hänge '-- dran (hochkomma, und zwei minuszeichen) und irgendein X-beliebiges passwort und du bis drin.

So wäre es besser:
PHP:
$nickname= mysql_real_escape_string( $_POST['nickname'] );
$passwort= mysql_real_escape_string( $_POST['passwort'] );
 
Werde es beherzigen ^^ mir gings eigentlich drum 1nem Benutzer die Möglickeit zu geben -.-
So zusagen als Adminlogin für ne Page -.-

Kenn mich mit MySql noch nicht so richtig aus ^^ bisher hatt es immer gereicht die Daten meiner Datenbank etc. anzugeben -.- den Query hab ich auch bloß mit Hilfe anderer Scripts zusammengetextet ...

Danke für eure Hilfe
Warum ich den Vorschlag nicht beherzigt habe?
Hatt zwar den Query aber war zu blöd herauszufinden wie der Rest dann ist ... und da ich bis heute fertig sein wollte/musste, hab ich meinen hergenommen ...
 
Aber was ist denn, wenn du später mal mehrere Benutzer hast? Wennes so hast, wie jetzt, dann kannstes immer weiterverwenden
 
Zurück