ilch Forum » Ilch Clan 1.1 » Module und Modifikationen » Prüfung bei der Registrierung

Geschlossen
  1. #1
    User Pic
    wor Mitglied
    Registriert seit
    05.03.2008
    Beiträge
    49
    Beitragswertungen
    0 Beitragspunkte
    Hallo Ilch Gemeinschaft,

    ich versuche seit ein paar Tagen es selbst zu schaffen aber es funktioniert nicht. Nun hoffe ich hier Hilfe zu finden.

    Es ist eigentlich heutzutage üblich das bei der Registrierung oder bei der Profiländerung geprüft wird ob der Username oder die E-Mail Adresse schon benutzt werden. Leider trifft es bei der 1.1P nur auf dem Namen zu nicht auf die E-Mail Adresse.

    Ich möchte es nun endlich nach langer Zeit reparieren bzw. für mich anpassen da ich noch ein Feld den ich für den Game-Server brauche hinzugefügt habe.

    So sieht es im Moment aus:



    /include/templates/user/regist.htm
    <!-- REGELN -->
    <form action="index.php?user-regist-2" method="POST">
    
        {_lang_attentionplease}:
        <br />
        {regeln}
    
    
        <br /><br /><input type="submit" value="{_lang_readandok}" name="Yes">
    
    </form>
    {EXPLODE}
    <!--<p style="color:red;">{FEHLER}</p>-->
    <form action="index.php?user-regist-2" method="POST">
        <input type="hidden" value="Gelesen und einverstanden" name="checked">
        <table width="100%" border="0" cellspacing="1" cellpadding="3" class="border">
            <tr class="Chead">
                <th colspan="2"><b>{_lang_REGISTER}</b></th>
            </tr><tr>
                <td colspan="2" style="color:red;" class="Cdark">{FEHLER}</td>
            </tr><tr>
                <td class="Cmite" width="80">{_lang_nickname} *</td>
                <td class="Cnorm"><input type="text" name="nutz" value="{name}" maxlength="15"><span class="smalfont"><--  Required fields</span></td>
            </tr><tr>
                <td class="Cmite">{_lang_mail} *</td>
                <td class="Cnorm"><input type="text" maxlength="100" value="{email}" name="email"><span class="smalfont"><--  Required fields</span></td>
            </tr><tr>
                <td class="Cmite">Playername</td>
                <td class="Cnorm"><input type="text" maxlength="100" value="" name="playername"><span class="smalfont"><-- protect your unique player name</span></td>
            </tr>{EXPLODE}<tr>
                <td class="Cmite">{_lang_password}</td>
                <td class="Cnorm"><input type="password" name="pass"></td>
            </tr>{EXPLODE}
            <tr>
                <td class="Cmite">Antispam</td>
                <td class="Cnorm">{antispam}</td>
            </tr>
            <tr class="Cdark">
                <td></td>
                <td><input type="submit" name="register" value="{_lang_register}"></td>
            </tr>
        </table>
    </form>
    {EXPLODE}
    {_lang_hello} {NAME}<br>
    
    {_lang_yourregistrationwassuccessful}!<br><br>
    {_lang_amailhasbeensenttoyouwithmailandpass}!<br><br>
    {_lang_afteryoureceivedthemail} <a href="index.php?user-2">{_lang_login2}</a>


    Was funktioniert nun nicht:

    1. -> Es sollte nicht möglich sein einen Namen unter 3 Zeichen zu nutzen $fehler = $lang['wrongnickname']; dennoch ist es möglich.

    ich weiß das man es hier anpassen muss nur nicht genau was.
    /include/includes/func/escape.php
    function escape_nickname ($t) {
      $t = preg_replace("/[^a-zA-Z0-9-\[\]\*\ \+=\._\|]/","",$t);
      $t = substr($t, 0, 15);
      $t = escape($t, 'string');
      return ($t);
    }


    2. -> Ob E-Mail vorhanden wurde nicht geprüft das konnte ich aber lösen nur E-Mail Format xxxxx@xx.xx sollte auch geprüft werden, man müsste also auch hier eine ähnliche funktion wie für Namen bauen.

    3. -> Ich habe ein Feld "Playername" "NICHT PFLICHT FELD" das frei gelassen werden kann hinzugefügt. Aber sollte doch jemand was eingeben soll geprüft werden ob dieser Namen schon benutzt wird. Ich denke weil es leere Zeilen in der MySQL in dieser Spalte gibt kommt immer der Fehler bei mir das dieser Namen schon benutzt wird.

    /include/contents/user/regist.php
    <?php
    
    #   Copyright by: Manuel
    #   Support: www.ilch.de
    
    
    defined('main') or die('no direct access');
    
    if (!isset($_GET['step'])) {
        $_GET['step'] = 1;
    }
    
    if ($allgAr['forum_regist'] == 0) {
        # user duerfen sich nicht registrieren.
        $title = $allgAr['title'] . ' :: Users :: Keine registrierung m&ouml;glich';
        $hmenu = $extented_forum_menu . '<a class="smalfont" href="?user">User</a><b> &raquo; </b>Keine Registrierung m&ouml;glich' . $extented_forum_menu_sufix;
        $design = new design($title, $hmenu, 1);
        $design->header();
        $tpl = new tpl('user/login');
        echo '<b> Der Administrator hat festgelegt das man sich nicht registrieren kann </b>';
        $tpl->set_out('WDLINK', '?' . $allgAr['smodul'], 0);
        $design->footer();
        exit();
    }
    
    switch ($menu->get(2)) {
        default :
            $title = $allgAr['title'] . ' :: Users :: Registrieren :: Step 1 von 3';
            $hmenu = $extented_forum_menu . '<a class="smalfont" href="?user">User</a><b> &raquo; </b><a class="smalfont" href="?user-regist">Registrieren</a><b> &raquo; </b>Step 1 von 3' . $extented_forum_menu_sufix;
            $design = new design($title, $hmenu, 1);
            $design->header();
            $tpl = new tpl('user/regist');
            $tpl->set_out('regeln', bbcode($allgAr['allg_regeln']), 0);
            $design->footer();
            break;
    
        case 2 :
            $name = '';
            $email = '';
    		$playername = '';
            if (!empty($_POST['nutz'])) {
                $name = escape($_POST['nutz'], 'string');
            }
            if (!empty($_POST['email'])) {
                $email = escape($_POST['email'], 'string');
    		if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    		$emailErr = "Invalid email format";}
            }
    		if (!empty($_POST['playername'])) {
                $playername = escape($_POST['playername'], 'string');
            }
    
            $ch_name = false;
            $xname = escape_nickname($name);
            if (!empty($name) AND $xname == $name AND 0 == db_result(db_query("SELECT COUNT(*) FROM prefix_user WHERE name = BINARY '" . $name . "'"), 0)) {
                $ch_name = true;
            }
    
            $ch_email = false;
            $xemail = escape_for_email($email);
            if (!empty($email) AND $xemail == $email AND 0 == db_result(db_query("SELECT COUNT(*) FROM prefix_user WHERE email = BINARY '" . $email . "'"), 0)) {
                $ch_email = true;
            }
    		
            $ch_playername = false;
            if (!empty($playername) AND 0 == db_result(db_query("SELECT COUNT(*) FROM prefix_user WHERE playername = BINARY '" . $playername . "'"), 0)) {
                $ch_playername = true;
            }
    		
    		
            $chkAntispam = chk_antispam('regist');
            if (empty($name) OR empty($email) OR $name != $xname OR $ch_name == false OR $email != $xemail OR $ch_email == falsel OR $ch_playername == false OR !$chkAntispam) {
                $title = $allgAr['title'] . ' :: Users :: Registrieren :: Step 2 von 3';
                $hmenu = $extented_forum_menu . '<a class="smalfont" href="?user">User</a><b> &raquo; </b><a class="smalfont" href="?user-regist">Registrieren</a><b> &raquo; </b>Step 2 von 3' . $extented_forum_menu_sufix;
                $design = new design($title, $hmenu, 1);
                $design->header();
                if (isset($_POST['register'])) {
                    if (empty($name) OR empty($email)) {
                        //$fehler = $lang['entereddataincomplete'];
    					$fehler = "ERROR: Your entry is not complete!";
                    } elseif ($name != $xname) {
                        //$fehler = $lang['wrongnickname'];
                        $fehler = "ERROR: Wrong Name format, unauthorized character!";
                    } elseif ($email != $xemail) {
                        //$fehler = $lang['wrongemail'];
    					$fehler = "Email Format falsch";
                    } elseif ($ch_name == false) {
                        //$fehler = $lang['namealreadyinuse'];
    					$fehler = "ERROR: The name is already used!";
    				} elseif ($ch_email == false) {
    					//$fehler = $lang['emailalreadyinuse'];
                        $fehler = "ERROR: The E-Mail Adress is already used!";
    				} elseif ($ch_playername == false) {
                        //$fehler = $lang['playernamealreadyinuse'];
    					$fehler = "ERROR: The playername is already protected!";
                    } elseif (!$chkAntispam) {
                        $fehler = $lang['wrongcaptchaentered']; //antispamtxt
                    }
                } else {
                    $fehler = '';
                }
                $tpl = new tpl('user/regist');
                $tpl->set('name', $name);
                $tpl->set('email', $email);
                $tpl->set('antispam', get_antispam('regist', 0));
                $tpl->set_out('FEHLER', $fehler, 1);
                if ($allgAr['forum_regist_user_pass'] == 1) {
                    $tpl->out(2);
                }
                $tpl->out(3);
            } else {
                $pass = genkey(8);
                if (!empty($_POST['pass'])) {
                    $pass = escape($_POST['pass'], 'string');
                }
                user_regist($name, $email, $playername, $pass);
    
                $tpl = new tpl('user/regist');
                $title = $allgAr['title'] . ' :: Users :: Registrieren :: Step 3 von 3';
                $hmenu = $extented_forum_menu . '<a class="smalfont" href="?user">User</a><b> &raquo; </b><a class="smalfont" href="?user-regist">Registrieren</a><b> &raquo; </b>Step 3 von 3' . $extented_forum_menu_sufix;
                $design = new design($title, $hmenu, 1);
                $design->header();
                $tpl->set_out('NAME', $name, 4);
            }
            $design->footer();
            break;
    }
    ?>


    Hoffe das sich einer sich die Mühe macht so viel Text zu lesen und mir helfen kann.

    Danke
    Zuneigung wor


    verwendete ilch Version: 1.1 P

    betroffene Homepage: vetus-clan.de
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    924
    Beitragswertungen
    129 Beitragspunkte
    Zu 1)
    Die escape_nickname() ist der falsche Ort.

    Es sollte eher hier die Länge des Namens geprüft werden:
    github.com/IlchCMS/Ilch-1.1/blob/ilchClan_11p/include/contents/user/regist.php#L49

    php.net/manual/de/function.strlen.php
    Bitte Fragen zu Ilch im Forum stellen. Kein Support per PN.
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    wor Mitglied
    Registriert seit
    05.03.2008
    Beiträge
    49
    Beitragswertungen
    0 Beitragspunkte
    Hallo balckcoder,

    danke erst mal für das durchlesen, habe immer ein Problem mich kurz zu fassen.

    Zu #1:
    Ich ging davon aus das alles in der "function escape_nickname" berücksichtigt ist.

    hier prüft die Funktion auf Sonderzeichen.
    github.com/IlchCMS/Ilch-1.1/blob/ilchClan_11p/include/contents/user/regist.php#L48
    $xname = escape_nickname($name);


    Und gibt dann den Fehler aus wenn $name ungleich $xname is, so wie ich den Code verstehe:

    elseif ($name != $xname) {
                  $fehler = $lang['wrongnickname'];
                 }


    Und dann kommt aus der /include/includes/lang/de.php diese Zeile:

    'wrongnickname' => 'F&uuml;r den Nickname gelten folgende Regeln: min. 3 Zeichen, max. 15 Zeichen. Folgende Zeichen sind erlaubt: []+-*=.| ausserdem Leerzeichen, alle Gro&szlig- und Kleinbuchstaben und alle Zahlen.',


    Deshalb dachte ich mir das da alles geregelt wird.

    Leider verstehe ich diese Funktion nicht, dachte mir das die 15 für max Zeichen ist und die 0 dann für min aber es ist nicht der Fall.

    function escape_nickname ($t) {
      $t = preg_replace("/[^a-zA-Z0-9-\[\]\*\ \+=\._\|]/","",$t);
      $t = substr($t, 0, 15);
      $t = escape($t, 'string');
      return ($t);
    }


    Ok, werde mich mal mit php.net/manual/de/function.strlen.php auseinandersetzten vielleicht klappt es damit. Wundert mich nur das es in der lang file de.php so steht aber so nicht funktioniert.

    Wie sieht es mit dem zweiten aber vor allem mit dem dritten Problem aus? Bei dem dritten Problem habe ich die größten Schwierigkeiten.

    Danke schon mal,
    Zuneigung wor!
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    wor Mitglied
    Registriert seit
    05.03.2008
    Beiträge
    49
    Beitragswertungen
    0 Beitragspunkte
    Habe es mal so versucht aber es passiert nichts, keine Fehlermelsung und sonst auch kein Hinweis ob es funktioniert oder nicht.

            $ch_name = false;
            $xname = escape_nickname($name);
    	$lname = strlen ($name);
    		if ($lname > 3){
    			$lname = $name;
    			}
    
    $lname = Namenslänge und dann mit if abfragen ob größer als 3 wenn ja dann $lname = $name setzen. Oder ist es so nicht richtig?
    		
            if (!empty($name) AND $xname == $name AND $lname = $name AND 0 == db_result(db_query("SELECT COUNT(*) FROM prefix_user WHERE name = BINARY '" . $name . "'"), 0)) {
                $ch_name = true;
            }



    elseif ($name != $xname) {
                        //$fehler = $lang['wrongnickname'];
                        $fehler = "ERROR: Wrong Name format, unauthorized character!";
                    } elseif ($name != $lname) {
                        //$fehler = $lang['wrongnickname'];
                        $fehler = "ERROR: Wrong Name format,the name can not be less than 3 characters!";
                    }


    Keine Ahnung ob es funktioniert, vielleicht weil es allgemein nicht funktioniert wegen den anderen 2 Sachen.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Module und Modifikationen

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten