admin erstellen

Alles, was PHP betrifft, kann hier besprochen werden.

admin erstellen

Postby Tezkatlipoka » 19. September 2008 21:46

Hallo zusammen!

Ich arbeite mich ja gerade in php ein, und da erklärt mir der Autor meines Buches (Buch) wie ich mittels Mini-CMS eine dynamische Homepage erstellen kann. Ich soll auch einen Admin anlegen. Dazu schreib er labidar:
Damit Sie sich beim ersten Mal einloggen können, sollten Sie einen Benutzer anlegen. Dafür können Sie das PHP-Skript create_admin.php nutzen.[...]

Das Skript sieht folgendermaßen aus:
Code: Select all
<?php

  include('database.inc.php');
 
  $user = $_GET['user'];
  $pass = $_GET['pass'];
 
  $con = mysql_connect($db['host'],$db['uid'],$db['pwd']);
  if($con)
  {
    if(mysql_select_db($db['db']))
    {
      $pass_enc = md5($user,$pass);
      $sql = "INSERT INTO user (username,password,email,active) VALUES ('$user','$pass_enc','','true')";
      $result = mysql_query($sql);
      if($result)
      {
        echo "Admin wurde mit folgenden Daten erzeugt:<br><b>Benutzer:</b> $user<br><b>Passwort:</b> $pass";
      }
      else
      {
        echo 'Admin wurde nicht erzeugt!!!';
      }
    }
  }

?>

Nun verstehe ich auch nach Suche im Netz nicht wie das von Statten gehen soll?

Kann mir jemand einen Tipp geben? Wenn ich das Skript aufrufe, dann erscheint (natürlich) nur das 2. 'echo'. Wenn ich das richtig verstehe, dann sollte das PHP-Skript den User inkl. Passwort in der Datenbank anlegen, oder? Muss ich die Variablen '$user' & '$pass_enc' noch irgendwo definieren/einfügen?

Vielen Dank schon mal im Voraus!!!!!

Grüsse
Christoph

P.S.: Die Datei 'database.inc.php' ist im selben Verzeichnis.
P.P.S.: database.inc.php:
Code: Select all
<?php

  $db['host'] = 'localhost';
  $db['uid'] = 'root';
  $db['pwd'] = 'xyz';
  $db['db'] = 'minicms';

?>

Die Variablen sind hier richtig definiert. Die Verbindung zur Datenbank klappt.
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35

Postby glitzi85 » 19. September 2008 23:01

Naja, du musst das Script so aufrufen:

http://localhost/create_admin.php?user= ... s=passwort

Sollte es dann immer noch nicht funktionieren, dann mach mal nach dieser Zeile:

Code: Select all
$result = mysql_query($sql);


noch ein
Code: Select all
mysql_error();


rein, dann siehst du ob es einen Fehler beim Einfügen in die Datenbank gab.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby Xardas der Dunkle » 19. September 2008 23:59

