Hulp bij PM systeem?
Op het moment ben ik bezig geweest met een PM systeem. Alleen hij voert nu telkens het else statement uit, en ik snap niet zo goed waarom. Ik zal vast ergens een foutje maken waar ik overheen kijk, maar ik kom er echt eventjes niet uit. Ik hoop dat er iemand hier mij kan helpen!
Dit is mijn inbox. Ik geef maar even allebei de codes aan, want het zou me niks verbazen als het iets hiermee te maken heeft.
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
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
<?php
session_start();
$gebruiker = $_SESSION['gebruikersnaam'];
include ('connect_database.php');
if(!isset($gebruiker)){
include('header.php');
echo "U bent nog niet ingelogd. Je moet ingelogd zijn om deze pagina te kunnen bekijken. Klik <a href='login.php'>hier</a> om in te loggen.";
include('footer.php');
}
else {
$query = mysql_query("SELECT pm_count FROM lid WHERE gebruikersnaam = '$gebruiker'");
$rij = mysql_fetch_array($query);
$pm_count = $rij['pm_count'];
$procent = $pm_count/'50';
$procent = $pm_count * '100';
include('header.php');
echo "<br /><center><p><a href='inboxpm.php'>Inbox</a> | <a href='verstuurpm.php'>Verstuur privé-bericht</a> | <a href='uitgaandpm.php'>Verzonden</a></p><br />";
echo $pm_count." van 50 | ". $procent ."% vol";
echo "</p></center><br />";
$query1 = "SELECT id, ontvanger, verzender, onderwerp, bericht FROM privebericht WHERE ontvanger='$gebruiker'";
$sqlinbox = mysql_query($query1);
if(!$sqlinbox){
print '$query: '.$query1.mysql_error();
}
elseif(!mysql_num_rows($sqlinbox)){
echo "Je inbox is leeg.";
include('footer.php');
}
else{
echo "<center>
<form name='send' method='post' action='delete.php'>
<table>
<tr><td><strong>Onderwerp</strong></td><td><strong>Van</strong></td><td><strong>Selecteer</strong></td></tr>";
while($inbox = mysql_fetch_array($sqlinbox)){
$pm_id = $inbox['id'];
$verzender = $inbox['verzender'];
$onderwerp = $inbox['onderwerp'];
echo "<tr><td><a href='viewmsg.php?msg_id". $pm_id ."'>". $onderwerp ."</a></td>
<td>". $verzender ."</td>
<td><input name='pms[]' type='checkbox' value='".$pm_id."'></td></tr>";
}
echo "<tr><td colspan='2'><input type='submit' name='submit' value='Verwijder geselecteerde(n)'></td><td></td><td></td></tr></table></center>";
}
}
?>
session_start();
$gebruiker = $_SESSION['gebruikersnaam'];
include ('connect_database.php');
if(!isset($gebruiker)){
include('header.php');
echo "U bent nog niet ingelogd. Je moet ingelogd zijn om deze pagina te kunnen bekijken. Klik <a href='login.php'>hier</a> om in te loggen.";
include('footer.php');
}
else {
$query = mysql_query("SELECT pm_count FROM lid WHERE gebruikersnaam = '$gebruiker'");
$rij = mysql_fetch_array($query);
$pm_count = $rij['pm_count'];
$procent = $pm_count/'50';
$procent = $pm_count * '100';
include('header.php');
echo "<br /><center><p><a href='inboxpm.php'>Inbox</a> | <a href='verstuurpm.php'>Verstuur privé-bericht</a> | <a href='uitgaandpm.php'>Verzonden</a></p><br />";
echo $pm_count." van 50 | ". $procent ."% vol";
echo "</p></center><br />";
$query1 = "SELECT id, ontvanger, verzender, onderwerp, bericht FROM privebericht WHERE ontvanger='$gebruiker'";
$sqlinbox = mysql_query($query1);
if(!$sqlinbox){
print '$query: '.$query1.mysql_error();
}
elseif(!mysql_num_rows($sqlinbox)){
echo "Je inbox is leeg.";
include('footer.php');
}
else{
echo "<center>
<form name='send' method='post' action='delete.php'>
<table>
<tr><td><strong>Onderwerp</strong></td><td><strong>Van</strong></td><td><strong>Selecteer</strong></td></tr>";
while($inbox = mysql_fetch_array($sqlinbox)){
$pm_id = $inbox['id'];
$verzender = $inbox['verzender'];
$onderwerp = $inbox['onderwerp'];
echo "<tr><td><a href='viewmsg.php?msg_id". $pm_id ."'>". $onderwerp ."</a></td>
<td>". $verzender ."</td>
<td><input name='pms[]' type='checkbox' value='".$pm_id."'></td></tr>";
}
echo "<tr><td colspan='2'><input type='submit' name='submit' value='Verwijder geselecteerde(n)'></td><td></td><td></td></tr></table></center>";
}
}
?>
En dit is de pagina waar je het bericht zou moeten kunnen lezen:
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
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
<?php
session_start();
$gebruiker = $_SESSION['gebruikersnaam'];
include('connect_database.php');
if(!isset($gebruiker)){
include('header.php');
echo "U bent nog niet ingelogd. Je moet ingelogd zijn om deze pagina te kunnen bekijken. Klik <a href='login.php'>hier</a> om in te loggen.";
include('footer.php');
}
else {
$msg_id = $_POST['msg_id'];
$view_msg = mysql_query("SELECT * FROM privebericht WHERE id='$msg_id'");
$msg = mysql_fetch_array($view_msg);
$ontvanger = $msg['ontvanger'];
$verzender = $msg['verzender'];
$onderwerp = $msg['onderwerp'];
$bericht = $msg['bericht'];
if($ontvanger == $gebruiker){
mysql_query("UPDATE privebericht SET ontvangen='1' WHERE id='$msg_id'");
$query = mysql_query("SELECT pm_count FROM lid WHERE gebruikersnaam='$gebruiker'");
$rij = mysql_fetch_array($query);
$pm_count = $rij['pm_count'];
$procent = $pm_count/'50';
$procent = $procent * '100';
echo "<br /><center><p><strong><a href='inboxpm.php'>Inbox</a> | <a href='verstuurpm.php'>Verstuur privé-bericht</a> | <a href='uitgaandpm.php'>Verzonden</a></strong>";
echo $pm_count." van 50 | ". $procent ."% vol";
echo "</p></center><br />";
echo "<table>
<tr><td><p>Van:</p></td><td><p>". $verzender ."</p></td></tr>
<tr><td><p>Onderwerp: </p></td><td><p>". $onderwerp ."</p></td></tr>
<tr><td><p>Bericht: </p></td><td><p>". $bericht ."</p></td></tr>
</table>";
}
else {
echo "Je bent niet bevoegd om dit te bekijken.";
}
}
?>
session_start();
$gebruiker = $_SESSION['gebruikersnaam'];
include('connect_database.php');
if(!isset($gebruiker)){
include('header.php');
echo "U bent nog niet ingelogd. Je moet ingelogd zijn om deze pagina te kunnen bekijken. Klik <a href='login.php'>hier</a> om in te loggen.";
include('footer.php');
}
else {
$msg_id = $_POST['msg_id'];
$view_msg = mysql_query("SELECT * FROM privebericht WHERE id='$msg_id'");
$msg = mysql_fetch_array($view_msg);
$ontvanger = $msg['ontvanger'];
$verzender = $msg['verzender'];
$onderwerp = $msg['onderwerp'];
$bericht = $msg['bericht'];
if($ontvanger == $gebruiker){
mysql_query("UPDATE privebericht SET ontvangen='1' WHERE id='$msg_id'");
$query = mysql_query("SELECT pm_count FROM lid WHERE gebruikersnaam='$gebruiker'");
$rij = mysql_fetch_array($query);
$pm_count = $rij['pm_count'];
$procent = $pm_count/'50';
$procent = $procent * '100';
echo "<br /><center><p><strong><a href='inboxpm.php'>Inbox</a> | <a href='verstuurpm.php'>Verstuur privé-bericht</a> | <a href='uitgaandpm.php'>Verzonden</a></strong>";
echo $pm_count." van 50 | ". $procent ."% vol";
echo "</p></center><br />";
echo "<table>
<tr><td><p>Van:</p></td><td><p>". $verzender ."</p></td></tr>
<tr><td><p>Onderwerp: </p></td><td><p>". $onderwerp ."</p></td></tr>
<tr><td><p>Bericht: </p></td><td><p>". $bericht ."</p></td></tr>
</table>";
}
else {
echo "Je bent niet bevoegd om dit te bekijken.";
}
}
?>
Als ik dus op het bericht klik, om hem te lezen, krijg ik telkens de melding "Je bent niet bevoegd om dit te bekijken."... Ik hoop dat iemand van jullie mij kan helpen! Het bericht wordt netjes verstuurd naar de database, dus dat is niet het probleem.
Alvast bedankt!
- de if op regel 7 heeft geen nut. $gebruiker heb je daarvoor gedefinieerd en zal dus altijd bestaan. Je moet eerst kijken of $_POST['gebruiker'] bestaat, als dat zo is dan kun je hem definiëren in $gebruiker. Ik raad echter aan niet aan deze zinloze 'variabele kopiëren' te doen, het kost je alleen maar geheugen
- Je mist heel wat vormen van foutafhandeling. Kijk eens hier hoe je goed moet foutafhandelen: http://wouterj.github.com/sql-boilerplate/
- Haal variabele altijd buiten quotes. Voor voorbeelden kun je terecht op operators.string.
- Gebruik fetch_assoc ipv fetch_array. Dat is sneller en de extra's van fetch_array heb je nu toch niet nodig
- Tussen quotes zet je altijd teksten, geen cijfers. Dus niet '100' maar gewoon 100
- Je query is lek voor SQL injection. Gebruik mysql_real_escape_string om alle variabele in queries om dit te voorkomen
- De center tag is erg ouderwets, los dit op met CSS
- Gebruik enkele quotes in PHP en dubbele in HTML, dat is de standaard
Bedankt voor de tips. Een aantal dingen wist ik al wel (bijvoorbeeld de SQL injection), ik wilde hem alleen graag eerst werkend krijgen...
Het beste is om direct en meteen in het vervolg mysql_injectie-beveiliging toe te voegen, in plaats van dat je het op een later moment doet. Anders heb je meer kans dat je dit op bepaalde plekken vergeet waarna je opeens gehackt bent, en misschien wel de gegevens van je gebruikers opeens op straat liggen.
Maar mijn vraag was eigenlijk waarom er telkens het else statement wordt uitgevoerd... En dus of iemand mij zou kunnen wijzen op de fout die daarover gaat..
Wat je zou kunnen doen is voor regel 23
Een echo doen van beiden om te kijken of ze hetzelfde zijn, wellicht heeft 1 van de twee een spatie of iets dergelijks
Inderdaad, $ontvanger is zelfs helemaal leeg. Nu nog uitvinden waarom...
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
while($msg = mysql_fetch_assoc($view_msg)) {
$ontvanger = $msg['ontvanger'];
$verzender = $msg['verzender'];
$onderwerp = $msg['onderwerp'];
$bericht = $msg['bericht'];
}
?>
while($msg = mysql_fetch_assoc($view_msg)) {
$ontvanger = $msg['ontvanger'];
$verzender = $msg['verzender'];
$onderwerp = $msg['onderwerp'];
$bericht = $msg['bericht'];
}
?>
Gewijzigd op 08/11/2012 13:39:06 door Reshad F
Edit: Ik ben al iets verder door de variabele $msg_id gewoon te veranderen in 1, in de query en dan geeft ie dus wel iets aan. Zou het kunnen komen dat ie hem niet pakt, doordat ik iets uit het formuliertje heb gepakt vanuit een link? En dat ie dus niet gesubmit is? Als jullie deze zin snappen... :P
Gewijzigd op 08/11/2012 13:50:23 door Eveline G
Moet zijn
Kijk maar op regel 45 van inbox
Code (php)
1
<?php echo "<tr><td><a href='viewmsg.php?msg_id". $pm_id ."'>". $onderwerp ."</a></td> ?>
Gewijzigd op 08/11/2012 13:57:20 door Q S
Ook dat werkt niet. Maar omdat je op een link klikt binnen een form en niet op submit zeg maar, denk ik eigenlijk dat ie niet doorgegeven wordt.
verander ook op regel 45 van inbox de regel in
Code (php)
1
<?php echo "<tr><td><a href='viewmsg.php?msg_id=". $pm_id ."'>". $onderwerp ."</a></td> ?>
Gewijzigd op 08/11/2012 14:13:47 door Q S
Hij doet het, superbedankt!!!!