Tabel header sorteerbaar maken werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohamed nvt

Mohamed nvt

11/11/2016 21:03:54
Quote Anchor link
Hallo allemaal,

Momenteel ben ik het boek "Via het boek "PHP and MySQL for Dynamic Web Sites Visual QuickPro Guide 4th Edition" aan het volgen.
Ik ben nu bij de hoofdstuk 10 en ik probeer de header van een tabel sorteerbaar te maken. D.w.z. dat elke tabel header klikbaar wordt en wanneer je klikt op een header dan kun je kolom sorteren.
En voorheen werkt de select query wel, maar nu helaas niet meer.
Ik heb veel geprobeerd, maar kom helaas niet uit, want alle code komt uit het boek met kleine aanpassingen van mezelf.

De foutmeldin is als volgt:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /mnt/weba/e1/99/51995699/htdocs/dev/test2/view_users.php on line 77
URL: http://dev.pc-on-rails.nl/test2/view_users.php
Op zich is de foutcode wel logisch, maar het lukt me niet om het te verhelpen.
Zie hieronder graag de broncode:

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
<?php
$sort
= (isset($_GET['sort'])) ?  
$_GET['sort'] : 'rd';
//Determine the sorting order:
switch ($sort) {
case
'fn':
    $order_by = 'firstname ASC';
    break;
case
'ln':
    $order_by = 'lastname ASC';
    break;
case
'em':
    $order_by = 'email ASC';
    break;
case
'pn':
    $order_by = 'pharmacyname ASC';
    break;
case
'tl':
    $order_by = 'telephone ASC';
    break;
case
'rd':
    $order_by = 'registration_date ASC';
    break;
default:

    $order_by = 'registration_date ASC';
    $sort = 'rd';
    break;
}

// Make the query:
$q = "SELECT firstname, lastname, email, pharmacyname, telephone, DATE_FORMAT(registrationdate, '%M %d, %Y') AS dr, user_id FROM users ORDER BY $order_by LIMIT $start, $display";
$r = @mysqli_query ($connection, $q); // Run the query.

//Count the number of returned row:

$num = mysqli_num_rows($r);

if ($num > 0) { // If it ran OK, display the records.

        //Print how many users there are:

        echo "<p>There are currently $num registered users</p>\n";

    // Table header.
    echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
                <tr>
                <td align="left"><b><a href="view_users.php?sort=fn">FirstName</a></b></td>
                <td align="left"><b><a href="view_users.php?sort=ln">LastName</a></b></td>
                <td align="left"><b><a href="view_users.php?sort=em">EmailAddress</a></b></td>
                <td align="left"><b><a href="view_users.php?sort=pn">PharmacyCompany</a></b></td>
                <td align="left"><b><a href="view_users.php?sort=tl">Telephonenumber</a></b></td>
                <td align="left"><b><a href="view_users.php?sort=dr">Registration Date</a></b></td>
                <td align="left"><b>Edit</b></td>
                <td align="left"><b>Delete</b></td>
                </tr>'
;
    
    // Fetch and print all the records:
    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
        echo '<tr>
        <td align="left">'
. $row['firstname'] .'</td>
        <td align="left">'
. $row['lastname'] .'</td>
        <td align="left">'
. $row['email'] .'</td>
        <td align="left">'
. $row['pharmacyname'] .'</td>
        <td align="left">'
. $row['telephone'] .'</td>
        <td align="left">'
. $row['dr'] .'</td>
        <td align="left"><a href="edit_user.php?id='
. $row['user_id'] .'">Edit</a></td>
        <td align="left"><a href="delete_user.php?id='
. $row['user_id'] .'">Delete</a></td>
        </tr>'
;
    }


    echo '</table>'; // Close the table.
    
    mysqli_free_result ($r); // Free up the resources.    

} else { // If  no records were returnd.
    echo '<p class="error">There are currently no registered users</p>';
    
}
// End of if ($r) IF.

mysqli_close($connection); // Close the database connection.
// Make the links to other pages, if necessary.

if ($pages > 1) {
    
    // Add some spacing and start a paragraph:
    echo '<br /><p>';
    
    // Determine what page the script is on:    
    $current_page = ($start/$display) + 1;
    
    // If it's not the first page, make a Previous link:
    if ($current_page != 1) {
        echo '<a href="view_users.
        php?s='
. ($start - $display) .
        '&p=' . $pages . '&sort=' .
        $sort. '">Previous</a> ';
    }

    
    // Make all the numbered pages:
    for ($i = 1; $i <= $pages; $i++) {
        if ($i != $current_page) {
            echo '<a href="view_users.
            php?s='
. (($display * ($i -
            1))) . '&p=' . $pages .
            '&sort=' . $sort.'">' . $i . '</a> ';
        }
else {
            echo $i . ' ';
        }
    }
// End of FOR loop.
    
    // If it's not the last page, make a Next button:

    if ($current_page != $pages) {
        echo '<a href="view_users.
        php?s='
. ($start + $display) .
        '&p=' . $pages .
        '&sort=' . $sort.'">Next</a>';
    }

    
    echo '</p>'; // Close the paragraph.
    
} // End of links section.
include ('includes/footer.php');
?>



Alvast bedankt voor jullie feedback!
Gewijzigd op 11/11/2016 22:13:20 door - Ariën -
 
PHP hulp

PHP hulp

19/01/2021 09:42:18
 
- Ariën -
Beheerder

- Ariën -

11/11/2016 22:13:02
Quote Anchor link
Een goede tip, onderdruk geen fourmeldingen met @.
 
Mohamed nvt

Mohamed nvt

11/11/2016 22:22:43
Quote Anchor link
Hallo Arien,

Het probleem heb ik nu opgelost.
Boven de SQL query had ik daar staan de verkeerde kolomsnaam. Na het aanpassen van kolomsnaam wordt nu wel alles weergeven. De tabel headers zijn nu ook klikbaar en het is mogelijk om het te sorteren. Echter, ik merk nu dat enkel ASC werkt en niet DESC. Dus wanneer de lijst als ASC wordt weergegeven kan ik niet terug naar DESC...

Iemand een idee?
 
Ben van Velzen

Ben van Velzen

12/11/2016 00:27:03
Quote Anchor link
Je hebt helemaal geen DESC sortering in deze pagina ingebouwd, dus logischerwijs wordt er altijd ASC gesorteerd.
 
Mohamed nvt

Mohamed nvt

12/11/2016 11:56:28
Quote Anchor link
Hallo Ben,

Je hebt helemaal gelijk.
Na het analyseren van de code kwam ik tot dezelfde conclusie.
Ik ga eens kijken hoe ik DESC sorting ook erin kan krijgen. En eigenlijk lijkt het praktijk het een filter functie ook heeft. D.w.z. een functie zoals dat mogelijk is in Excel. Je kiest dus zelf resultaten worden weergegeven op basis van een gekozen onderdeel.
 
Jan R

Jan R

13/11/2016 07:21:25
Quote Anchor link
Ik begrijp dat je een boek volgt en dit wilt in sql. Echter vie clientside gaat het ook. Zoek eens op sorttable.js. Gewoon een script laden en een tag meegeven aan je header.

Jan
 
Mohamed nvt

Mohamed nvt

13/11/2016 08:52:36
Quote Anchor link
Hallo Jan R,

Bedankt voor je suggestie.
Dit is natuurlijk ook een optie, maar is het handiger om het via SQL te doen, aangezien deze nu reeds geïntegreerd is sql query en verder in de tabel?
 
Ben van Velzen

Ben van Velzen

13/11/2016 14:22:11
Quote Anchor link
Het is voor grote hoeveelheden data altijd handiger om het in SQL te doen, al is het alleen maar omdat je er bakken bandbreedte mee bespaart. Ik zou nooit javascript sortering adviseren in je data tenzij je een bijzondere reden hebt om het te gebruiken.
 



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.