Empfehlungen: Erweiterte Suche

Zugriff auf Daten aus der DB will nicht

Daten auslesen, verarbeiten und den Views übergeben

Zugriff auf Daten aus der DB will nicht

Beitragvon doppelD » Fr 1. Okt 2010, 15:59

Ich möchte über den Benutzernamen den Datensatz des Users finden um damit im Controller weiter arbeiten zu können.
Dazu habe ich folgende Zeile:
Code: Alles auswählen
$this->User->findByUsername($this->data->User->username);

Wenn ich den Inhalt von $this->data ausgeben lasse bekomme ich folgende Ausgabe:
Array
(
[User] => Array
(
[world_id] => 0
[username] => Test
[password] => be31855d4095fc6d1449c4a12a8676eb9e8ae029
[email] => test@test.de
[anb] => 1
)
)

Ich verstehe nicht, warum bereits bei der Ausgabe von $this->data->User nichts mehr kommt.
Es werden keine Daten mehr angezeigt.

Was mache ich falsch?
Gibt es eine bessere Lösung für das was ich programmieren will?
Ich möchte beim registrieren des Users bereits weitere Einträge in anderen Tabellen erzeugen, auf die der User später zugreifen wird und vordefinierte Werte eintragen.
Um dies machen zu können benötige ich die ID des gerade gespeicherten Datensatz.
Hier mal mein ganzer Code:
Code: Alles auswählen
function add() {
        if (!empty($this->data)) {
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->User->saveField('group', 'spieler');
                pr($this->data);
                $this->User->findByUsername($this->data->User->username);
                $this->Player->create();
                if ($this->Player->saveFild('user_id', $this->User->id) && $this->Player->saveFild('world_id', $this->User->world_id) && $this->Player->saveFild('regdat', $this->data->User->created)) {
                    $this->Session->setFlash(__('Registrierung erfolgreich', true));
                    $this->redirect(array('action' => '../pages/uebersicht'));
                } else {
                    $this->Session->setFlash(__('Die Registrierung ist fehlgeschlagen. Bitte versuche es noch einmal.', true));
                }
            } else {
                $this->Session->setFlash(__('Die Registrierung ist fehlgeschlagen. Bitte versuche es noch einmal..', true));
            }
        }
    }
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon Flo » Fr 1. Okt 2010, 17:42

versuch mal
Code: Alles auswählen

<?php
pr($this->data['User']['username']);
?>
 


$this->data ist eine Objectvariable, in dieser sind die übergebenen Daten als Array hinterlegt...
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon doppelD » Fr 1. Okt 2010, 18:19

Danke, das funktioniert.

Jetzt hab ich gleich die nächste Frage.
Wie kann ich auf den gefundenen Datensatz jetzt zugreifen?
In $this->User kann ich den nicht wirklich finden.
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon Flo » Fr 1. Okt 2010, 18:53

musst das in eine Variable laden, und dort hast du dann wieder einen Array, ist simples PHP...
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon doppelD » Mo 4. Okt 2010, 07:42

Das habe ich geschafft.

Nun hat sich gleich das nächste Problem ergeben.
Hier erstmal mein Code wie er jetzt aussieht:
Code: Alles auswählen
function add() {
        if (!empty($this->data)) {
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->User->saveField('group', 'spieler');
                $nUser = $this->User->findByUsername($this->data['User']['username']);
                pr($nUser['User']['id']);
                $this->Player->create();
                if ($this->Player->saveFild('user_id', $nUser['User']['id']) &amp;&amp; $this->Player->saveFild('world_id', $nUser['User']['world_id']) &amp;&amp; $this->Player->saveFild('regdat', $nUser['User']['created'])) {
                    $this->Session->setFlash(__('Registrierung erfolgreich', true));
                    $this->redirect(array('action' => '../pages/uebersicht'));
                } else {
                    $this->Session->setFlash(__('Die Registrierung ist fehlgeschlagen. Bitte versuche es noch einmal.', true));
                }
            } else {
                $this->Session->setFlash(__('Die Registrierung ist fehlgeschlagen. Bitte versuche es noch einmal..', true));
            }
        }
    }
 

