+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Aufruf einer nicht vorhandenen Funktion?! o0

  1. #1
    War schon öfter hier
    Registriert seit
    09.04.2008
    Beiträge
    186
    Bedankte sich
    32
    Erhielt 32 Danksagungen
    in 31 Beiträgen

    Standard Aufruf einer nicht vorhandenen Funktion?! o0

    Hi ho...
    und wieder ich -.-" ^^

    Also hab folgendes problem....
    Code:
    Fatal error: Call to undefined function ip_check() in \components\com_user\controller.php on line 259
    Zur erklärung...
    ich möchte durch ein paar zusätzliche funktionen herausbekommen, ob sich jemand mit der derzeitigen IP schon bei mir registriert hat... wenn ja gebe fehlermeldung aus (in form einer weiterleitung zu einem artikel)
    wenn nein... go ahead mit next step...

    Ich habe die registrierungsrutine von joomla komplett auseinander genommen... vorher hatte ich die ip_check routine in der registrierungsrutine drinne... lief...
    Da jetzt aber noch 4 weitere bedingungen erfüllt werden müssen um sich weiter zu registrieren sind natürlich entsprechende funktionen hinzugekommen...

    aufruf folgt jetzt nicht mehr über http://web/index.php?option=com_user&task=register sondern über com_user&task=pre_register_step_1
    Dort soll erstmal überprüft werden ob die IP schon vorhanden ist oder nicht?
    wenn nein rufe com_user&task=pre_register_step_2 auf
    dort zeige mir einen artikel inhalt an und füge unten eine checkbox ein und einen butten.. bei klick auf button gehe auf step_3
    dort überprüfe ob checkbox aktiv... wenn nein geh zurück auf step_2 und gebe fehlermeldung aus.
    wenn ja gehe weiter zu step_4
    in step4 muss - der sicherheit wegen - letztmalig die ip überprüft werden. deswegen auch die eigene funktion...
    denn wenn jemand so schlau ist und url bis zum registrierungsformular direkt ein gibt, kann er sich dennoch registrieren, obwohl die IP schon vergeben ist....

    Hier nochmal der Code:
    PHP-Code:
    function ip_check()
         {
            
    // Check for existing IP
            
            
    $gamedbhost 'localhost';
            
    $gamedbuser 'geheimer User';
            
    $gamedbpass 'geheimespasswort';
            
    $gamedbaccs 'datenbank';
            
            
    $gamedbcon = @mysql_connect($gamedbhost$gamedbuser$gamedbpass);
                if (!
    $gamedbcon)
                {
                    DIE(
    mysql_error());
                }
            
    $gamedba = @mysql_select_db($gamedbaccs$gamedbcon);
                if (!
    $gamedba)
                {
                    DIE(
    mysql_error());
                }
            
    $multi_ip 0;
            
    $ip $_SERVER['REMOTE_ADDR'];
            if(
    $multi_ip != 1) {
                
    $gamequery = @mysql_query("SELECT * FROM cataclysm_auth.account WHERE last_ip = '$ip'") or die(mysql_error());
                if(
    mysql_num_rows($gamequery) != 0) {
                    
    $this->setredirect('index.php?option=com_content&view=article&id=26',JText::_('YOUR IP ALREADY EXIST.'));
                }
            }
            
    mysql_close($gamedbcon);
         } 
    erstmals aufgerufen wird die funktion über die funktion pre_register
    PHP-Code:
    function pre_register()
        {
            
    parent::display();
            
    ip_check();
            
    $this->setredirect('index.php?option=com_user&task=pre_register2''');
         
        } 
    gedacht hab mir mir das so:
    die seite preregister wird aufgerufen und fragt erstmal in der funktion ip_check nach ob die ip schon vergeben ist... wenn ja leite mich um auf com_content articleID26 wenn nein leite weiter auf com_user pre_regiser2.
    jedoch beim aufruf von ip_check bekomm ich die fehler meldung das ich eine nicht vorhandene funktion versuche aufzurufen.....

    Hat jemand eine idee was ich falsch mache???

    LG
    Sada
    Geändert von Sadakazu (28.09.2011 um 19:24 Uhr)
    Deine Frage hat sich erledigt? du hast die lösung gefunden für dein problem? dann schreibe die lösung bitte nochmal in dein Post und setzte das thema dann laut dieser Beschreibung auf Gelöst.

  2. #2
    War schon öfter hier
    Registriert seit
    23.09.2009
    Beiträge
    235
    Bedankte sich
    0
    Erhielt 62 Danksagungen
    in 59 Beiträgen

    Standard

    Abgesehen davon, dass die Speicherung der IP Adresse die typischen rechtlichen Fragen aufwirft, was bringt sie dir?
    Proxy Server, 24h Zwangstrennung ... binnen Sekunden hat der Benutzer eine neue IP und oder E-Mail Adresse. Was den Code betrifft: Wenn man an der Registrierung schraubt, dann mit Hilfe von Plugins oder gar einer Komponente. Jeder Aufruf zur "alten" Registrierung kann mit einem Plugin umgeleitet werden. Um auf interne / externe Tabellen zuzugreifen, sollten die Methoden von JDatabase in Verbindung mit JTable benutzt werden. Das ist mit Sicherheit nicht die erhoffte Antwort auf deine Frage, doch das Vorhaben selbst scheint wenig Aussicht auf Erfolg zu haben.

    Sauberer wäre es zudem, die Weiterleitung anhand der Rückgabe der Abfrage dort anzustossen, wo die Funktion aufgerufen wird und nicht in der ip_check() Funktion.
    Code:
    $ziel = standard_ziel
    Wenn Abfrage / Bedingung nicht erfüllt
        $ziel = neues_ziel
    Weiterleitung $ziel
    Tell 'em what they want to hear. That will keep them coming back for more. I 've got some for everyone.

  3. Erhielt Danksagungen von:


  4. #3
    War schon öfter hier
    Registriert seit
    09.04.2008
    Beiträge
    186
    Bedankte sich
    32
    Erhielt 32 Danksagungen
    in 31 Beiträgen

    Standard

    Hallo Barnum...
    Erstmal danke für deine antwort.
    Dann wegen deiner antwort...
    Nunja ^^ hauptsache ich hab nochmal nen schupser in die richtige richtung bekommen ^^ außerdem will ich ja auch nicht alles vorgekaut bekommen nur entzieht sich dieser fehler iwie meiner denkensweise...

    Funktion angelegt, funktion richtig aufgerufen, und dennoch fatal error... is mir grad ein wenig zu hoch

    Die speicherung der IP soll nur vermeiden, das sich ein user nicht 20 accounts anlegt. Außerdem, sobald die registrierung abgeschickt wurde, wird die IP in der auth datenbank gespeichert... und sobald der spieler sich im spiel einloggt überschrieben.
    Sprich... es wird immer die aktuelle ip abgefragt.. nicht die ip die ein benutzer vor 10 jahren mal hatte als er sich registriert hat. sondern immer die letzte mit der er sich eingeloggt hat...

    Das kurz dazu

    Zu deiner aussage das es wenig aussicht auf erfolg hat....

    Es läuft ja...
    Wenn ich die function ip_check() nicht als funktion aufrufe, sondern vielmehr den inhalt der funktion in die funktionen reinpacke wo ich die kontrolle haben möchte funktioniert das....

    Aber dafür gibt es ja nun mal function in php um den code nicht immer wieder neu zu generieren ^^

    ich habe ip_check mit absicht eine eigenständige funktion gegeben weil sie ehalt in jedem schritt überprüft werden soll...
    Ansonsten könnten die benutzer durch das direkte aufrufen des registrierungsformulars die ersten schritte überspringen... und das ist nicht sinn....

    Hier mal kurz die reihenfolge wie ich es mir gedacht habe...
    Benutzer klickt auf Registrieren.
    Dort wird pre_register aufgerufen.
    pre_register fragt innerhalb der funktion nach der IP über ip_check();
    sollte innerhalb von ip_check bemerkt werden das die IP vorhanden ist, wird pre_register aufgelöst indem es zu einem content umgeleitet wird.
    Sollte ip_check sauber sein (also keine IP vorhanden sein) macht die funktion pre_register weiter und leitet an pre_register2

    innerhalb von pre_register2()
    zunächst noch einmal die IP überprüfen mti ip_check()... wenn ip vorhanden -> weiterleitung zum content
    wenn nichts vorhanden weiter in pre_register2
    Hole einen bestimmten artikel aus jos_content (SELECT introtext FROM jos_content WHERE id='1234' LIMIT1
    Anschließend ein form der nach pre_register3 zeigt über die methode POST.
    Eine checkbox + 1 button (AGB gelesen verstanden und einverstanden)
    das klicken des buttons ruft also pre_register 3 auf.

    pre_register3() soll hier auch erstmal prüfen..
    ip_check... wenn ip vorhanden ... umleitung auf content
    wenn nicht weiter in pre_register3()

    Checkbox auswerten... wenn checkbox checked dann registrierungsformular anzeigen wenn nicht zurück auf pre_register2() und schreibe zusätzlich JText::_('NOT CHECKED BOX.') (in language ensprechend deklariert.

    Wenn dann entsprechend alles ausgefüllt wurde etc kann die registrierung ganz normal abgespeichert werden. zum einen kann der User in Joomla angelegt werden, zum anderen in der game datenbank.

    Wenn ich den inhalt von ip_check immer wieder neu vor jede pre_register funktion kopiere funktioniert das...
    Aber funktionen sind dafür da, um sich schreibarbeit zu sparen und um das ganze noch ein bisschen übersichtlicher zu halten...

    Versuche ich jetzt aber die funktion ip_check wie im ersten beitrag schon erwähnt aufzurufen, bekomme ich die fehlermeldung das die funktion nicht deklariert ist... ist sie aber... und wenn ich ip_check direkt über
    index.php?option=com_user&task=ip_check aufrufe funktioniert sie auch... nur nicht wenn ich sie normal als ip_check(); im quelltext aufrufe... und das verstehe ich eben nicht... warum ist das so? und wie kann ichs beheben?

    Kopiere ich alle funktionen und mache mir eine test_register.php funktionieren alle funktionen.

    PS:
    Auf die idee mit einer eigenen komponente bin ich auch schon gekommen.... Allerdings wird das ein längerfristiges Projekt werden da ich wenn dann gleich richtig das thema angehe ^^
    Dies soll jetzt erstmal nur eine zwischenlösung sein...

    Aktuell müssen sich die Spieler erstmal auf der Webseite registrieren. Anschließend wird denen ein Link frei gemacht worüber die (über ein externes php script) sich einen Gameaccount registrieren müssen.
    Das nervt ^^ nicht nur mich sondern auch die spieler :P

    Deswegen der aufwand....

    Hast du, oder jemand anderes, vieleich noch eine Idee??
    Deine Frage hat sich erledigt? du hast die lösung gefunden für dein problem? dann schreibe die lösung bitte nochmal in dein Post und setzte das thema dann laut dieser Beschreibung auf Gelöst.

  5. #4
    War schon öfter hier
    Registriert seit
    09.04.2008
    Beiträge
    186
    Bedankte sich
    32
    Erhielt 32 Danksagungen
    in 31 Beiträgen

    Standard

    *an die stirnklatsch*
    Oh man ich hab schon wieder den wald vor lauter bäumen nicht gesehen -.-"

    es muss nicht
    PHP-Code:
    ip_check(); 
    Heißen.... sondern....
    PHP-Code:
    $this->ip_check(); 
    Sau doof oder? ^^
    Deine Frage hat sich erledigt? du hast die lösung gefunden für dein problem? dann schreibe die lösung bitte nochmal in dein Post und setzte das thema dann laut dieser Beschreibung auf Gelöst.

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein