probleem: gastenboek met paginas

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco Eilander

Marco Eilander

03/05/2014 15:20:02
Quote Anchor link
Op één of ander manier, maakt die de form met textarea alleen zichtbaar, als de gebruiker een bericht heeft op zijn/haar "wall"

Code:
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
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
<?php


    /**
     * ============
     * - Script: Guestbook
     * - Author: Void
     * - Date: 06 Aug 2008
     * ============
    **/


    // debug mode (aanzetten indien nodig)
    //error_reporting(E_ALL);
    //ini_set("display_errors", true);


    /**
     * Config Vars:
     * ============
     * - MySQL gegevens zelf even invullen
     * - Paginatuur configuratie naar eigen smaak invullen
     * ============
    **/

    $mysql['user'] = '';        // vul hier de mysql gebruikersnaam in om te connecten met je database
    $mysql['pass'] = '';        // vul hier het mysql wachtwoord in om te connecten met je database
    $mysql['database'] = '';    // vul hier de database naam in die je wil gebruiken
    $postsPerPage = 5;            // het aantal berichten dat je per pagina wil laten zien
    $numPageNumbers = 7;        // het aantal pagina nummers dat word laten zien

    
    
    
    
    
    
    
    // connecten met mysql

    @mysql_connect("localhost", $mysql['user'], $mysql['pass']) or die(mysql_error());
    @
mysql_select_db($mysql['database']) or die(mysql_error());


    // mysql var unsetten voor de veiligheid
    unset($mysql);

    
    // berichten in de database tellen
    $sql = "SELECT COUNT(*) AS num FROM wall WHERE player_name = '".$_GET['user']."'";
    $res = @mysql_query($sql) or die(mysql_error());
    $totalRecords = @mysql_result($res, 0, 'num') or die(mysql_error());


    // het aantal pagina nummers uitrekenen    
    $totalPages = ceil($totalRecords / $postsPerPage);

    
    // kijken of de
    $currentPage = isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $totalPages ? $_GET['page'] : 1;
    
    
    // pagina nummers berekenen
    if($totalPages > $numPageNumbers)
    {

        $pageNumberStart = $currentPage - floor($numPageNumbers / 2);
        $pageNumberEnd = $currentPage + floor($numPageNumbers / 2);
        
        while($pageNumberStart < 1) { $pageNumberStart++; $pageNumberEnd++; }
        while($pageNumberEnd > $totalPages) { $pageNumberStart--; $pageNumberEnd--; }
    }

    else
    {
        $pageNumberStart = 1;
        $pageNumberEnd = $totalPages;
    }

    
    
    
    // offset voor in de sql query
    $offset = ($currentPage - 1) * $postsPerPage;

    
    // berichten uit de databse selecteren die bij het huidige pagina nummer horen (deze query moet je nog even goed zetten tot alles wat je nodig hebt)
    $sql = "SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT ".$offset.", ".$postsPerPage;
    $res = @mysql_query($sql) or die(mysql_error());


    // hier gaan we de berichten in stoppen
    $data = array();    

    
    // kijken of we wel berichten in het gastenboek hebben
    if(@mysql_num_rows($res))
    {

        // data uit de database trekken
        while($row = @mysql_fetch_array($res))
        {

            $data[] = $row;
        }
    }





?>


<style>
.userpost{
border:2px solid gold;
background-color:maroon;
padding:5px;
margin-bottom:5px;
}
/* paginatuur */
.pagination {
    margin:40px 0px;
    padding:0px;
    list-style:none;
}
.pagination li {
    display:inline;
    padding:0px 3px;
}
</style>
<?php

    // kijken of we wel berichten in het gastenboek hebben
    if($data)
    {

    
        // berichten uitspugen
        foreach($data as $row)
        {

            echo '<div class="userpost">
            <div class="playerinf" style="float:left;margin-right:5px;width:60px;height:60px;border:1px solid silver;background-image:url('
.$row['avatar'].');"></div>
                    
                    <div style="width:100%;margin-right:5px;">
                   '
.ucfirst(strtolower($row['poster'])).' - '.$row['datum'].'
                        <div style="margin-left:65px !important;background-color:#330000;border:1px solid black;padding:5px;color:silver;">
                            '
.nl2br(htmlentities($row['bericht'])).'
                        </div>    
                    </div>
                    <div style="clear:both;"></div>
                  </div>'
;
        }

        

        // paginatuur
        echo '<ul class="pagination">';
        if($pageNumberStart > 1)
            echo '<li><a href="'.$_SERVER['PHP_SELF'].'?page=1" title="pagina 1">...</a></li>';

        for($i=$pageNumberStart; $i<=$pageNumberEnd; $i++)
            echo $i == $currentPage ? '<li><strong>'.$i.'</strong></li>' : '<li><a href="'.$_SERVER['PHP_SELF'].'?user='.$_GET['user'].'&page='.$i.'" title="pagina '.$i.'">'.$i.'</a></li>';

        if($pageNumberEnd < $totalPages)
            echo '<li><a href="'.$_SERVER['PHP_SELF'].'?user='.$_GET['user'].'&page='.$totalPages.'" title="pagina '.$totalPages.'">...</a></li>';
        echo '</ul>';
    }

    else
    {    
        echo 'Er zijn nog geen berichten in het gastenboek';
    }

    
?>



</table>
</div>
<div style="clear:both;"></div>
<div class="profilebar" style="border-radius:5px;">
<p>Post a message</p>
</div>
<div style="clear:both;"></div>
<?php
    if(isset($_POST['berichtplaatsen'])){
    echo "test";
        if(!empty($_POST['bericht'])){
            $datum = date('H:i:s d-m-Y');
            mysql_query("INSERT INTO wall(player_name,poster,datum,bericht,avatar) VALUES('".$_GET['user']."','".$_SESSION['SESS_LOGIN_NAME']."','".$datum."','".$_POST['bericht']."','". $info['avatar']."')");
    $sql = "SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT ".$offset.", ".$postsPerPage;    
    $row = mysql_fetch_row($sql);        
            
        }
    
    
    
    }

    
?>

<form action="http://marcoeilander.nl/unonu/rsrpg/profile.php?user=<?php echo $checkplayerprofile['player_name']; ?>" method="POST"">
<textarea name="bericht" style="width:98%;height:100px;border-radius:5px; background-color:#000033;color:silver;padding:5px;"></textarea>
<input type="submit" value="POST" name="berichtplaatsen"/>
</form>


Ik ben aardig wat tutorials/snippets tegen gekomen, waar ik de fouten gelijk in kon zien, maar hier is het echt abracadabra voor mij. Het heeft iets met dit te maken :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
    // berichten uit de databse selecteren die bij het huidige pagina nummer horen (deze query moet je nog even goed zetten tot alles wat je nodig hebt)
    $sql = "SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT ".$offset.", ".$postsPerPage;
    $res = @mysql_query($sql) or die(mysql_error());


Als ik daar overal // voor zet, is de stukje met de form wel zichtbaar..

Ik hoop dat iemand kan helpen.
 
PHP hulp

PHP hulp

29/03/2024 00:03:17
 
- SanThe -

- SanThe -

03/05/2014 18:30:59
Quote Anchor link
method="POST"" met 3 keer dubbele quote?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/05/2014 21:12:01
Quote Anchor link
echo die query eens?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo "SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT ".$offset.", ".$postsPerPage;
?>
 
Marco Eilander

Marco Eilander

03/05/2014 21:47:47
Quote Anchor link
Frank Nietbelangrijk op 03/05/2014 21:12:01:
echo die query eens?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo "SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT ".$offset.", ".$postsPerPage;
?>


Dit is de uitkomst :

SELECT * FROM `wall` ORDER BY `bericht_id` DESC LIMIT 0, 5

Ik zag ook dat de melding niet word weergegeven, als je nog geen berichten hebt.
Dus er is meer mis met het script.

@- SanThe -,
Bedankt voor de opmerking, ik heb het aangepast. :-)
Gewijzigd op 03/05/2014 21:52:21 door Marco Eilander
 
Obelix Idefix

Obelix Idefix

03/05/2014 21:53:05
Quote Anchor link
Waarom al die @ in je code? Die onderdrukken toch de eventuele foutmeldingen?!

Marco Eilander op 03/05/2014 15:20:02:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $sql
= "SELECT COUNT(*) AS num FROM wall WHERE player_name = '".$_GET['user']."'";
?>

Is die count(*) handig/verstandig/goed ??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_SERVER['PHP_SELF']
wordt in ieder geval afgeraden; is onveilig.
Gewijzigd op 03/05/2014 21:56:26 door Obelix Idefix
 
Marco Eilander

Marco Eilander

03/05/2014 22:22:41
Quote Anchor link
Betreft de '@', ik heb het wel eens voorbij zien komen op phphulp. Ik zal ze weghalen.

Even voor de duidelijkheid (mocht het niet helemaal duidelijk zijn), ik heb het script letterlijk gekopieerd van een snippet/tutorial pagina. Ik heb zelf vrij weinig gedaan aan het script.

Als ik "COUNT(*) AS num" verander naar *, dan worden de results niet weergegeven.
 
Obelix Idefix

Obelix Idefix

03/05/2014 22:30:27
Quote Anchor link
Heb je enig idee wat je aan het doen bent / wat de code zou moeten doen?
Weet je wat het doel is van @?
Wat zou
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
COUNT(*) AS num
moeten doen, denk je?
 
Marco Eilander

Marco Eilander

03/05/2014 22:48:09
Quote Anchor link
Betreft de "@", dat deed dacht ik iets met error_reporting().

Count( zou als het goed is alles bij elkaar op moeten tellen, wat die verder doet weet ik niet, ik ben niet zo bekent met count().
 
- SanThe -

- SanThe -

03/05/2014 22:53:29
Quote Anchor link
COUNT() is niet optellen, maar tellen.
SUM() is optellen.
 
Marco Eilander

Marco Eilander

03/05/2014 23:07:54
Quote Anchor link
- SanThe - op 03/05/2014 22:53:29:
COUNT() is niet optellen, maar tellen.
SUM() is optellen.


Oke;)

@iedereen,
Ik heb bepaalde dingen aangepast, maar alsnog blijft het stukje onder de bovenstaande script onzichtbaar voor mensen die geen berichten hebben.
Gewijzigd op 03/05/2014 23:10:07 door Marco Eilander
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/05/2014 00:06:20
Quote Anchor link
Ik wil best eens voor je kijken maar heb je misschien even een SQL dump?
 
Marco Eilander

Marco Eilander

04/05/2014 00:35:27
Quote Anchor link
Frank Nietbelangrijk op 04/05/2014 00:06:20:
Ik wil best eens voor je kijken maar heb je misschien even een SQL dump?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
hier stond de SQL dump


De datum is niet alleen niet correct (varchar(100)), maar alles op mijn website is momenteel alpha. (alleen te spelen door mij en de uitgenodigden)
Gewijzigd op 04/05/2014 13:34:10 door Marco Eilander
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/05/2014 01:19:55
Quote Anchor link
Regel 50:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$totalRecords
= @mysql_result($res, 0, 'num') or die(mysql_error());
?>


het woordje or is hetzelfde als dat je schrijft || en betekend gewoon OF.

Het is te vergelijken met een if statement:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(mysql_result($res, 0, 'num') || die(mysql_error()))
{

    // doe iets
}
?>


het statement bestaat uit twee delen:
deel 1: mysql_result($res, 0, 'num')
deel 2: die(mysql_error())

een OR vergelijking levert TRUE op indien één van de twee delen TRUE is of als beiden delen TRUE zijn.

als deel 1 een TRUE oplevert dan stopt de vergelijking want de computer hoeft maar één TRUE te hebben om de in de IF te mogen springen dus er is geen reden om nog naar deel twee te gaan.

echter wanneer er 0 records gevonden zijn dan zal mysql_result($res, 0, 'num') een 0 terug geven en wordt deel 2 van de vergelijking WEL uitgevoerd. (FALSE heeft waarde 0 en TRUE heeft waarde 1 (maar ook hoger dan 1 wordt door de computer naar TRUE vertaald)). En wat is deel twee van de vergelijking?

die(mysql_error())!

door de functie die() wordt het script stopgezet maar voordat dit gebeurd vragen we nog even de mysql foutmelding te tonen. Er is echter geen foutmelding (want het feit dat er geen records gevonden zijn is nog geen fout) dus komt er ook geen tekst :-)

Met andere woorden:
Jij laat op deze regel het script dus stoppen als er geen berichten zijn gevonden voor de opgegeven player.
Gewijzigd op 04/05/2014 01:34:03 door Frank Nietbelangrijk
 
Marco Eilander

Marco Eilander

04/05/2014 10:09:08
Quote Anchor link
Bedankt voor de uitleg. :)
Het werkt, en alles onder de php script werkt. Inc. de melding als er geen berichten zijn.
 



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.