Hulp bij PM systeem?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eveline G

Eveline G

08/11/2012 10:44:34
Quote Anchor link
Hoi Allemaal!

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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&#233;-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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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&#233;-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!
 
PHP hulp

PHP hulp

16/11/2024 04:28:30
 
Wouter J

Wouter J

08/11/2012 10:50:47
Quote Anchor link
Er schorren nog wat dingen aan je technieken/code, wat tips:
- 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
 
Eveline G

Eveline G

08/11/2012 11:23:23
Quote Anchor link
Bedankt voor de tips. Een aantal dingen wist ik al wel (bijvoorbeeld de SQL injection), ik wilde hem alleen graag eerst werkend krijgen...
 
- Ariën  -
Beheerder

- Ariën -

08/11/2012 11:44:47
Quote Anchor link
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.
 
Eveline G

Eveline G

08/11/2012 11:47:40
Quote Anchor link
Oke, thanks! Ga het meteen aanpassen en idd in het vervolg toepassen! (:

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..
 
Q S

Q S

08/11/2012 11:57:37
Quote Anchor link
Blijkbaar is $ontvanger niet gelijk aan $gebruiker.
Wat je zou kunnen doen is voor regel 23
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if($ontvanger == $gebruiker){ ?>


Een echo doen van beiden om te kijken of ze hetzelfde zijn, wellicht heeft 1 van de twee een spatie of iets dergelijks

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '['.$gebruiker.']['.$ontvanger.']';
?>
 
Eveline G

Eveline G

08/11/2012 13:29:50
Quote Anchor link
Inderdaad, $ontvanger is zelfs helemaal leeg. Nu nog uitvinden waarom...
 
Reshad F

Reshad F

08/11/2012 13:38:22
Quote Anchor link
Probeer is van regel 16 tot 22 te veranderen in dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
        }

?>
Gewijzigd op 08/11/2012 13:39:06 door Reshad F
 
Eveline G

Eveline G

08/11/2012 13:45:29
Quote Anchor link
Bedankt voor je reactie, maar ook dat is het niet. De ontvanger in ieder geval is gewoon leeg, dus ik ben bang dat er iets niet goed doorgegeven wordt, kan het alleen niet achterhalen...

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
 
Q S

Q S

08/11/2012 13:56:43
Quote Anchor link
regel 13
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $msg_id = $_POST['msg_id']; ?>

Moet zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $msg_id = $_GET['msg_id']; ?>

Kijk maar op regel 45 van inbox
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Eveline G

Eveline G

08/11/2012 14:07:38
Quote Anchor link
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.
 
Q S

Q S

08/11/2012 14:13:27
Quote Anchor link
Niet helehemaal goed gekeken
verander ook op regel 45 van inbox de regel in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Eveline G

Eveline G

08/11/2012 14:19:05
Quote Anchor link
Hij doet het, superbedankt!!!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.