Forum » Server-Side scripting » Script check
Hardstyle
Berichten: 225
avatar
Offline Stuur privebericht
Ik ben een mafia spel aan het maken, text based natuurlijk.

Ik heb nou eindelijk het berichtensysteem af, een paar fouten tegengekomen en verbeterd.

message.php
Code | Selecteer Alles
minimaliseren
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
<?php
/*
copyright: Youri van Mill
date:      12-12-2010
filename:  /message/index.php
*/

error_reporting(0);

include(
$_SERVER['DOCUMENT_ROOT'] . "/includes/config.inc");

if(!isset(
$_SESSION['nickname']))
{
    
header("location: /index.php");
    die();
}

echo(
"<html>
<head>
    <link type=\"text/css\" href=\""  
CSS_INCLUDE_DIR "/style.css\" rel=\"stylesheet\">
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">
    
    <title>xxxx</title>
</head>
<body>" 
PHP_EOL);

if(
$_GET['option'] == "new")
{
    if(!isset(
$_POST['submit']))
    {
        echo(
"<table width=\"50%\" align=\"center\">
    <form action=\"/message/index.php?option=new\" method=\"post\">
        <tr>
            <td colspan=\"2\" class=\"title\">Nieuw bericht maken</td>
        </tr>
        <tr>
            <td>Ontvanger:</td>
            <td><input type=\"text\" name=\"to\" value=\"" 
htmlentities($_GET['to']) . "\"></td>
        </tr>
        <tr>
            <td>Onderwerp:</td>
            <td><input type=\"text\" name=\"subject\" value=\"" 
htmlentities($_GET['subject']) . "\"></td>
        </tr>
        <tr>
            <td colspan=\"2\"><textarea cols=\"45\" rows=\"15\" name=\"msg\"></textarea></td>
        </tr>
        <tr>
            <td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Verstuur\"></td>
        </tr>
    </form>
</table>"
);
    }
    else 
    {
        
$sql mysql_query("SELECT nickname 
                            FROM members 
                            WHERE nickname = '" 
mysql_real_escape_string($_POST['to']) . "'"); 

        if(empty(
$_POST['to']))
        { 
            echo(
"Je bent vergeten in te vullen naar wie je het bericht wilt versturen."); 
        } 
        elseif(!
ctype_alnum($_POST['to']))
        {
            echo(
"Ongeldige invoer.");
        }
        elseif(empty(
$_POST['msg']))
        { 
            echo(
"Je moet wel een bericht versturen."); 
        }
        elseif(
$_POST['to'] == $data['nickname']) 
        { 
            echo(
"Je kan geen bericht naar jezelf verzenden."); 
        } 
        else 
        { 
            if(
mysql_num_rows($sql) == 0)
            { 
                echo(
"Deze persoon bestaat niet."); 
            } 
            else 
            {
                echo(
"Je bericht is verzonden."); 

                
mysql_query("INSERT INTO 
                             logs_message 
                             (timestamp,
                             ip,
                             info) 
                             VALUES 
                             ('" 
time() . "',
                             '" 
$_SERVER['REMOTE_ADDR'] . "',
                             '" 
strtolower($data['nickname']) . " send a message to " strtolower($_POST['to']) . "')");

                
mysql_query("INSERT INTO 
                             message 
                             (timestamp,
                             ip,
                             `from`,
                             `to`, 
                             subject, 
                             msg) 
                             VALUES 
                             ('" 
time() . "',
                             '" 
$_SERVER['REMOTE_ADDR'] . "',
                             '" 
strtolower($data['nickname']) . "', 
                             '" 
strtolower($_POST['to']) . "', 
                             '" 
addslashes($_POST['subject']) . "', 
                             '" 
addslashes(htmlentities($_POST['msg'])) . "')");
            } 
        } 
    }
}
elseif(
$_GET['option'] == "inbox")
{
    echo(
"<table width=\"50%\" align=\"center\">
    <tr>
        <td class=\"title\" colspan=\"3\">Inbox</td>
    </tr>" 
PHP_EOL);

    
$sql mysql_query("SELECT *
                        FROM message
                        WHERE `to` = '" 
$data['nickname'] . "'");

    echo(
"    <tr>
        <td>Onderwerp</td>
        <td>Datum</td>
        <td>&nbsp;</td>
    </tr>" 
PHP_EOL);

    if(
mysql_num_rows($sql) == 0)
    {
        echo(
"    <tr>
        <td colspan=\"3\">Geen nieuwe berichten.</td>
    </tr>"
);
    }
    else
    {
        while(
$res mysql_fetch_assoc($sql))
        {
            echo(
"    <tr>
        <td><a href=\"/message/index.php?option=read&message_id=" 
$res['id'] . "\">" $res['subject'] . "</a></td>
        <td>" 
strftime("%e-%m-%Y, %H:%M"$res['timestamp']) . "</td>
        <td><a href=\"/message/index.php?option=delete&message_id=" 
$res['id'] . "\">Verwijder</a></td>
    </tr>"
);
        }
    }
    
    echo(
PHP_EOL "</table>");
}
elseif(
$_GET['option'] == "read")
{
    
$sql mysql_query("SELECT *
                        FROM message
                        WHERE id = '" 
mysql_real_escape_string($_GET['message_id']) . "' AND `to` = '" $data['nickname'] . "'");

    if(!isset(
$_GET['message_id']))
    {
        echo(
"Geen bericht geselecteerd.");
    }
    else
    {
        if(!
ctype_digit($_GET['message_id']))
        {
            echo(
"Ongeldig ID.");
        }
        else
        {
            if(
mysql_num_rows($sql) == 0)
            {
                echo(
"Dit bericht bestaat niet of is niet naar jou verzonden.");
            }
            else
            {
                
$res mysql_fetch_assoc($sql);

                if(
$res['read'] == "no")
                {
                    
mysql_query("UPDATE message
                                 SET `read` = 'yes'
                                 WHERE id = '" 
mysql_real_escape_string($_GET['message_id']) . "'");
                }
                else
                { 
                    
/* lets do nothing */
                
}

                echo(
"<table width=\"50%\" align=\"center\">
    <tr>
        <td class=\"title\" colspan=\"2\">Bericht lezen</td>
    </tr>
    <tr>
        <td width=\"50%\">Onderwerp:</td>
        <td width=\"50%\">" 
$res['subject'] . "</td>
    </tr>
    <tr>
        <td width=\"50%\">Datum:</td>
        <td width=\"50%\">" 
strftime("%e-%m-%Y, %H:%M"$res['timestamp']) . "</td>
    </tr>
    <tr>
        <td colspan=\"2\">Bericht:</td>
    </tr>
    <tr>
        <td colspan=\"2\">" 
stripslashes($res['msg']) . "</td>
    </tr>
</table>"
);
            }
        }
    }
}
elseif(
$_GET['option'] == "delete")
{
    
$sql mysql_query("SELECT *
                        FROM message
                        WHERE id = '" 
mysql_real_escape_string($_GET['message_id']) . "' AND `to` = '" $data['nickname'] . "'");
                        
    if(!isset(
$_GET['message_id']))
    {
        echo(
"Geen bericht geselecteerd.");
    }
    else
    {
        if(!
ctype_digit($_GET['message_id']))
        {
            echo(
"Ongeldig ID.");
        }
        else
        {
            if(
mysql_num_rows($sql) == 0)
            {
                echo(
"Dit bericht bestaat niet of is niet naar jou verzonden.");
            }
            else
            {
                echo(
"Bericht verwijderd.");
            
                
mysql_query("INSERT INTO 
                             logs_message 
                             (timestamp,
                             ip,
                             info) 
                             VALUES 
                             ('" 
time() . "',
                             '" 
$_SERVER['REMOTE_ADDR'] . "',
                             '" 
$data['nickname'] . " deleted message id: " $_GET['message_id'] . "')");
            
                
mysql_query("DELETE FROM message
                             WHERE id = '" 
mysql_real_escape_string($_GET['message_id']) . "'");
            }
        }
    }
}
else
{
    echo(
"Selecteer een optie.");
}

echo(
PHP_EOL "</body>
</html>"
);
?>


Al het commentaar is welkom, slecht en goed.
Zeg maar wat jullie er van vinden, en wat je zelf zou veranderen.


Laatst gewijzigd door Jackie op 2010-12-14 23:21:56
14-12-2010 23:20
Dit topic is 383 keer bekeken door 55 verschillende leden
Reacties op: "Script check"
1 | 2 Volgende pagina
webbasing.com
Berichten: 593
avatar
Offline Stuur privébericht
ziet er op zich wel netjes uit! zal je even per msn wat dingen nog vertellen
14-12-2010 23:21
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
EDIT;
@RDMNL2010
Bedankt voor je reactie we praten wel verder haha.

Iemand anders?
14-12-2010 23:24
Berichten: 637
avatar
Offline Stuur privébericht
Als ik jou was zou ik zoon echo gebruiken:
Code | Selecteer Alles
minimaliseren
1
Echo'hier html';

Inplaats van met "hier je text" ik vind het namelijk altijd maar slordig al die backslashes. En het is natuurlijk minder overzichtelijk.
15-12-2010 08:14
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Bedank voor je reactie Bever.

Ik hou het bij:

Code | Selecteer Alles
minimaliseren
1
echo("<td class=\"title\">Welkom</td>");


Omdat ik het zelf mooier vind.

Nog iemand anders?
15-12-2010 08:59
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Hoe wil je dat dan doen?

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
<?php
if($res == false)
{
?>
    html??
<?php
}
?>


??
15-12-2010 09:34
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
Grote stukken html kan je beter uit php halen , dit scheelt ook veel voor de netheid.
Verder waarom gebruik je niet echo '';? is net iets sneller scheelt niet veel maar scheelt weer paar miliseconden!

Voor de rest waarom gebruik je in database zelf read met een varchar waar door je yes en no doet terwijl als je cijfers gebruikt met een integer dit sneller werkt!

Ook snap ik het nut niet van je mysql_escape_string die je over een id doet terwijl die id ook gewoon kan beveiligen met een inter val erom heen te zetten zoals (int) $id .

Ik geef dit als tips het moet niet maar kan wel schelen.
Mocht je ooit problemen hebben en andere mensen willen je helpen scheelt het ook dat zij alles sneller kunnen vinden als het netjes is opgebouwd. Het is zeer belangrijk dat programmeurs zijn / haar code netjes opbouwen zodat iedereen er aan kan werken, dit zie je vaak bij opensource of bij bedrijven onderling met collega's dat zij coding regels hebben samengesteld waar ze zich aan moeten houden.
15-12-2010 10:25
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Oke bedankt voor de tips.

Hoe doe je dat dan met die (int) $id;

Kan je me dat laten zien in een voorbeeldje?
15-12-2010 10:37
Berichten: 1751
avatar
Offline Stuur privébericht
Je kunt genoeg doen om html uit php te halen template parser of oophp scripten! succes ermee!
15-12-2010 10:47
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
Quote

Je kunt genoeg doen om html uit php te halen template parser of oophp scripten! succes ermee!



je kan het ook gewoon via functions doen, maar genoeg mogelijkheden klopt

@ts

Let op als het id niet alleen uit cijfers bestaat kan het niet he!

Voorbeeld:
Code | Selecteer Alles
minimaliseren
1
"SELECT * FROM message WHERE id = '" . (int) $_GET['message_id'] . "';"
15-12-2010 13:29
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Wat doet die (int) dan, alleen maar een getal eruit halen? Controleren of het een getal is (zo niet fout weergeven?)
15-12-2010 14:06
Reageer op: "Script check"
1 | 2 Volgende pagina
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden