Problem bei Variablen übergabe



  • Hallo,
    ich habe ein Problem mit einer Variablen übergabe zwischen zwei Klassen.
    Ich habe einen kleinen Anmeldedialog geschrieben, welcher nach erfolgreicher Überprufung des Password ein neues Frame erzeugt. Die eingegebene UserID brauch ich auch im neuen Frame, daher hab ich mir folgendes gemacht.
    Im Anmeldedialog sieht so aus:

    usr=user->GetValue();
        pasw=password->GetValue();
        if(usr==""||pasw==""){
                              WxMessageDialog_Login_fehler->ShowModal();             
        }
        else{
             query="SELECT password FROM user where user_id='"+usr+"'";
    	 erg=db->anfragen(query);
    
               if(pasw==erg){
    
                      Destroy(); //Anmeldedialog
    	              frame = new AuslastungFrm(NULL);
    	              frame->set_UserID(usr);
                      frame->Show(true);
             }
    

    usr enthält auch die UserID (hab ich mittels debug überprüft)

    die methoden im Frame sehen so aus:

    public:
           void set_UserID(wxString u){user_id=u;}
           wxString get_UserID(){return user_id;}
    private:
           wxString user_id;
    

    wenn ich mir jetzt aber im debugmodus die UserID im frame anschaue, ist diese Leer!?
    Warum funktioniert das so nicht?



  • Kann niemand etwas dazu sagen?

    Nach meinem Verständniss müsste das doch eigentlich so funktionieren...



  • Hallo

    Ich vermute das du mit der wxWidgets-Library arbeitest. Falls das so ist, gehört diese Thread ins GUI-Forum.

    Aus deinem Codeausszug geht jedenfall der Problemgrund nicht hervor. Er ist soweit syntaktisch und semantisch richtig und sollte wie du erwartest laufen.

    bis bald
    akari



  • ja, arbeite mit der Libary.
    Könntest du das dann mal bitte verschieben oder soll ich einen neuen Thread aufmachen!?

    Danke & Gruß



  • Hallo

    Warte bis du verschoben wirst, mach keinen neuen Thread auf.
    Ich bin zwar Mod aber nicht im C++ Forum.
    Du wirst allerdings auch in einem anderem Forum nur mit dem gezeigten Quellcode nichts neues hören. Am besten machst du von deinem jetztigen Projekt eine Kopie und dann löscht du so lange hierfür unnötigen Quellcode bis du den Fehler mit einer Minimalversion nachbauen und hier den übrigen Code genz posten kannst. Wahrscheinlich wirst du den Fehler dabei auch schon selber finden.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Hm, also so würde ich das machen (pseudo code):

    // in der wxApp::OnInit
    AnmeldeDlg dlg(NULL,-1);
    if(dlg.ShowModal() == wxID_OK)
    {
       if(!dlg.IsUserValid())//DB abfrage
          wxMessageBox("Unknown Username");
       else
       {
          MyFrame* frame = new MyFrame(dlg.Getuser(),NULL,-1,"foo bla blubb bar");
          frame->Show();
       }
    }
    

    Aus deinem Code kann ich jetzt nicht direkt den Fehler ableiten, aber es könnte
    was mit dem aufruf von Destroy() zu tun haben, bzw. generell mit der Lebenszeit von Objekten.
    Auch solltest du bei dem user und pwd string darauf achten, das spezielle zeichen escaped werden,
    dafür müsste es eine funktion/methode geben.
    Sonst kannst du SQL Injection machen wie z.b. hier: user="foo';DROP TABLE foo;"

    phlox



  • MyFrame* frame = new MyFrame(dlg.Getuser(),NULL,-1,"foo bla blubb bar");
    

    könntest du diese Zeile bischen genauer erklären!?

    ..es könnte was mit dem aufruf von Destroy() zu tun haben, bzw. generell mit der Lebenszeit von Objekten...

    Das habe ich mir auch schon gedacht und das Destroy später gesetzt und auch schon komplett wegegnommen, brachte keinerlei veränderung!


  • Mod

    Der (Standard)Framekonstruktor nimmt ja 3 parameter:

    wxWindow* parent, int id, wxString title
    

    Du brauchst ja auf jedefall auch die UserID in deiner Anwendung, also sollte sie auch ein
    Parameter in deinem Framekonstruktor sein, so das man sie übergeben muss:

    MyFrame(wxString user,wxWindow* parent, int id, wxString title):wxFrame(parent,id,title),m_user(user)
    {
    }
    


  • Ich habe es jetzt über umwege hinbekommen, zwar nicht schön, aber es funktioniert jetzt erstmal. Evtl werd ich deinen Ansatz nochmal versuchen. Danke für die Hilfestellung.


Anmelden zum Antworten