+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: BenutzerID in Datenbank speichern

  1. #1
    War schon öfter hier
    Registriert seit
    30.07.2009
    Ort
    Schweiz
    Alter
    21
    Beiträge
    160
    Bedankte sich
    29
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard BenutzerID in Datenbank speichern

    Hallo zusammen.
    Ich habe eine Komponente programmiert, mit der jeder User Charaktere für ein Rollenspiel hinzufügen kann. Nun möchte ich erreichen, dass die jeweilige BenutzerID ebenfalls in die Datenbank geschrieben wird, so, dass ich später die Charaktere im Zusammenhang des Users ausgeben kann. Das habe ich folgendermassen versucht:

    Controller
    PHP-Code:
    <?php 
    defined
    '_JEXEC' ) or die( 'Restricted access' ); 
    jimport('joomla.application.component.controller'); 
    class 
    GwcharsController extends JController 
       function 
    display() { 
          
    parent::display(); 
       }
       function 
    __construct() { 
          
    parent::__construct(); 
          
    $this->registerTask'add''edit' ); 
       }
       function 
    edit() { 
          
    JRequest::setVar'view''addgwchar' ); 
          
    JRequest::setVar'layout''form'  ); 
          
    JRequest::setVar'hidemainmenu'); 
          
    parent::display(); 
       }
       function 
    save() { 
          
    $model $this->getModel('addgwchar'); 
          if (
    $model->store()) { 
            
    $msg JText::_'Character Saved' ); 
          } else { 
            
    $msg JText::_'Error Saving' ) . ': ' $model->getError();
          } 
          
    $this->setRedirect'index.php?option=com_gwchars&view=addgwchars'
                              
    $msg); 
                              return 
    false
       } 
       function 
    remove() { 
          
    $model $this->getModel('addgwchar'); 
          if(
    $model->delete()) { 
             
    $msg JText::_'Character Deleted' ); 
          } else { 
             
    $msg JText::_'Error Deleting' ); 
          } 

          
    $this->setRedirect'index.php?option=com_gwchars&view=addgwchars'
                              
    $msg ); 
                              }
        function 
    cancel() { 
          
    $msg JText::_'Canceled' ); 
          
    $this->setRedirect'index.php?option=com_gwchars&view=addgwchars'
                              
    $msg ); 
       }

    ?>

    model
    PHP-Code:
    <?php 
    defined
    ('_JEXEC') or die('Restriced Access'); 
    jimport('joomla.application.component.model'); 
    class 
    GwcharsModelAddgwchar extends JModel 
       function 
    __construct() { 
          
    parent::__construct(); 
          
    $array JRequest::getVar('cid',  0'''array'); 
          
    $this->setId($array[0]); 
       } 
       function 
    setId($id) { 
          
    $this->_id $id
          
    $this->_data null
       }
       function 
    getData() { 
          if (empty( 
    $this->_data )) { 
             
    $query ' SELECT * FROM #__gwchars '
                      
    '  WHERE id = '.$this->_id
             
    $this->_db->setQuery$query ); 
             
    $this->_data $this->_db->loadObject(); 
          } 
          if (!
    $this->_data) { 
            
    $this->_data = new stdClass(); 
            
    $this->_data->id 0
            
    $this->_data->name null
            
    $this->_data->gender null;
            
    $this->_data->race null;
            
    $this->_data->profession null;
            
    $this->_data->published null;
            
    /*UserID*/
            
    $this->_data->user null
          } 
          return 
    $this->_data
       }
       function 
    store() { 
          
    $row =& $this->getTable(gwchar); 
          
    $data JRequest::get'post' ); 
          if (!
    $row->bind($data)) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->check()) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->store()) { 
             
    $this->setError$row->_db->getErrorMsg() ); 
             return 
    false
          } 
          return 
    true
       }
       function 
    delete() { 
          
    $cids JRequest::getVar'cid', array(0), 
                                    
    'post''array' ); 
          
    $row =& $this->getTable(gwchar); 
          if (
    count$cids )) { 
             foreach(
    $cids as $cid) { 
                if (!
    $row->delete$cid )) { 
                   
    $this->setError$row->getErrorMsg() ); 
                   return 
    false
                } 
             } 
          } 
          return 
    true
       } 

    ?>
    Template
    PHP-Code:
    <!-- userID --> 
    <input type="hidden" name="user" value="<?php echo $this->addgwchar->user?>" />
    <input type="hidden" name="task" value="save" />
    <input type="submit" name="Absenden" class="button validate" />
    Leider funktioniert es nicht wie gewünscht. Die UserID wird nicht eingetragen. Kann mir da jemand auf die Sprünge helfen?
    Danke schon im Voraus
    Geändert von Castor (22.04.2011 um 15:38 Uhr)
    Castor

  2. #2
    Neu an Board
    Registriert seit
    14.10.2009
    Beiträge
    38
    Bedankte sich
    7
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard

    Guten Morgen,

    meinst du die Benutzer-Id innerhalb von Joomla?

    Die holst du dir über das JUser-Objekt.

    Ich würde im Model:

    PHP-Code:
    $user JFactory::getUser() ; 
    einbauen.

    und dann das an das Template weiterleiten.

  3. Erhielt Danksagungen von:


  4. #3
    War schon öfter hier
    Registriert seit
    30.07.2009
    Ort
    Schweiz
    Alter
    21
    Beiträge
    160
    Bedankte sich
    29
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    habe das nun versucht:

    Model
    PHP-Code:
    <?php 
    defined
    ('_JEXEC') or die('Restriced Access'); 
    jimport('joomla.application.component.model'); 
    class 
    GwcharsModelAddgwchar extends JModel 
       function 
    __construct() { 
          
    parent::__construct(); 
          
    $array JRequest::getVar('cid',  0'''array'); 
          
    $this->setId($array[0]);
          
    /*userID*/
          
    $getuser = & JFactory::getUser();
          
    $this->setUser$getuser );
       } 
       function 
    setId($id) { 
          
    $this->_id $id
          
    $this->_data null
       }
       
       
    /*userID*/
       
    function setUser($user) {
           
    $this->_user $user;
           
    $this->_data null
       }
       function 
    getData() { 
          if (empty( 
    $this->_data )) { 
             
    $query ' SELECT * FROM #__gwchars '
                      
    '  WHERE id = '.$this->_id
             
    $this->_db->setQuery$query ); 
             
    $this->_data $this->_db->loadObject(); 
          } 
          if (!
    $this->_data) { 
            
    $this->_data = new stdClass(); 
            
    $this->_data->id 0
            
    $this->_data->name null
            
    $this->_data->gender null;
            
    $this->_data->race null;
            
    $this->_data->profession null;
            
    $this->_data->published null;
            
    /*UserID*/
            
    $this->_data->user null
          } 
          return 
    $this->_data
       }
       function 
    store() { 
          
    $row =& $this->getTable('gwchar'); 
          
    $data JRequest::get'post' ); 
          if (!
    $row->bind($data)) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->check()) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->store()) { 
             
    $this->setError$row->_db->getErrorMsg() ); 
             return 
    false
          } 
          return 
    true
       }
       function 
    delete() { 
          
    $cids JRequest::getVar'cid', array(0), 
                                    
    'post''array' ); 
          
    $row =& $this->getTable(gwchar); 
          if (
    count$cids )) { 
             foreach(
    $cids as $cid) { 
                if (!
    $row->delete$cid )) { 
                   
    $this->setError$row->getErrorMsg() ); 
                   return 
    false
                } 
             } 
          } 
          return 
    true
       } 

    ?>
    die userID wird aber nach wie vor nicht in die Datenbank geschrieben :S
    Geändert von Castor (19.03.2011 um 16:53 Uhr)
    Castor

  5. #4
    Joomla Guru Avatar von elkuku
    Registriert seit
    14.06.2006
    Ort
    Guayaquil - Südamerika
    Beiträge
    1.689
    Bedankte sich
    74
    Erhielt 517 Danksagungen
    in 397 Beiträgen

    Standard

    1. Möglichkeit: den Debugger anschmeissen und dort die Werte überprüfen..

    2. Möglichkeit: füge überall wo Du Werte änderst ein print_r() oder var_dump() hinzu und bevor dann redirected wird (falls), ein jexit()

    Dann solltest Du sehen wo es hakt
    Gruß,
    Nikolai
    Hilf mit: Deutsche Joomla! Dokumentation Help testing: EasyCreator Noch Fragen ? Forum.Joomla-Nafu.de

  6. Erhielt Danksagungen von:


  7. #5
    Neu an Board
    Registriert seit
    14.10.2009
    Beiträge
    38
    Bedankte sich
    7
    Erhielt 6 Danksagungen
    in 6 Beiträgen

    Standard

    Moin,

    stimmen denn auch die Spaltennamen mit den Bezeichnung der Felder im Formular überein?

    Eigentlich müsste man ja nur einmalig beim Erstellen des Datensatzes die Benutzer-ID speichern, die ändert sich ja nicht.

    Ich finde, dass die Methoden setID() und setuser() nicht notwendig sind.

    Kannst du auch im Konstruktor machen.
    PHP-Code:
    $this->_data null
    Und die Benutzer-Id direkt über $getuser->id bzw. $getuser->get('id') ansprechen.

  8. Erhielt Danksagungen von:


  9. #6
    War schon öfter hier
    Registriert seit
    30.07.2009
    Ort
    Schweiz
    Alter
    21
    Beiträge
    160
    Bedankte sich
    29
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    /edit: Also ich soll die UserID gar nicht per Formular übertragen, sondern direkt im controller? Würde insofern sinn machen als sonst einfach jeder mit Firebug im hidden input ne andere ID reinpflanzen könnte. Habs darum also im Model versucht:
    PHP-Code:
    <?php 
    defined
    ('_JEXEC') or die('Restriced Access'); 
    jimport('joomla.application.component.model'); 
    class 
    GwcharsModelAddgwchar extends JModel 
       function 
    __construct() { 
          
    parent::__construct(); 
          
    $array JRequest::getVar('cid',  0'''array'); 
          
    $this->setId($array[0]);
       } 
       
       function 
    setId($id) { 
          
    $this->_id $id
          
    $this->_data null
       }

       function 
    getData() { 
       
    /*set userID*/
       
    $user         = & JFactory::getUser();
          if (empty( 
    $this->_data )) { 
             
    $query ' SELECT * FROM #__gwchars '
                      
    '  WHERE id = '.$this->_id
             
    $this->_db->setQuery$query ); 
             
    $this->_data $this->_db->loadObject(); 
          } 
          if (!
    $this->_data) { 
            
    $this->_data = new stdClass(); 
            
    $this->_data->id 0
            
    $this->_data->name null
            
    $this->_data->gender null;
            
    $this->_data->race null;
            
    $this->_data->profession null;
            
    $this->_data->published null;
            
    /*write userID*/
            
    $this->_data->user $user->get('id'); 
          } 
          return 
    $this->_data
       }
       function 
    store() { 
          
    $row =& $this->getTable('gwchar'); 
          
    $data JRequest::get'post' ); 
          if (!
    $row->bind($data)) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->check()) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->store()) { 
             
    $this->setError$row->_db->getErrorMsg() ); 
             return 
    false
          } 
          return 
    true
       }
       function 
    delete() { 
          
    $cids JRequest::getVar'cid', array(0), 
                                    
    'post''array' ); 
          
    $row =& $this->getTable(gwchar); 
          if (
    count$cids )) { 
             foreach(
    $cids as $cid) { 
                if (!
    $row->delete$cid )) { 
                   
    $this->setError$row->getErrorMsg() ); 
                   return 
    false
                } 
             } 
          } 
          return 
    true
       } 

    ?>
    Leider funktioniert das nicht. Weiss jemand warum?
    Geändert von Castor (20.03.2011 um 21:02 Uhr)
    Castor

  10. #7
    Hat hier eine Zweitwohnung Avatar von progandy
    Registriert seit
    25.06.2007
    Beiträge
    1.939
    Bedankte sich
    13
    Erhielt 640 Danksagungen
    in 577 Beiträgen

    Standard

    Ich würde die Userid nicht bei getData zuweisen, sondern in deinem Controller oder View, bevor du die store-Methode aufrufst.
    Suche und FAQ helfen bei Problemen oft weiter!

  11. Erhielt Danksagungen von:


  12. #8
    War schon öfter hier
    Registriert seit
    30.07.2009
    Ort
    Schweiz
    Alter
    21
    Beiträge
    160
    Bedankte sich
    29
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Zitat Zitat von progandy Beitrag anzeigen
    Ich würde die Userid nicht bei getData zuweisen, sondern in deinem Controller oder View, bevor du die store-Methode aufrufst.
    PHP-Code:
       function store() { 
          
    $row =& $this->getTable('gwchar'); 
          
    $data JRequest::get'post' );
          
    /*Get userID*/
          
    $data['user_id'] = JFactory::getUser()->get('id');
          if (!
    $row->bind($data)) { 
             
    $this->setError($this->getError());
             return 
    false
          } 
          if (!
    $row->check()) { 
             
    $this->setError($this->getError()); 
             return 
    false
          } 
          if (!
    $row->store()) { 
             
    $this->setError$row->_db->getErrorMsg() ); 
             return 
    false
          } 
          return 
    true
       } 
    Meinst du so? Bin mir grad nicht sicher ob das sauber ist, ausserdem funktioniert es nicht. Die UserID wird aus ungerklärlichen Gründen nicht in die Datenbank geschrieben und print_r($data); gibt 1 aus XD (Also es werden alle Daten vom Formular in die DB geschrieben, aber eben nicht die UserID)
    Kann mir da jemand helfen?
    Castor

  13. #9
    Hat hier eine Zweitwohnung
    Registriert seit
    14.01.2006
    Ort
    Nienburg
    Alter
    32
    Beiträge
    1.237
    Bedankte sich
    115
    Erhielt 471 Danksagungen
    in 368 Beiträgen

    Standard

    dein id feld der tabelle heisst wirklich "user_id" und nicht zufaellig nur "id" oder gar anders ? ist das feld "user_id" in deiner von jtable abgeleiteten klasse definiert ? abgesehen davon, spar dir den manuellen aufruf von bind, check und store und nutze jtable::save, was von sich aus bind, check und store sowie checkin aufruft und ein override der methoden in deiner jtable klasse ermoeglicht. sofern du selbst keine check methode implementiert hast, macht check in deinem fall nichts ausser "return true" zurueckgeben. aktuell werden alle post ($_POST) daten nach durchlauf des "strict filter" an jtable und deren properties, und letztendlich an die datenbankfelder gebunden. es gilt hier zu schauen ob das so auch gewollt ist.

  14. Erhielt Danksagungen von:


  15. #10
    War schon öfter hier
    Registriert seit
    30.07.2009
    Ort
    Schweiz
    Alter
    21
    Beiträge
    160
    Bedankte sich
    29
    Erhielt 3 Danksagungen
    in 3 Beiträgen

    Standard

    Zitat Zitat von Matrikular Beitrag anzeigen
    dein id feld der tabelle heisst wirklich "user_id" und nicht zufaellig nur "id" oder gar anders ? ist das feld "user_id" in deiner von jtable abgeleiteten klasse definiert ? abgesehen davon, spar dir den manuellen aufruf von bind, check und store und nutze jtable::save, was von sich aus bind, check und store sowie checkin aufruft und ein override der methoden in deiner jtable klasse ermoeglicht. sofern du selbst keine check methode implementiert hast, macht check in deinem fall nichts ausser "return true" zurueckgeben. aktuell werden alle post ($_POST) daten nach durchlauf des "strict filter" an jtable und deren properties, und letztendlich an die datenbankfelder gebunden. es gilt hier zu schauen ob das so auch gewollt ist.
    Peinlich peinlich, ganz richtig. Ein simpler Schreibfehler. Tut mir leid Leute euch deswegen derartige Umstände bereitet zu haben.
    was jtable::save anbelangt: Ich habe erst grad angefangen mit joomla komponente programmierung und habe mir auf Galileo computing den Guide durchgelesen sowie mir diverse Komponente wie z.B. Eventlist (die mir sauber und professionell vorkamen) angeschaut und da hab ich bis jetz NIE jtable::save gefunden. Dies soll aber nicht heissen, dass jtable::save nicht die bessere Lösung ist ;-)
    Ich habe mir das gerade auf Joomwiki angeschaut, stehe aber noch auf dem Schlauch. Wie würde das konkret kurz umrissen in meinen Beispieldaten aussehen?
    Den letzten Abschnitt habe ich gar nicht verstanden:
    aktuell werden alle post ($_POST) daten nach durchlauf des "strict filter" an jtable und deren properties, und letztendlich an die datenbankfelder gebunden. es gilt hier zu schauen ob das so auch gewollt ist.
    Zwischen den Zeilen lese ich, dass ich irgendetwas an dem Code nicht verstehe ;-) Was soll genau wie gemeint sein? Falls du keine Zeit für eine Antwort hast oder ich mich eingehender mit der Materie beschäftigen sollte um die angepsrochenen Dinge zu verstehen einfach sagen, habe nämlich bei dem Post grad das Gefühl, dass ich zu wenig Grundwisen habe ;-)
    Gruss
    Castor

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

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