Jetzt macht die Speicherung der Daten Probleme.
Code: Alles auswählen
$this->Player->saveFild('user_id', $nUser['User']['id'])

Jedes dieser drei verwendeten Befehle bringen die gleiche Fehlermeldung:
Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'saveFild' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 526]

Die Users-Tabelle wird richtig befüllt, aber die Players-Tabelle bleibt leer.
Ich habe auch überprüft, ob die Spaltennamen falsch geschrieben wurden, aber dem ist nicht so.

Hier mal noch das Player-Model, falls der Fehler da ist:
Code: Alles auswählen
class Player extends AppModel {

    var $name = 'Player';
    var $validate = array(
        'id' => array('numeric'),
        'user_id' => array('numeric'),
        'world_id' => array('numeric')
    );
}
 

Und hier noch wie die Tabelle aufgebaut ist:
CREATE TABLE IF NOT EXISTS `cake_players` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`world_id` int(11) NOT NULL,
`regdat` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

Kann mir da jemand helfen?
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon euromark » Mo 4. Okt 2010, 09:55

erstmal solltest du UTF8 und utf8_unicode_ci (nicht "utf8_general_ci"!) für alle tabellen verwenden.

zweitens schadet ein englisch kurs nicht :)
"saveFild" sollte "saveField" heißen und ist übrigens aus der fehlermeldung ersichtlich
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon doppelD » Mo 4. Okt 2010, 12:34

Ok, wer liest ist klar im Vorteil. :oops:

Netzt kommt folgende Fehlermeldung:
Warning (512): SQL Error: 1062: Duplicate entry '0' for key 'PRIMARY' [CORE\cake\libs\model\datasources\dbo_source.php, line 526]
Query: INSERT INTO `cake_players` (`regdat`) VALUES ('2010-10-04 13:21:08')
Muss ich das saveField() irgendwie anders anwenden oder ist updateAll() die richtige Funktion um die Daten zu speichern?
In der Tabelle wurde folgendes gespeichert:
id user_id world_id regdat
0 1 0 0000-00-00 00:00:00
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon euromark » Mo 4. Okt 2010, 12:44

auch hier ist die fehlermeldung wieder eindeutig
du hast das primary feld nich unique!!!

weder noch
save()

siehe docs
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon doppelD » Mo 4. Okt 2010, 16:36

Habe den betreffenden Code jetzt folgendermaßen geändert:
Code: Alles auswählen
$this->Player->create();
$this->Player->set(array(
    'world_id' => $nUser['User']['world_id'],
    'user_id' => $nUser['User']['id'],
    'regdat' => $nUser['User']['created']
));
if ($this->Player->save()) {
    $this->Session->setFlash(__('Registrierung erfolgreich', true));
    $this->redirect(array('action' => '../pages/uebersicht'));
} else {
    $this->Session->setFlash(__('Die Registrierung ist fehlgeschlagen. Bitte versuche es noch einmal.', true));
}
 

Das Speichern funktioniert jetzt.

Nun kommt aber folgende Fehlermeldung:
Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\cake\cake\basics.php:305) [CORE\cake\libs\controller\controller.php, line 646]

Ich glaube, ich brauch mal ein tiefergehendes Tutorial um Cake besser zu verstehen.
Mit der Doku komm ich nicht so gut zurecht und die anderen Tuts machen nur die oberflächlichen Erklärungen, die zwar nützlich sind, aber nicht mehr helfen wenn die anwendung etwas komplizierter wird.

Was mache ich hier nun wieder falsch?
doppelD
 
Beiträge: 21
Registriert: Di 20. Apr 2010, 20:55

Re: Zugriff auf Daten aus der DB will nicht

Beitragvon euromark » Mo 4. Okt 2010, 18:31

du gibst VOR dem view zeichen aus
also im controller, model etc

vermutlich auch nur irgend ein leerzeichen am ende eines php files

?>
LEERZEICHEN (=> Darf nicht sein!)
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Nächste

Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron