• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Probleme m. Usersystem; Danke an bdt600!

K

Kyorax

Guest
Hallo Community,
ich habe mir eine Art Vorlage für ein PHP-Usersystem heruntergeladen um dann selbst daran herumzubasteln und alles meinen Wünschen entsprechend zu gestalten. Alles klappt prima auf meinem Computer, aber sobald ich das System auf meinen Testserver www.xplodepvp.com hochlade, will es einfach nicht mehr: Beim registrieren heißt es, der Nutzername müsse länger als 4 Zeichen sein, egal wie lange der Nutzername tatsächlich ist. Streiche ich den Teil heraus der das überprüft, wird beim Registrieren irgendein Mist in die Mysql Datenbank abgespeichert. Ich habe es einfach mal wie ich es heruntergeladen habe auf den Server hochgeladen und hoffe ihr könnt mir helfen! Ich probiere bereits seit Ewigkeiten daran herum aber komme nicht auf das Problem und warum es auf meinem Computer funktioniert während es auf dem Server nicht will. Hier ist zudem der Code von der Registration... (daran sollte es doch eigentlich nicht liegen wenn es auf dem PC funktioniert, oder?)

PHP:
<?php

session_start();

function getRandomString($length = 9) {
    $validCharacters = "1234567890abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ";
    $validCharNumber = strlen($validCharacters);
    $result = "";
    for ($i = 0; $i < $length; $i++) {
        $index = mt_rand(0, $validCharNumber - 1);
        $result .= $validCharacters[$index];
    }
    return $result;
}

function birthday ($birthday)
  {
    list($year,$month,$day) = explode("-",$birthday);
    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff  = date("d") - $day;
    if ($month_diff < 0) $year_diff--;
    elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
    return $year_diff;
  }

if (isset($_SESSION['user'])) {
   
    header ("location: index.php");
   
} else {
   
    if (isset($_POST['r_username'])&&isset($_POST['r_password'])&&isset($_POST['r_password_repeat'])&&isset($_POST['r_email_name'])&&isset($_POST['r_email_service'])&&isset($_POST['r_email_suffix'])&&isset($_POST['r_dob_year'])&&isset($_POST['r_dob_month'])&&isset($_POST['r_dob_day'])&&isset($_POST['r_gender'])&&isset($_POST['r_country'])) {
       
        $got_error = 0;
       
        $username = mysql_real_escape_string(htmlentities(trim($_POST['r_username'])));
        $password = $_POST['r_password'];
        $password_repeat = $_POST['r_password_repeat'];
        $email_name = mysql_real_escape_string(htmlentities(trim($_POST['r_email_name'])));
        $email_service = mysql_real_escape_string(htmlentities(trim($_POST['r_email_service'])));
        $email_suffix = mysql_real_escape_string(htmlentities(trim($_POST['r_email_suffix'])));
        $dob_year = mysql_real_escape_string(htmlentities(trim($_POST['r_dob_year'])));
        $dob_month = mysql_real_escape_string(htmlentities(trim($_POST['r_dob_month'])));
        $dob_day = mysql_real_escape_string(htmlentities(trim($_POST['r_dob_day'])));
        $gender = mysql_real_escape_string(htmlentities(trim($_POST['r_gender'])));
        $country = mysql_real_escape_string(htmlentities(trim($_POST['r_country'])));
       
        $age = birthday("$dob_year-$dob_month-$dob_day");
       
        if (strlen($username)>25) {
            $got_error = 1;
            echo "Username lenght limit exceeded!</br>";
        }
        if (strlen($username)<4) {
            $got_error = 1;
            echo "Username lenght must be 4 characters long or more!</br>";
        }
        if (strlen($password)>25||strlen($password_repeat)>25) {
            $got_error = 1;
            echo "Password lenght limit exceeded!</br>";
        }
        if (strlen($password)<4) {
            $got_error = 1;
            echo "Password must be longer than 4 characters!</br>";
        }
        if ($password!=$password_repeat) {
            $got_error = 1;
            echo "Passwords didn't match!</br>";
        }
        if ($age<13) {
            $got_error = 1;
            $_SESSION['age_submitted']=1;
            echo "You are not old enought to join this site. Sorry!</br>";
        }
        if (strlen($email_name)>25||strlen($email_service)>20||strlen($email_suffix)>3) {
            $got_error = 1;
            echo "One or more of the email boxes exceeded their characters limit!</br>";
        }
       
        if ($got_error==0) {
            $password_md5 = md5($password);
            $build_email = $email_name."@".$email_service.".".$email_suffix;
            $build_dob = $dob_year."-".$dob_month."-".$dob_day;
            $rnd_string = getRandomString();
            $joined = date('Y-m-d');
           
            require ('connect.php');
           
            $used = 0;
           
            $result = mysql_query("SELECT * FROM users WHERE (username='$username') OR (email='$build_email')");
       
            while($row = mysql_fetch_array($result))
            {
                $used = 1;
            }
           
            if ($used==1) {
                die('Username and/or email has already been taken!');
            } else {
                mysql_query("INSERT INTO users (username, password, email, dob, gender, activated, activate_id, joined, country, disp_pic) VALUES ('$username', '$password_md5', '$build_email', '$build_dob', '$gender', '1', '$rnd_string', '$joined', '$country', 'avatars/no_image.png')");
                echo "Thank you for registering! <a href='index.php'>Return to homepage</a>";
            }

            */
        }
       
    } else {
        die("All fields are required!");
    }
}

