Wie is bereid zich te verdiepen?
Wie is bereid zich te verdiepen in mijn code, want ik krijg namelijk niet het gewenste resultaat. Ik zal het zo duidelijk mogelijk beschrijven. Op de pagina komen ingeleverde
ideeën te staan, met elk hun eigen gegevens. Deze ideeën kunnen beoordeeld worden door
gebruikers, (een score van 0 tot 100), maar op het moment dat een persoon 1 idee beoordeeld,
wordt de gegeven score aan alle ideeën op dezelfde pagina toegevoegd! Als ze al eens op
een idee gestemt hadden, blijft die score gewoon gelijk. Dit is de code:
Code (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
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
<?php
$query = mysql_query("SELECT id,titel,gebruiker,categorie,idee,time FROM GekeurdeIdeeen ORDER BY id ASC"); //Gegevens uit de database halen: met SELECT worden de velden gekozen die weergegeven moeten worden, FROM geeft de tabel van de database aan en met ORDER BY wordt de sorteervolgorde aangegeven. In dit geval is dat ASCending (oplopend) op id.
if(mysql_num_rows($query) == 0){//Er zijn geen ideeen gevonden (je krijgt een foutmelding te zien)
echo"Er zijn geen gekeurde ideeën gevonden!";
}
else
{
while($rij = mysql_fetch_object($query))
{
$id = htmlspecialchars($rij->id);
$titel = htmlspecialchars($rij->titel);
$gebruiker = htmlspecialchars($rij->gebruiker);
$categorie = htmlspecialchars($rij->categorie);
$idee = htmlspecialchars($rij->idee);
$time = htmlspecialchars($rij->time);
$titeldeel = substr("$titel", 0, 1);
$tabelcode = $titeldeel.$id;
echo "<Br /><Br /><Br /><Br /><Br /><Br />
<TABLE style=\"float:left;\">
<TR>
<TD WIDTH=\"396\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Titel:</strong> ".$titel."</TD>
<TD WIDTH=\"40\" HEIGHT=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>ID:</strong> ".$id." <br /></TD>
<TD WIDTH=\"170\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Gepost door:</strong> ".$gebruiker."</TD>
</TR>
</TABLE><Br /><br />
<table style=\"float:left\">
<TR>
<TD WIDTH=\"398\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Datum gepost:</strong> ".$time."</TD>
<TD WIDTH=\"218\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Categorie:</strong> ".$categorie."</TD>
</TR>
</table><br /><br />
<table style=\"float:left; margin-right: 15px\">
<TR>
<TD VALIGN=\"TOP\" WIDTH=\"626\" style=\"padding-top: 4px; padding-right:3px\" height=\"90\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Idee:</strong> ".$idee."</TD>
</TR>
</TABLE>";
$sqlcheck = "SELECT id FROM $tabelcode WHERE account = '$account[login]'";
$rescheck = mysql_query($sqlcheck);
if (mysql_num_rows($rescheck) >= 1)
{
$sqlaantal = "SELECT * FROM $tabelcode";
$resaantal = mysql_query($sqlaantal);
$aantal = mysql_num_rows($resaantal);
$gemidsql = "SELECT avg(stem) AS gemiddelde FROM $tabelcode";
$gemidres = mysql_query($gemidsql);
$stem = mysql_fetch_assoc($gemidres);
$sqleigenstem = "SELECT stem AS eigenstem FROM $tabelcode WHERE account = '$account[login]'";
$reseigenstem = mysql_query($sqleigenstem);
$eigenstem = mysql_fetch_assoc($reseigenstem);
echo "<p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: #000000\">Score:<p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 30px; color: #000000\"> ".$stem['gemiddelde']." <p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; margin-top: 7px\">Jouw stem: <b>".$eigenstem['eigenstem']."</b><Br /> Aantal stemmen: <b/>$aantal<b>";
}
else
{
echo"
<form style=\"float:right;margin-right: 35px;\" action=\"$_SELF\" method=\"post\">
<input type=\"text\" name=\"stem\" value=\"\" style=\"width:40px; padding-top:2px; padding-bottom: 2px; margin-bottom: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 20px;\" maxlenght:\"3\"><br />
<input type=\"submit\" style=\"padding:3px; margin-top: 5px; margin-bottom: 5px\" name=\"submit1\" value=\"Stem!\">
</form>";
}
if ($_POST[submit1] && $_POST[stem] && $_POST[stem] > 0 && $_POST[stem] < 101)
{
$sql = "INSERT INTO $tabelcode (id, account, stem) VALUES ('', '$account[login]', '$_POST[stem]')";
$res = mysql_query($sql);
header("Location: openideeen.php");
}
elseif ($_POST[submit1] && (!$_POST[stem] || $_POST[stem] < 1 || $_POST[stem] > 100))
{
echo"<br /><br /><Br /><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: red\">Foutief gestemd!";
}
}
}
?>
$query = mysql_query("SELECT id,titel,gebruiker,categorie,idee,time FROM GekeurdeIdeeen ORDER BY id ASC"); //Gegevens uit de database halen: met SELECT worden de velden gekozen die weergegeven moeten worden, FROM geeft de tabel van de database aan en met ORDER BY wordt de sorteervolgorde aangegeven. In dit geval is dat ASCending (oplopend) op id.
if(mysql_num_rows($query) == 0){//Er zijn geen ideeen gevonden (je krijgt een foutmelding te zien)
echo"Er zijn geen gekeurde ideeën gevonden!";
}
else
{
while($rij = mysql_fetch_object($query))
{
$id = htmlspecialchars($rij->id);
$titel = htmlspecialchars($rij->titel);
$gebruiker = htmlspecialchars($rij->gebruiker);
$categorie = htmlspecialchars($rij->categorie);
$idee = htmlspecialchars($rij->idee);
$time = htmlspecialchars($rij->time);
$titeldeel = substr("$titel", 0, 1);
$tabelcode = $titeldeel.$id;
echo "<Br /><Br /><Br /><Br /><Br /><Br />
<TABLE style=\"float:left;\">
<TR>
<TD WIDTH=\"396\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Titel:</strong> ".$titel."</TD>
<TD WIDTH=\"40\" HEIGHT=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>ID:</strong> ".$id." <br /></TD>
<TD WIDTH=\"170\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Gepost door:</strong> ".$gebruiker."</TD>
</TR>
</TABLE><Br /><br />
<table style=\"float:left\">
<TR>
<TD WIDTH=\"398\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Datum gepost:</strong> ".$time."</TD>
<TD WIDTH=\"218\" height=\"30\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Categorie:</strong> ".$categorie."</TD>
</TR>
</table><br /><br />
<table style=\"float:left; margin-right: 15px\">
<TR>
<TD VALIGN=\"TOP\" WIDTH=\"626\" style=\"padding-top: 4px; padding-right:3px\" height=\"90\"><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000;\"><strong>Idee:</strong> ".$idee."</TD>
</TR>
</TABLE>";
$sqlcheck = "SELECT id FROM $tabelcode WHERE account = '$account[login]'";
$rescheck = mysql_query($sqlcheck);
if (mysql_num_rows($rescheck) >= 1)
{
$sqlaantal = "SELECT * FROM $tabelcode";
$resaantal = mysql_query($sqlaantal);
$aantal = mysql_num_rows($resaantal);
$gemidsql = "SELECT avg(stem) AS gemiddelde FROM $tabelcode";
$gemidres = mysql_query($gemidsql);
$stem = mysql_fetch_assoc($gemidres);
$sqleigenstem = "SELECT stem AS eigenstem FROM $tabelcode WHERE account = '$account[login]'";
$reseigenstem = mysql_query($sqleigenstem);
$eigenstem = mysql_fetch_assoc($reseigenstem);
echo "<p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: #000000\">Score:<p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 30px; color: #000000\"> ".$stem['gemiddelde']." <p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; margin-top: 7px\">Jouw stem: <b>".$eigenstem['eigenstem']."</b><Br /> Aantal stemmen: <b/>$aantal<b>";
}
else
{
echo"
<form style=\"float:right;margin-right: 35px;\" action=\"$_SELF\" method=\"post\">
<input type=\"text\" name=\"stem\" value=\"\" style=\"width:40px; padding-top:2px; padding-bottom: 2px; margin-bottom: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 20px;\" maxlenght:\"3\"><br />
<input type=\"submit\" style=\"padding:3px; margin-top: 5px; margin-bottom: 5px\" name=\"submit1\" value=\"Stem!\">
</form>";
}
if ($_POST[submit1] && $_POST[stem] && $_POST[stem] > 0 && $_POST[stem] < 101)
{
$sql = "INSERT INTO $tabelcode (id, account, stem) VALUES ('', '$account[login]', '$_POST[stem]')";
$res = mysql_query($sql);
header("Location: openideeen.php");
}
elseif ($_POST[submit1] && (!$_POST[stem] || $_POST[stem] < 1 || $_POST[stem] > 100))
{
echo"<br /><br /><Br /><p style=\"font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: red\">Foutief gestemd!";
}
}
}
?>
Hoe zorg ik ervoor dat de stem niet in dezeflde loop terecht komt? Ook als ik een verkeerde waarde invoer zoals 200, dan zegt hij bij alle ideeën waar nog niet op gestemt was 'Foutief gestemd!'. Hopelijk heeft iemand een oplossing.
Ik weet dat er nog gaten inzitten en er nog zat verbeterpunten zijn in deze code, maar hier
ligt niet de oorzaak van mijn probleem. Waar wel?
Alvast heel erg bedankt. Ziet hier nu al enkele avonden mee.
MvG
Sander
1. zorgen voor een juiste logica
2. de juiste controles en validaties
3. oplossen van undefined indexes
4. bescherming tegen sql injectie
5. wegwerken van alle onnodige escapes
6. mysql foutafhandeling
dan los je je probleem als het goed is vanzelf op.
had ook kunnen schrijven: gooi dit maar in de prullenbak en begin opnieuw en dan de bovenstaande punten opdreunen
er valt overigens nog wel meer op te merken o.a. de vele manieren van fetchen, kies voor 1 fetch methode: _fetch_assoc
oh en ik had ook nog ergens een update statement verwacht maar blijbaar vind je het handiger om achteraf alle stemmen te sommeren
Gewijzigd op 27/03/2011 21:18:41 door Noppes Homeland