
Jedimaster
Kezdő
|
Sziasztok!
Van egy kisebb problémám:
van egy belső levelező rendszerem(része az alkalmazásnak).
A bejövő és kimenő üzenetek listázása jól műxik, ha kiválasztom az adott levelet checkbox segítségével és törlöm, az is - akár több levéllel is -, de ha meg próbálok nyitni egy levelet, akkor már array to string conversion figyelmeztetést kapok.
A levél megnyitása úgy néz ki, hogy van egy MainController::inbox(), ami két tagfüggvényt hív meg: a MessengerModel::inbox() és a MessengerModel::inbox_messages() -t. Ezek előállítják a beérkezők számát(inbox()) és az üzenet részleteit, amit egy $messages változóba ment, megformázva. Van egy InboxView.php, ami ezeket fogadja és abban íródik ki.
Az üzenet tartalma rész egy link, ami a MessengerController::view_inbox() metódusát hívja meg és átadja neki az id -t.
Ez alapján a MessengerModel::view_in() hívódik meg és megkapja az $id -t. Ez alapján kikeresi az üzenetet, aminek ez a PK -ja és ismét egy formázott kiíratás következik, amit megkap a vezérlőn keresztül a ReceivedView.php.
A kódok(csak a lényeg):
MainController:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// ...
public function inbox() {
include_once( BASE_PATH . "models/MessengerModel.php" );
$model = new MessengerModel();
$numbers = $model -> inbox();
$messages = $model -> inbox_messages();
if( !empty( $numbers ) ) {
$this -> v[ "numbers" ] = $numbers;
} else {
$this -> v[ "numbers" ] = 0;
}
if( !empty( $messages ) ) {
$this -> v[ "messages" ] = $messages;
} else {
$this -> v[ "messages" ] = null;
}
unset( $model );
$this -> v[ "title" ] = "Beérkező üzenetek";
$this -> add_view( "InboxView" );
}
// ...
|
MessengerModel::inbox() és MessengerModel::inbox_messages():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
// ...
public function inbox() {
$query = "SELECT COUNT(id) AS numbers FROM inbox WHERE user_id='" . $_SESSION[ "id" ] . "'";
$result = mysql_query( $query );
if( $result ) {
$this -> row = mysql_fetch_assoc( $result );
$numbers = $this -> row[ "numbers" ];
} else {
$numbers = 0;
}
return $numbers;
}
public function inbox_messages() {
$query = "SELECT * FROM inbox WHERE user_id='" . $_SESSION[ "id" ] . "' ORDER BY id DESC";
$result = mysql_query( $query );
$messages = "";
while( $this -> row = mysql_fetch_assoc( $result ) ) {
$messages .= '<tr>
<td width="50" align="center">
<input type="checkbox" name="checkbox[]" value="' . $this -> row[ "id" ] . '" />
</td>
<td width="350" align="center">
<a href="index.php?q=MessengerController/view_inbox/' . $this -> row[ "id" ] . '">';
if( $this -> row[ "viewed" ] == 0 ) {
$messages .= '<b>' . $this -> row[ "title" ] . '</b>';
} else if( $this -> row[ "viewed" ] == 1 ) {
$messages .= $this -> row[ "title" ];
}
$messages .= '</a>
</td>
<td width="100" align="center">' .
$this -> row[ "from_username" ] .
'</td>
</tr>';
}
return $messages;
}
// ...
|
Az InboxView semmi mást nem csinál, mint kiírja ezeket:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
echo '<div class="content">
<div class="center">
<h1>Beérkező üzenetek:</h1>
<table align="center">
<form method="post" action="index.php?q=MessengerController/delete_inbox">
<tr>
<td width="50" align="center">
#
</td>
<td width="350" align="center">
Üzenet címe:
</td>
<td width="100" align="center">
Címzett:
</td>
</tr>';
if( !empty( $this -> v[ "messages" ] ) ) {
echo $this -> v[ "messages" ];
}
echo '<tr>
<td colspan="3" align="center">';
if( $this -> v[ "numbers" ] > 0 ) {
echo '<input type="submit" name="delete" value="Töröl" />';
} else {
echo 'Nincsenek üzenetek.';
}
echo '</td>
</tr>
</form>
</table>
<hr />';
|
MessengerController::view_inbox():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// ...
public function view_inbox( $id ) {
include_once( BASE_PATH . "models/MessengerModel.php" );
if( !empty( $id ) ) {
$model = new MessengerModel();
$message = $model -> view_in( $id );
if( !empty( $messages ) ) {
$this -> v[ "messages" ] = $messages;
} else {
$this -> v[ "messages" ] = null;
}
unset( $model );
}
$this -> v[ "title" ] = "Beérkező üzenetek";
$this -> add_view( "ReceivedView" );
}
// ...
|
MessengerModel::view_in():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
// ...
public function view_in( $id ) {
$query = "SELECT * FROM inbox WHERE id='" . $id . "'";
$result = mysql_query( $query );
$messages = "";
while( $this -> row = mysql_fetch_assoc( $result ) ) {
if( $this -> row[ "viewed" ] == 0 ) {
$query = "UPDATE inbox SET viewed='1' WHERE id = '" . $id . "'";
$result = mysql_query( $query );
$messages .= '<table align="center">
<tr>
<td width="150">
<b>Feladó:</b>
</td>
<td>' .
$this -> row[ "from_username" ] .
'</td>
</tr>
<tr>
<td width="150">
<b>Üzenet címe:</b>
</td>
<td>' .
$this -> row[ "title" ] .
'</td>
</tr>
<tr>
<td width="150">
<b>Küldés ideje:</b>
</td>
<td>' .
$this -> row[ "receive_date" ] .
'</td>
</tr>
<tr>
<td width="150">
<b>Üzenet:</b>
</td>
<td>' .
$this -> row[ "content" ] .
'</td>
</tr>
</table>';
}
}
return $messages;
}
// ...
|
Végül a ReceivedView:
1
2
3
4
5
6
7
8
9
10
11
|
echo '<div class="content">
<div class="center">
<h1>Ezt küldték neked:</h1>';
if( !empty( $this -> v[ "messages" ] ) ) {
echo $this -> v[ "messages" ];
}
echo '<hr />';
|
Csak a lényeget másoltam ki, mivel a MessengerModel már vagy 400 soros és már nekem sincs kedvem kibogarászni...
A probléma ott jön ki, hogy kilistázza szépen a leveleket, az üzenet címe rész egy link, ha rákattintunk, meg kéne jelenjen az üzenet, de ehelyett az array to string conversion figyelmeztetést kapom, pedig az $id nem egy array. Ez az a
$this -> v[ "id" ], ami bár tömbindex, de önmaga nem egy tömb...
Jah: a keretrendszert én írtam meg, még elég basic, de majd idővel fejlesztgetem...:)
|