Script geht auf einem Server und auf dem andern nicht

funnyzocker

Erfahrenes Mitglied
Hallo.
Ich habe heute meinen neuen Server bekommen.
Leider habe ich jetzt das problem das ich das Script was auf dem alten Server lief auf dem neuen nicht mehr läuft.

Genauer gesagt das einloggen nicht mehr.
PHP Version ist auf beiden Servern identisch.

Der einzige Unterschied ist diese Zeil aus der phpinfo
Neuer Server
Server API Apache 2.0 Handler
Alter server
Server API CGI/FastCGI

Hat das was zu bedeuten?

PHP:
<?php
  }elseif(!$_POST['username'] || $_POST['username'] == "") {
    echo '<p align="center">Einen Benutzernamen brauchen wir schon ;-)<br><br><a href="index.php?page=login">Zurück</a></p>';
  }elseif(!$_POST['password'] || $_POST['password'] == "") {
    echo '<form action="index.php?page=login" method="post">';
    echo '<p align="center">Ein Passwort brauchen wir schon ;-)<br><br>';
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
    echo '<input type="submit" name="zurueck" value="Zurück">';
    echo '</p>';
    echo '</form>';
  }else{
    $password = md5($password);
    $query = @mysql_query("SELECT user, pass FROM users WHERE user = '".$_POST['username']."'") or die('Select ist hlgeschlagen!');
    $result = @mysql_fetch_array($query) or die('<p align="center">Sorry, aber dieser Benutzername existiert nicht!<br><a ef="index.php?page=login">Zurück</a></p>');
    if($password != $result['pass']){
      echo '<form action="index.php?page=login" method="post">';
      echo '<p align="center">Sorry, aber dieses Passwort ist falsch!<br><br>';
      echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
      echo '<input type="submit" name="zurueck" value="Zurück"></p>';
      echo '</form>';
      die;
    }else{
      $user = $result['user'];
      session_register('user');
      echo '<p align="center">LogIn erfolgreich! :-)<br><br><a href="user/index.php?page=start">Weiter</a></p>';
    }
  }
  ?>
 
Gibt keine Fehlermeldung.
Er sagt beim einloggen nur das das Passwort nicht stimmt.
Oder kann es auch sein das ein Server nicht mit MD5 Verschlüsselung klarkommt?
 
MySQL nimmt die Daten nur entgegen. Da Du nicht ueber die MySQL-eigene MD5-Funktion den Hash erzeugst faellt MySQL in der Hinsicht flach. Es koennte aber sein, dass Du die Feldlaenge zu kurz gewaehlt hast sodass nicht der gesamte Hash gespeichert wird und somit der Hash des eingegebenen Passworts nicht mit dem gespeicherten Hash uebereinstimmen kann.
Wuerde, aus welchem Grund auch immer, md5() in PHP nicht funktionieren wuerdest Du wohl eine Fehlermeldung bekommen.
MD5 ist uebrigens keine Verschluesselung sondern ein Hash-Verfahren.

Gib doch testweise einfach mal den aus der Eingabe erstellten und den aus der Datenbank geholten Hash untereinander aus. Dann solltest Du ja sehen ob diese identisch sind.
 
Probier mal Folgendes:
PHP:
<?php

	$query = '
		SELECT
		        1
		  FROM
		        `users`
		  WHERE
		        `user` = "'.mysql_real_escape_string($_POST['username']).'"
		    AND `pass` = "'.md5($_POST['password']).'"
		';
	if( mysql_num_rows(mysql_query($query)) <= 0 ) {
		echo 'Benutzername und Passwort stimmen nicht überein! Prüfen Sie bitte Ihre Eingaben und versuchen Sie es erneut.';
	} else {
		echo 'Erfolgreich angemeldet.';
	}

?>
 
hm habe es Probiert.

Komischerweise ist der Hash aus der DB anders als der Hash den ich als passwort eingebe.
Ist aber exakt das Passwort das ich vorher angelegt habe
 
Ist der Hash aus der Datenbank vielleicht kuerzer? Wie gesagt, ist es moeglich, dass das Feld fuer den Passwort-Hash nicht lang genug ist um den gesamten Wert aufzunehmen?
Womit hast Du das Passwort gespeichert? Auch mit einem PHP-Script?
 
Ja das passwort wird auch mit einem php script gespeichert.

Die Hash länge in der DB ist auf 50 gestellt. Das hat bisher immer gereicht

@Gumbo bei deiner Version kommt sofort ein fehler
Parse error: parse error, unexpected $ in /var/www/vhosts/bilder-gigant.de/subdomains/caseconstruction/httpdocs/login.php on line 52


Hier ist das Script womit ich user anlege
PHP:
<?php

    $query = '
        SELECT
                COUNT(*)
          FROM
                `users`
          WHERE
                `user` = "'.mysql_real_escape_string($_POST['username']).'"
        ';
    if( mysql_result(mysql_query($query), 0) > 0 ) {
        echo 'Der Username ist bereits vergeben.';
        die;
    }

    $query = '
        INSERT INTO
                `users`
          SET
                `user` = "'.mysql_real_escape_string($_POST['username']).'",
                `pass` = "'.md5($_POST['password']).'"
        ';
    $result = mysql_query($query)
        or die(mysql_error());
        //mkdir ("user/uploadbin/$_POST[username]", 0777);
    echo '<p>Der neue Benutzer wurde erfolgreich angelegt!</p><p><a href="index.php?page=login">Zur Startseite</a></p>';

?>
 
Zuletzt bearbeitet:
so habe den Fehler gefunden.

Allerdings taucht nun folgendes auf
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Kann mir jemand sagen was das bedeutet? Mein English ist grausam
 
Mal sehen, was meine Englischkenntnisse noch so hergeben:
Warnung: unbekannt(): Ihr Skrip verlässt sich vielleicht auf einen Nebeneffekt von Sitzungen, der seit PHP 4.2.3 existert. Bitte seien Sie darauf aufmerksam gemacht, dass Sitzungen nicht globale Variablen als Datenquelle berücksichtigen, außer register_globals ist aktiv. Sie können diese Funktionsweise und damit diese Warnung unterbinden, indem sie session.bug_compat_42 beziehungsweise session.bug_compat_warn auf off setzen.
 
Zurück