?>

Der Name der Tabelle im MySQL ist "users".
Vielen Dank im Voraus!
 
ist übrigens Version 1.8.2 mit PHP 5.4.16
EDIT: habe auch gerade phpinfo() auf der Indexseite durchgeführt
 
Zuletzt bearbeitet von einem Moderator:
Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Pack diese Zeile
PHP:
 require ('connect.php');
vor die Zeilen mit mysql_real_escape_string
 
EDIT: mit Fehlern aktiviert erhalte ich folgendes:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /customers/c/6/1/xplodepvp.com/httpd.www/proc_register.php on line 100

-> auch folgt:"Thank you for registering"
 
ich bin leider ein ziemlicher Neuling in Sachen PHP und kann mit der Zeile nicht so recht viel anfangen...
 
mein Problem ist also dass Parameter 1 in Zeile 100 eine Ressource sein soll? wie ist das zu verstehen?
EDIT: es wurde übrigens auch nichts eingetragen, auch wenn die meldung "username must be at least 4 characters" verschwunden ist
 
inwiefern genau, habe alles kopiert was dort stand? "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /customers/c/6/1/xplodepvp.com/httpd.www/proc_register.php on line 100 Thank you for registering! Return to homepage" -> Das entsteht wenn man versucht sich zu registrieren über register.php
 
In Zeile 100 ist kein mysql_fetch_array! :(
Und immer so schreiben:
PHP:
$result = mysql_query("SELECT * FROM users WHERE (username='$username') OR (email='$build_email')")
    or die ("MySQL-Error: " . mysql_error());
 
Könnte es nicht einfach durch die ältere PHP Version verursacht werden, da es doch der einzige Unterschied zu XAMPP sein sollte?
 
Achso okay, danke. Aber wo denn dann?
EDIT: doch, im Originaltext schon: Auf Zeile hundert steht:
PHP:
            while($row = mysql_fetch_array($result))

also insgesamt:
PHP:
  while($row = mysql_fetch_array($result))
            {
                $used = 1;
            }
           
            if ($used==1) {
                die('Username and/or email has already been taken!');
            } else {
                mysql_query("INSERT INTO users (username, password, email, dob, gender, activated, activate_id, joined, country, disp_pic) VALUES ('$username', '$password_md5', '$build_email', '$build_dob', '$gender', '1', '$rnd_string', '$joined', '$country', 'avatars/no_image.png')");
                echo "Thank you for registering! <a href='index.php'>Return to homepage</a>";
            }
 
Das hat nix mit der PHP-Version zu tun, da ist nichts besonderes zu sehen.

Bau' das mysql_error ein!
 
der code ist:
PHP:
while($row = mysql_fetch_array($result))
            {
                $used = 1;
            }
           
            if ($used==1) {
                die('Username and/or email has already been taken!');
            } else {
                mysql_query("INSERT INTO users (username, password, email, dob, gender, activated, activate_id, joined, country, disp_pic) VALUES ('$username', '$password_md5', '$build_email', '$build_dob', '$gender', '1', '$rnd_string', '$joined', '$country', 'avatars/no_image.png')");
                echo "Thank you for registering! <a href='index.php'>Return to homepage</a>";
            } or die ("MySQL-Error: " . mysql_error());
 
Boah, jetzt kopier die 2 Zeilen von mir und ersetzte deine eine Zeile!! Man muss schon richtig hinsehen!!!
 
MySQL-Error: No database selected; wie kommt das jetzt? die ist doch in connect.php ausgewählt...
 
Zurück
Oben