Kommt mir sehr bekannt, vor. Schade das es das Forum zum Buch nicht mehr gibt =(.

Vor allem befindet sich noch ein Fehler im Script.
Code: Select all
$pass_enc = md5($user,$pass);


müsste:
Code: Select all
      $pass_enc = md5($user . $pass);

oder:
Code: Select all
      $pass_enc = md5($pass);

lauten.
Wobei du darauf achten solltest das es in der admin/login.php genau so steht, dort befindet sich dieser Fehler nämlich auch :(.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby Tezkatlipoka » 20. September 2008 07:15

Vielen Dank für Eure Antworten!!

Mein Skript sieht jetzt wie folgt aus:
Code: Select all
<?php

  include('database.inc.php');
 
  $user = $_GET['user'];
  $pass = $_GET['pass'];
 
  $con = mysql_connect($db['host'],$db['uid'],$db['pwd']);
  if($con)
  {
    if(mysql_select_db($db['db']))
    {
      $pass_enc = md5($user . $pass);
      $sql = "INSERT INTO user (username,password,email,active) VALUES ('$user','$pass_enc','','true')";
      $result = mysql_query($sql);
      if($result)
      {
        echo "Admin wurde mit folgenden Daten erzeugt:<br><b>Benutzer:</b> $user<br><b>Passwort:</b> $pass";
      }
      else
      {
        echo 'Admin wurde nicht erzeugt!!!';
      }
      echo mysql_error();
    }
  }

?>

Und die Fehlermeldung lautet:
Admin wurde nicht erzeugt!!!Duplicate entry '' for key 3

In der Datenbank gibt es jedoch gar keinen Eintrag mit der ID 3. Es ist dort nur ein Eintrag (ohne mein Zutun), allerdings ohne 'username'. Jediglich ein Passwort ist vergeben.

:?: :?: :?:

Grüsse
Christoph
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35

Postby Xardas der Dunkle » 20. September 2008 11:01

Ist das Feld `id` auf AUTO_INCREMENT gestellt?
Ich habe nämlich Ausgabe 2 des Buches und dort fehlen sowohl das Anmeldescript als auch die user-tabelle. Anmeldescript gab es auf der HP zum download und die user-Tabelle musste man sich glaube ich selber zusammen stellen.
Bei mir sieht sie so aus:
Code: Select all
CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(64) collate latin1_general_ci NOT NULL default '',
  `password` varchar(255) collate latin1_general_ci NOT NULL default '',
  `email` varchar(255) collate latin1_general_ci NOT NULL default '',
  `active` enum('true','false') collate latin1_general_ci NOT NULL default 'false',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby Tezkatlipoka » 20. September 2008 12:51

Ich hab die 3.Auflage (korrigierter Nachdruck 08 ) und dort liegt das komplette Tutorial zum CMS auf DVD bei:
Code: Select all
CREATE TABLE user (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(64) NOT NULL DEFAULT '',
  password VARCHAR(255) NOT NULL DEFAULT '',
  email VARCHAR(255) NOT NULL DEFAULT '',
  active ENUM('true','false') NOT NULL DEFAULT 'false',
  UNIQUE KEY username (username),
  UNIQUE KEY email (email)
);


So sieht zum Beispiel das aktuelle Gegenstück zu Deinem geposteten Code aus. Tja, das Forum zum Buch wäre keine schlechte Sache... :(

Ich hätte da noch eine zusätzliche Frage: Im folgenden Code verstehe ich die Zuweisung '->' nicht. Was bedeutet dieser Pfeil?

Code: Select all
<a href=\"$PHP_SELF?cmd=articlesdet&id=$articles->id\">$articles->title</a><br>\n"


Grüsse
Lester

P.S.:Weshalb ist bei Dir das Charset immer explizit angegeben?
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35

Postby Xardas der Dunkle » 20. September 2008 14:20

Code: Select all
  UNIQUE KEY email (email)

dort liegt der Schuh begraben, mit key 3 ist nicht die ID Nr. 3 gemeint sondern der 3. Wert der an INSERT übergeben wurde.

Änder das Script mal wie folgt ab:
Code: Select all
<?php

include('database.inc.php');
 
$user  = $_GET['user'];
$pass  = $_GET['pass'];
$email = $_GET['email'];
 
$con = mysql_connect($db['host'],$db['uid'],$db['pwd']);
if($con) {
    if(mysql_select_db($db['db'])) {
        $pass_enc = md5($user . $pass);
        $result = mysql_query(
            'INSERT INTO user (username,password,email,active) VALUES (\'' .
            mysql_real_escape_string($user) . '\',\'' .
            mysql_real_escape_string($pass_enc) . '\',\'' .
            mysql_real_escape_string($email) . '\',\'true\')'
        );
        if($result) {
            echo "Admin wurde mit folgenden Daten erzeugt:<br><b>Benutzer:</b> $user<br><b>Passwort:</b> $pass";
        } else {
            echo 'Admin wurde nicht erzeugt!!!';
        }
        echo mysql_error();
    }
}


Und ruf es dann mit: create_admin.php?user=<USERNAME>&pass=<PASSWORD>&email=<EMAIL> auf

Ich hätte da noch eine zusätzliche Frage: Im folgenden Code verstehe ich die Zuweisung '->' nicht. Was bedeutet dieser Pfeil?

Das ist der Objekt Operator.
Ich habe meine Ausgabe, momentan verliehen, sonst könnte ich dir eine genaue Seitenangabe geben. Aber schlag mal im Inhaltsverzeichnis die Kapitel "Classen" und "PHP 5" nach.

P.S.:Weshalb ist bei Dir das Charset immer explizit angegeben

Weil ich mir den Query von PHPMyAdmin ausgeben lassen habe.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby Tezkatlipoka » 21. September 2008 13:27

Vielen Dank, hat geklappt! Warum hab ich noch nicht kapiert, aber da komm ich hoffentlich noch drauf... :roll:

Grüsse
Christoph
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest