You are not logged in.

  • "frmwrk_123" is male

Posts: 1,131

Location: Hamburg

Occupation: Informatikstudent

  • Send private message

21

Tuesday, July 10th 2012, 12:15pm

Das Problem ist einfach, dass in $this->workdata mehrere Arrays enthalten sind. Und erst diese Arrays besitzen einen Index 'username'. Wenn du im Übrigen nur eine Zeile ausliest, dann brauchst du auch die while-Schleife nicht, sondern dann kannst du gleich das hier benutzen:

PHP Source code

1
$row WCF::getDB()->getFirstRow($sql);

Die Übergabe an die Objektvariable $this->workdata müsste im Übrigen so aussehen:

PHP Source code

1
$this->workdata $row;


Dann entspricht $this->workdata auch dem Array $row und deine Übergabe mit username hätte funktioniert.
Mit freundlichen Grüßen
frmwrk_123

Nützliche Plugins zum Selberbauen

0xLeon

Member

  • "0xLeon" is male

Posts: 710

Location: Furtwangen

Occupation: Student (Medieninformatik)

  • Send private message

22

Tuesday, July 10th 2012, 12:17pm

Die Eigenschaft CashmanWorkTimeEditSingleUserForm::$workdata ist ein Array aus Datenbankzeilen. Als Index kommen nur aufsteigende Integer vor. Du versuchst einen Eintrag, der sich hinter so einem numerischen Index befindet, anzusprechen. Das klappt natürlich nicht. Außerdem macht das ganze ja keinen Sinn, da du doch über alle Einträge iterieren musst und so nur einen übergeben würdest, würde das funktionieren.
Kann es sein, dass du die Daten, die du aktuell so zu übergeben versuchst, eigemtlich die Eigenschaften von CashmanWorkTimeEditSingleUserForm sind, also sowas wie CashmanWorkTimeEditSingleUserForm::$username oder CashmanWorkTimeEditSingleUserForm::$startHour? Falls ja, musst du auch entsprechend die Klasseneigenschaften übergeben und nicht versuchen, die Daten aus einem Datenbankeintrag zu übergeben.
Meine Pakete
Invitation System – Plugin StoreGithub
Update Files Delete PIP – Plugin StoreGithub
Kein Support via PN oder E-Mail.

23

Tuesday, July 10th 2012, 12:29pm

Die Eigenschaft CashmanWorkTimeEditSingleUserForm::$workdata ist ein Array aus Datenbankzeilen. Als Index kommen nur aufsteigende Integer vor. Du versuchst einen Eintrag, der sich hinter so einem numerischen Index befindet, anzusprechen. Das klappt natürlich nicht.
Bis dahin habe ich das verstanden :)

Kann es sein, dass du die Daten, die du aktuell so zu übergeben versuchst, eigemtlich die Eigenschaften von CashmanWorkTimeEditSingleUserForm sind, also sowas wie CashmanWorkTimeEditSingleUserForm::$username oder CashmanWorkTimeEditSingleUserForm::$startHour? Falls ja, musst du auch entsprechend die Klasseneigenschaften übergeben und nicht versuchen, die Daten aus einem Datenbankeintrag zu übergeben.
Ja, es sollen die Eigenschaften übergeben werden.
Aber wie setze ich das um?
When nothing goes right..... go left! 8)

  • "frmwrk_123" is male

Posts: 1,131

Location: Hamburg

Occupation: Informatikstudent

  • Send private message

24

Tuesday, July 10th 2012, 12:36pm

Les dir bitte mal den Beitrag 21 durch und schaue im Anschluss auf deine SQL-Abfrage plus while-Schleife. Wenn du meine Tipps beachtest, dann sollte sich das Problem in nichts auflösen.
Mit freundlichen Grüßen
frmwrk_123

Nützliche Plugins zum Selberbauen

25

Tuesday, July 10th 2012, 2:40pm

Hi frmwrk_123,
hab den Beitrag gelesen und die Klasse umgeschrieben.

Klappt in soweit, dass die Werte richtig übergeben werden beim Templateaufruf :thumbup:


Was nicht klappt ist die Übernahme des usernamen.
Alle angelegten User bestehen aus Vorname Nachname.


In diesem Fall lautet der username "Hans Wurst",
übergeben wird aber nur "Hans"


Woran liegt das?


Und noch eine Frage zum Verständnis:
Wo ist der Unterschied zwischen

PHP Source code

1
$this->workdata $row;

Und

PHP Source code

1
$this->workdata[] = $row;



Grüße
When nothing goes right..... go left! 8)

0xLeon

Member

  • "0xLeon" is male

Posts: 710

Location: Furtwangen

Occupation: Student (Medieninformatik)

  • Send private message

26

Tuesday, July 10th 2012, 2:59pm

$row ist ein Array, was für jede Spalte der Tabelle einen Eintrag hat. Ersteres sort nun dafür, dass dieses Array direkt in die Klassenvariable geschrieben wird. Der zweite weg sorgt dafür, dass die Klassenvariable selbst ein Array ist und der erste Eintrag dieses Arrays das Array der Tabellenspalten mit entsprechenden Werten ist.
Meine Pakete
Invitation System – Plugin StoreGithub
Update Files Delete PIP – Plugin StoreGithub
Kein Support via PN oder E-Mail.

27

Tuesday, July 10th 2012, 4:11pm

$row ist ein Array, was für jede Spalte der Tabelle einen Eintrag hat. Ersteres sort nun dafür, dass dieses Array direkt in die Klassenvariable geschrieben wird.

Hmm,
die Spalte "username" beinhaltet ja den ganzen Benutzernamen,
warum wird denn nicht der gesamte Inhalt genommen, sondern nach dem Leerzeichen abgeschnitten?

Der Rest leuchtet mir ein.

In der Variante heute morgen habe ich

PHP Source code

1
$this->workdata[] = $row;

genutzt und das Array "workdata" mit einer {foreach}-Schleife zerlegt.

EDIT: Das hat soweit auch geklappt, aber ich hatte dann als value für die dropdowns $data.username,
resultierend aus {foreach from=$workdata item=$data}

Aktuell habe ich wie frmwrk_123 vorschlug

PHP Source code

1
$this->workdata $row;

verwendet, die Zuweisung in assignVariables() gemacht und die {foreach}-Schleife weggelassen.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /**
     * @see    Page::assignVariables()
     */
    public function assignVariables() {
        parent::assignVariables();
        
        WCF::getTPL()->assign(array(
            'worktimeID' => $this->worktimeID,
            'eventID' => $this->eventID,
            'username' => $this->workdata['username'],
            'hours' => range(0023),
            'minutes' => array('00' => '00'15 => 1530 => 3045 => 45),
            'startHour' => $this->workdata['startHour'],
            'startMinutes' => $this->workdata['startMinutes'],
            'endHour' => $this->workdata['endHour'],
            'endMinutes' => $this->workdata['endMinutes'],
            'workedMinutes' => $this->workdata['workedMinutes'],
            'jobs' => $this->jobs,
            'jobID' => $this->workdata['jobID']
        ));
    }
When nothing goes right..... go left! 8)

  • "frmwrk_123" is male

Posts: 1,131

Location: Hamburg

Occupation: Informatikstudent

  • Send private message

28

Wednesday, July 11th 2012, 5:47pm

Das Problem mit dem Usernamen kann an zwei Punkten liegen. Entweder er kommt schon zerstückelt aus der Datenbank (unwahrscheinlich, wenn richtiges Format) oder im Template wird irgendwas gemacht, was den Usernamen zerstückelt.
Mit freundlichen Grüßen
frmwrk_123

Nützliche Plugins zum Selberbauen

29

Thursday, July 12th 2012, 11:13pm

Rückmeldung:

Es war in der Tat noch ein Fehler im Template :rolleyes:

Nun klappt's :thumbup:
When nothing goes right..... go left! 8)