[PHP] Veel problemen met mijn nieuwsysteem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bart1074
  • Registratie: September 2003
  • Laatst online: 27-03-2024
Ik ben me sinds kort aan het verdiepen in PHP, en ben bezig met het schrijven van mn eerste nieuwssysteem. Maar een aantal pagina's willen niet echt goed lukken en zelf snap ik wel waarom maar geen flauw idee hoe het wel moet zeg maar. Het betreft de pagina's uit het admin gedeelte waarbij ik het nieuws kan aanpassen, waarbij ik het nieuws kan verwijderen, waarbij ik de comments kan plaatsen, waarbij ik de comments kan aanpassen en waarbij ik de comments kan verwijderen. Ook werkt mijn file/image uploader nog van geen kanten. Ik zal jullie niet gelijk met alles lastig vallen. Want daar zitten de moderators EN jullie vast en zeker niet op te wachten. Dus ik zal alleen die codes van nieuws aanpassen en nieuws verwijderen plaatsen. Maar mocht er toch iemand zijn die het leuk vind en bereid is mij te helpen hoor ik het graag dan kunnen we alleen beter emailen ofzo of msn maargoed dat hoor ik dan wel. hier mijn codes in de volgende volgorde: eerst de pagina waar het nieuws moet kunnen worden aangepast en vervolgens de pagina waar het moet kunnen worden verwijderd:

<< CODE >>
[u]// nieuws aanpassen \[/u]


PHP:
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Berichten bewerken</title>
<style type="text/css">
<!--
a:link {
    color: #910B0C;
}
a:visited {
    color: #910B0C;
}
a:hover {
    color: #910B0C;
}
a:active {
    color: #910B0C;
}
body,td,th {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #000033;
}
body {
    background-image: url(images/bg3.jpg);
}
-->
</style></head>

<body>
<?php 
session_start();

include("header.php");
include("config.php");

if(session_is_registered("sess_username")) 
{ 
          
         if(strlen($_POST['username']) < 1 || strlen($_POST['bericht']) < 1)  
         {  
                   echo("<table width=\"400\" border=\"0\" align=\"center\" bgcolor=\"#FFFFFF\"><tr><td><center>U heeft geen naam of bericht ingevuld. Klik op vorige om terug te gaan.</td></tr></table>");  
                   }  
                    else  
                     { 
         $n_id = $_GET['n_id'];  
         $sql2 = mysql_query("SELECT log_id FROM Loggers WHERE username = '$sess_username'");
         $row = mysql_fetch_object($sql2);
         $logger = $row->log_id;
         $titel = $_POST['titel'];
         $categorie = $_POST['categorie'];    
         $bericht = $_POST['bericht'];  
         $bericht = nl2br($bericht);  
         $bericht = bbcode($bericht);  
         $sql = "UPDATE Nieuws SET log_id ='$logger', titel='$titel', categorie='$categorie', bericht='$bericht' WHERE n_id='$n_id'";  
         mysql_query($sql) or die(mysql_error());  
         echo("<table width=\"400\" border=\"0\" align=\"center\" bgcolor=\"#FFFFFF\"><tr><td><center>Het bericht is bewerkt.</td></tr></table>");
         include("functions.php");
         refresh("admin.php", 1);
}  
}  
if(!$_POST['bewerk'])  
{  
$sql3 = mysql_query("SELECT * FROM Nieuws WHERE n_id = '$id'");  

$id = $_GET['n_id'];  
while($row = mysql_fetch_object($sql3))  
        { ?>  
<FORM ACTION="bbericht.php?n_id=<? echo $id; ?>" METHOD="post">
<TABLE align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"><br> 
<TR> 
        <TD><strong>Titel:</strong></TD> 
        <TD><input name="titel" type="text" id="titel" size="50" maxlength="100" value="<? echo "{$row->titel}"; ?>"></TD> 
</TR> 
<TR>
  <TD> </TD>
  <TD> </TD>
</TR>
<TR>
        <TD><strong>Categorie</strong></TD>
        <TD><select name="categorie" size="1" id="categorie" style="width: 325px;">
                                        <option selected disabled><? echo "{$row->categorie}"; ?></option>
                                        <option value="Drank en uitgaan">Drank en uitgaan</option>
                                        <option value="Hilarisch">Hilarisch</option>
                                        <option value="Muziek en DJ's">Muziek en DJ's</option>
                                        <option value="Nieuws">Nieuws</option>
                                        <option value="NSFW">NSFW</option>
                                        <option value="WWW">WWW</option>
                                        <option value="Overige">Overige</option>
                                    </select>
        </TD>
</TR>
<TR>
  <TD> </TD>
  <TD> </TD>
</TR>
<TR>
  <TD> </TD>
  <TD> </TD>
</TR>
<TR> 
        <TD><strong>Bericht:</strong></TD> 
        <TD><TEXTAREA name="bericht" COLS=50 ROWS=35><? echo "{$row->bericht}"; ?></TEXTAREA></TD> 
</TR> 
<TR>
  <TD></TD>
  <TD> </TD>
</TR>
<TR> 
        <TD></TD>
        <TD><INPUT TYPE="submit" VALUE="bewerken"><INPUT TYPE="hidden" NAME="bewerk" Value="bewerk"></TD> 
</TR> 
</TABLE> 
</form> 
</body> 
</htmL> 
<?  
}   
} 
?>


[b]// nieuws verwijderen \[/b]

PHP:
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Berichten verwijderen</title>
<style type="text/css">
<!--
a:link {
    color: #910B0C;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #910B0C;
}
a:hover {
    text-decoration: underline;
    color: #910B0C;
}
a:active {
    text-decoration: none;
    color: #910B0C;
}
body,td,th {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #000033;
}
body {
    background-image: url(images/bg3.jpg);
}
-->
</style></head>

<body>
<?  
session_start();

include("header.php");
include("config.php");

if(session_is_registered("sess_username")) 
{ 
  
$n_id = $_GET['n_id'];  
if($verwijderen == "yes")  
{  
$n_id = $_GET['n_id'];  
$delete = "DELETE FROM Nieuws WHERE id = '$n_id'";  
$delete2 = "DELETE FROM Comments WHERE n_id = '$n_id'";  
mysql_query($delete) or die(mysql_error());  
 mysql_query($delete2) or die(mysql_error());  
echo("Verwijderd.");
include("functions.php");
refresh("admin.php", 1);  
}  
if($verwijderen != "yes")  
{  
        $nid = $_GET['n_id']; ?>  
        <table width="400" border="0" align="center" bgcolor="#FFFFFF">
          <tr>
            <td>
                    <font class="16px">Wil je dit nieuws bericht echt verwijderen?</font><br> 
                    <a href="vbericht.php?nid=<? echo $nid; ?>&verwijderen=yes">Ja</a><br> 
                    <a href="admin.php">Nee</a>
            </td>
          </tr>
        </table> 
<? }  
} ?>
</body>
</html>


ALVAST HARTSTIKKE BEDANKT VOOR JULLIE HULP!!!

[ Voor 20% gewijzigd door NMe op 04-07-2005 22:03 . Reden: code tags gefixt, volgende keer zelf doen :) ]


Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 17:16

BM

Moderator Spielerij
Uhm, en wat werkte er precies niet? Geen beginnen aan om hier de fout in te zoeken.

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
  • Gebruik [code] tags.
  • Teveel hoofdletters wordt niet gewaardeerd
  • Gebruik iets meer enters in je verhaaltje
Ik snap nu niet echt precies wat je wilt? Graag even dat duidelijk aangeven :)

Daarnaast wat tips voor je code:
  • Gebruik geen session_ functies meer maar gewoon session_start() + $_SESSION
  • Je controleert bijv. niet of $_POST['categorie'] wel bestaat?
  • strlen($_POST['bericht']) < 1: -1 kan niet dus == 0 voldoet wel.. of !empty($_POST['bericht'])

Acties:
  • 0 Henk 'm!

  • falcon4ever
  • Registratie: Oktober 2001
  • Laatst online: 07-04-2021
misschien een idee om wat tabs in de code te zetten en je php in code tags want nu is het een oerwoud.
Daarnaast kan je het volgende beter vervangen door:

oud:
code:
1
2
3
echo("<table width=\"400\" border=\"0\" align=\"center\" bgcolor=\"#FFFFFF\">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>");


beter:
code:
1
2
3
echo('<table width="400" border="0" align="center" bgcolor="#FFFFFF">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>');


dus single quotes gebruiken zodat je niet elke aanhaalingsteken hoeft te escapen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dutchmega schreef op maandag 04 juli 2005 @ 22:01:
  • Gebruik [code] tags.
  • Teveel hoofdletters wordt niet gewaardeerd
  • Gebruik iets meer enters in je verhaaltje
Ik snap nu niet echt precies wat je wilt? Graag even dat duidelijk aangeven :)

Daarnaast wat tips voor je code:
  • Gebruik geen session_ functies meer maar gewoon session_start() + $_SESSION
  • Je controleert bijv. niet of $_POST['categorie'] wel bestaat?
  • strlen($_POST['bericht']) < 1: -1 kan niet dus == 0 voldoet wel.. of !empty($_POST['bericht'])
Weinig aan toe te voegen eigenlijk, behalve dat je (de topicstarter dus) session_start aanroept terwijl er al uitvoer verstuurd is. Zet error_reporting eens op E_ALL, en lees onze PHP-FAQ eens door. :)

Verder: P&W FAQ - De "quickstart". Daar staat in wat we graag zien in een topicstart. Kun je die even doorlezen en dan je topicstart even wat aanpassen, zodat alles wat duidelijker is? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

falcon4ever schreef op maandag 04 juli 2005 @ 22:04:
misschien een idee om wat tabs in de code te zetten en je php in code tags want nu is het een oerwoud.
Daarnaast kan je het volgende beter vervangen door:

oud:
code:
1
2
3
echo("<table width=\"400\" border=\"0\" align=\"center\" bgcolor=\"#FFFFFF\">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>");


beter:
code:
1
2
3
echo('<table width="400" border="0" align="center" bgcolor="#FFFFFF">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>');


dus single quotes gebruiken zodat je niet elke aanhaalingsteken hoeft te escapen.
Of gewoon enkele wel dubbele quotes gebruiken, maar enkele in je HTML...

@TS: Zet dit eens aan het begin van al je files:
error_reporting(E_ALL) ;

Scheelt een hoop zoeken en debuggen.

[ Voor 21% gewijzigd door Cavorka op 05-07-2005 00:23 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • Matthis
  • Registratie: Juli 2004
  • Laatst online: 13-06 13:45
Bovendien is je PHP code zo onveilig als maar kan...

PHP:
1
2
3
4
5
6
7
$titel = $_POST['titel'];
         $categorie = $_POST['categorie'];    
         $bericht = $_POST['bericht'];  
         $bericht = nl2br($bericht);  
         $bericht = bbcode($bericht);  
         $sql = "UPDATE Nieuws SET log_id ='$logger', titel='$titel', categorie='$categorie', bericht='$bericht' WHERE n_id='$n_id'";  
         mysql_query($sql) or die(mysql_error());


elke gebruiker kan je $_POST['variable'] manipuleren en invoegen wat hij wil, of doen met je db wat hij wil. Deze manier van programmeren is allemaal goed en wel als bv. magic_quotes_gpc aanstaan maar elders.

Lees eens een aantal artikels over SQL-injection, bv. de PHPSecurity Guide (http://phpsec.org/projects/guide/).

Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
Matthis schreef op dinsdag 05 juli 2005 @ 11:36:
Bovendien is je PHP code zo onveilig als maar kan...

PHP:
1
2
3
4
5
6
7
$titel = $_POST['titel'];
         $categorie = $_POST['categorie'];    
         $bericht = $_POST['bericht'];  
         $bericht = nl2br($bericht);  
         $bericht = bbcode($bericht);  
         $sql = "UPDATE Nieuws SET log_id ='$logger', titel='$titel', categorie='$categorie', bericht='$bericht' WHERE n_id='$n_id'";  
         mysql_query($sql) or die(mysql_error());


elke gebruiker kan je $_POST['variable'] manipuleren en invoegen wat hij wil, of doen met je db wat hij wil. Deze manier van programmeren is allemaal goed en wel als bv. magic_quotes_gpc aanstaan maar elders.
Dat snap ik nu niet, een dag ofzo geleden hebben ze me erop gedrukt dat ik moest gebruik gaan maken van $_POST en $_GET en nu is dat ineens onveilig ?? Moet er dan nog iets vooraf gaan ofzo ??

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

Verwijderd

I_M_P_A_C_T schreef op dinsdag 05 juli 2005 @ 18:21:

Dat snap ik nu niet, een dag ofzo geleden hebben ze me erop gedrukt dat ik moest gebruik gaan maken van $_POST en $_GET en nu is dat ineens onveilig ?? Moet er dan nog iets vooraf gaan ofzo ??
Lees eens iets over "SQL injection"

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
falcon4ever schreef op maandag 04 juli 2005 @ 22:04:
misschien een idee om wat tabs in de code te zetten en je php in code tags want nu is het een oerwoud.
Daarnaast kan je het volgende beter vervangen door:

oud:
code:
1
2
3
echo("<table width=\"400\" border=\"0\" align=\"center\" bgcolor=\"#FFFFFF\">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>");


beter:
code:
1
2
3
echo('<table width="400" border="0" align="center" bgcolor="#FFFFFF">
<tr><td><center>U heeft geen naam of bericht ingevuld. 
Klik op vorige om terug te gaan.</td></tr></table>');


dus single quotes gebruiken zodat je niet elke aanhaalingsteken hoeft te escapen.
echo is geen function dus
code:
1
echo 'blaat';

volstaat prima en werkt bovendien sneller!
Verwijderd schreef op dinsdag 05 juli 2005 @ 18:29:
[...]

Lees eens iets over "SQL injection"
Injections noemt men dit, is sind 4.1 niet meer mogelijk als ik me niet vergis.

[ Voor 20% gewijzigd door Depress op 05-07-2005 18:38 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Depress schreef op dinsdag 05 juli 2005 @ 18:36:
echo is geen function dus
code:
1
echo 'blaat';

volstaat prima en werkt bovendien sneller!
Sneller? Ow? :?
Injections noemt men dit, is sind 4.1 niet meer mogelijk als ik me niet vergis.
Volgens mij toch wel hoor. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 17-09 22:12

apNia

Schreeuwen en Nibbits eten!

Dit geeft de eerder genoemde URL
  • Filter your data.

    This cannot be overstressed. With good data filtering in place, most security concerns are mitigated, and some are practically eliminated.
  • Quote your data.

    If your database allows it (MySQL does), put single quotes around all values in your SQL statements, regardless of the data type.
  • Escape your data.

    Sometimes valid data can unintentionally interfere with the format of the SQL statement itself. Use mysql_escape_string() or an escaping function native to your particular database. If there isn't a specific one, addslashes() is a good last resort.
Hoe zou filteren moeten plaatsvinden? En hoe zouden quotes een verschil uitmaken in het genoemde voorbeeld op de site? Omdat PHP ze omzet naar harde-text quotes?

Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 21-09 11:30

Guldan

Thee-Nerd

@ I_M_P_A_C_T: $_POST is niet onveilig maar zoals je de data aanleverd in je query is het onveilig. Er is maar 1 regel in php devven die je nooit moet vergeten. Alle input die users geven in onveilig. Alles wat via een formulier aan een post var word geleverd kan misbruikt worden. Nu zijn er een paar verschillende manieren om te checken of iets veilig is.

is_numeric (om te kijken of het een nummer is)
htmlspecialchars() (zet alle html characters om)
addslashes() (zet een / voor een ")
stripslashes() (omgekeerde van de vorige)
mysql_real_escape_string() (om je query tegen sql injection te beschermen)

Zo ik hoop dat hier wat aan hebt. voor de rest staat alles in de manuel

[ Voor 4% gewijzigd door Guldan op 05-07-2005 18:43 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
Ik denk dat als je had gezegd "doe een controle op je input", dat het minder onduidelijk was geweest :p

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 17-09 22:12

apNia

Schreeuwen en Nibbits eten!

offtopic:
of je bedankt de man voor z'n uitgebreide uitleg?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Guldan schreef op dinsdag 05 juli 2005 @ 18:41:
Er is maar 1 regel in php devven die je nooit moet vergeten. Alle input die users geven in onveilig.
Dat geld voor al het devven.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 06-09 22:19
apNia schreef op dinsdag 05 juli 2005 @ 20:39:
offtopic:
of je bedankt de man voor z'n uitgebreide uitleg?
offtopic:
Bedankt voor de uitgebreide uitleg :). I_M_P_A_C_T geeft apNia een welverdient schouderklopje :)
Janoz schreef op dinsdag 05 juli 2005 @ 21:26:
[...]

Dat geld voor al het devven.
I second that, m'n input check script is nu al meer dan 500 regels lang :Y) . Maar ik denk persoonlijk dat het belangrijkste is erop checken dat gebruikers ZEKER geen <scripts> kunnen invoegen, anders is het enorm simpel om je hele site om zeep te helpen.

[ Voor 74% gewijzigd door imp4ct op 06-07-2005 01:29 ]

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 21:22
Waarom laat je je gebruikers uberhaupt HTML kloppen? Gewoon htmlspecialchars() voordat je iets van ze weergeeft op je site is imho aardig handiger. Waarom check je wel niet allemaal in 500 regels? Volgens mij kan dat veel sneller.

Verbouwing


Acties:
  • 0 Henk 'm!

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 17-09 22:12

apNia

Schreeuwen en Nibbits eten!

I_M_P_A_C_T schreef op dinsdag 05 juli 2005 @ 22:07:
[...]


offtopic:
Bedankt voor de uitgebreide uitleg :). I_M_P_A_C_T geeft apNia een welverdient schouderklopje :)
offtopic:
niet mij malle eppie hihi :D
Pagina: 1