Webprogramozás arr PHP info php msyl lekérdezések
(#9) Jedimaster 2014.02.23. 12:59

Jedimaster
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...:)