Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323

    PDO - Paginazione con valore e senza valore GET

    Salve, come posso fare una cosa del genere? .. Vorrei che quando digito users.php senza il parametro mi visualizza tutti i record che ci sono nell'archivio dati e invece quando c'è users.php?ruolo=1 ..
    mi deve visualizzare tutti quelli che hanno il ruolo 1.

    vi posto il codice:

    cosa devo fare?



    codice:
    <?phpsession_start();
    include("inc.php"); 
    include("admin.php"); 
    include("layout/template.php");
    layout_header();
    ?>
    <?php
    	
    try {
    	$ruolo = (isset($_GET['ruolo'])) ? trim($_GET['ruolo']) : '';
    	
    	$total = $db->query('
            SELECT
                COUNT(*)
            FROM
                users')->fetchColumn();
    
    
        // How many items to list per page
        $limit = 1;
    
    
        // How many pages will there be
        $pages = ceil($total / $limit);
    
    
        // What page are we currently on?
        $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
            'options' => array(
                'default'   => 1,
                'min_range' => 1,	
            ),
        )));
    
    
        // Calculate the offset for the query
        $offset = ($page - 1)  * $limit;
    
    
        // Some information to display to the user
        $start = $offset + 1;
        $end = min(($offset + $limit), $total);
    
    
    
    
        // Prepare the paged query
        $stmt = $db->prepare('
            SELECT
                *
            FROM
                users
    	
            ORDER BY
                _update
            LIMIT
                :limit
            OFFSET
                :offset
        ');
    
    
        // Bind the query params
    
    
        $stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
        $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
        $stmt->execute();
    
    
        // Do we have any results?
        if ($stmt->rowCount() > 0) {
            // Define how we want to fetch the results
            $stmt->setFetchMode(PDO::FETCH_ASSOC);
            $iterator = new IteratorIterator($stmt);
    
    
            // Display the results
    		?>
    		<table class="table">
    <tbody>
    <tr>
    <th>Username</th>
    <th>Nome</th>
    <th>Cognome</th>
    <th>Email</th>
    <th>Modifica</th>
    <th>Svuota</th>
    <th>Cancella</th>
    </tr>
    		<?php
            foreach ($iterator as $row) {
    		?>
                <td><?php echo "".$row["username"]."";?></td>
    			<td><?php echo "".$row["name"]."";?></td>
    			<td><?php echo "".$row["firstname"]."";?></td>
    			<td><?php echo "".$row["email"]."";?></td>
    			<td><a href="users_edit.php?id=<?php echo "".$row["id"]."";?>">Profilo</a></td>
    			<td><a href="users_del.php?id=<?php echo "".$row["id"]."";?>">Svuota</a></td>
    			<td><a href="users_del_all.php?id=<?php echo "".$row["id"]."";?>">Cancella Tutto</a></td>
    		<?php
            }
    ?>
    </table>
    	<?php
    
    
        } else {
            echo '<p>No results could be displayed.</p>';
        }
    	echo '<div align="center">';
    	    // The "back" link
        $prevlink = ($page > 1) ? '<a href="?ruolo='.$ruolo.'&page=1" title="First page">&laquo;</a> <a href="?ruolo='.$ruolo.'&page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : '<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;</span>';
    
    
        // The "forward" link
        $nextlink = ($page < $pages) ? '<a href="?ruolo='.$ruolo.'&page=' . ($page + 1) . '" title="Next page">&rsaquo;</a> <a href="?ruolo='.$ruolo.'&page=' . $pages . '" title="Last page">&raquo;</a>' : '<span class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</span>';
    
    
        // Display the paging information
        echo '<div id="paging"><p>', $prevlink, ' Page ', $page, ' of ', $pages, ' pages, displaying ', $start, '-', $end, ' of ', $total, ' results ', $nextlink, ' </p></div>';
    	echo '</div>';
    } catch (Exception $e) {
        echo '<p>', $e->getMessage(), '</p>';
    }
    ?>
    
    
    <?php
    	layout_footer();
    ?>
    grazie mille, e volevo avvisare che non lo scritta io.. ma lo presa su internet "stackoverflow".

    aspetto risposte.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ciao dici con un'if empty?

    per ora ho scritto cosi e poi nel db ho il campo che si chiama level_access perché il db lo scritto tutto in inglese.
    ti posto il codice:

    il count
    codice:
    if(empty($ruolo))
    	{
    	
    	$total = $db->query('
            SELECT
                COUNT(*)
            FROM
                users')->fetchColumn();
    	}
    	else
    	{
    		
    	$total = $db->query("
            SELECT
                COUNT(*)
            FROM
                users WHERE level_access='".$ruolo."'")->fetchColumn();
    	
    	}
    il where:


    codice:
     if(empty($ruolo))	{
    	
    		$stmt = $db->prepare('
    			SELECT
    				*
    			FROM
    				users
    		
    			ORDER BY
    				date_reg
    			LIMIT
    				:limit
    			OFFSET
    				:offset
    		');
    
    
        // Bind the query params
    
    
        $stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
        $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
    	
    	}else
    	{
    		$stmt = $db->prepare('
    			SELECT
    				*
    			FROM
    				users
    			WHERE level_access=:level_access 
    			ORDER BY
    				date_reg
    			LIMIT
    				:limit
    			OFFSET
    				:offset
    		');
    
    
    		// Bind the query params
    		$stmt->bindParam(':level_access', $ruolo, PDO::PARAM_INT);
    		$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
    		$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
        
    	}
        $stmt->execute();
    Mi da errore quando digito :
    http://localhost/pdo/admin/users.php?ruolo=2

    ma essendo che non c'è nessun utente con ruolo 2 mi segnala:
    codice:
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 11
    come posso fare?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    e sbagliato qua:
    codice:
    else    {
            
        $total = $db->query('
            SELECT
                COUNT(*)
            FROM
                users WHERE level_access='.$ruolo.'')->fetchColumn();
        
        }
    ma se levo where .. la query funziona e mi visualizza che non ci sono record presenti ed quindi funziona...

    come risolvo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ecco :
    codice:
    string(63) "SELECT COUNT(*) FROM users WHERE level_access = 2"
    codice:
    $sql = 'SELECT
    				COUNT(*)
    			FROM
    				users WHERE level_access = '.$ruolo.'';
    		$total = $db->query($sql)->fetchColumn();
    				echo var_dump($sql);
    ho dovuto fare cosi.. perché non riuscivo a stampare la query prendendo total.

    ho fatto la modifica che mi hai fatto ma ho sempre l'errore.

    Mi protesti scrivermi la query con gli " invece con l'apice singolo?

    grazie mille e buona giornata.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    infatti che il count è giusta .. ma mi sa che è questa:
    codice:
    if(empty($ruolo))	{
    	
    		$stmt = $db->prepare('
    			SELECT
    				*
    			FROM
    				users
    		
    			ORDER BY
    				date_reg
    			LIMIT
    				:limit
    			OFFSET
    				:offset
    		');
    		
    		$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
    		$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
      	
    	}else
    	{
    		$stmt = $db->prepare('
    			SELECT
    				*
    			FROM
    				users
    			WHERE level_access=:level_access 
    			ORDER BY
    				date_reg
    			LIMIT
    				:limit
    			OFFSET
    				:offset
    		');
    		
    		$stmt->bindParam(':level_access', $ruolo, PDO::PARAM_INT);
    		$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
    		$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
      	
    	}
    
    
        $stmt->execute();
    che dici può essere questa perché se digito users.php?ruolo=1 = visualizza e stampa la query.
    se digito users.php?ruolo=2 , stampa query a modo e sotto da errore di sintassi mysql...

    quindi mi sa che è sbagliata la query sotto (quello che ti ho spostato ora).

    idea?

    grazie mille.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ok,, ho messo var_dump..
    e ho tolto la prima query del count perché se no non si capiva qual'era la query seconda:

    codice:
    object(PDOStatement)#2 (1) { ["queryString"]=> string(153) " SELECT * FROM users WHERE level_access=:level_access ORDER BY date_reg LIMIT :limit OFFSET :offset " }
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 11

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ha proposito come faccio ad stampare la query perché con la mysql_query era facile ma qua come faccio?
    perché non capisco nemmeno io che cosa stampa.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ok, problema trovato... è possibile che sia il controllo che dice :
    echo '<p>No results could be displayed.</p>';
    perché mo ho fatto un'altro utente con livello 2, e quando digito ruolo=2, me lo visualizza e non fa più l'errore.
    ed ora se metto ruolo=3, essendo non ci sono utenti con ruolo 3 , da l'errore prima.. quindi mi sa che è sbagliato in questo pezzo codice:
    codice:
        if ($stmt->rowCount() > 0) {        // Define how we want to fetch the results
            $stmt->setFetchMode(PDO::FETCH_ASSOC);
            $iterator = new IteratorIterator($stmt);
    
    
            // Display the results
    		?>
    		<table class="table">
    <tbody>
    <tr>
    <th>Username</th>
    <th>Nome</th>
    <th>Cognome</th>
    <th>Email</th>
    <th>Modifica</th>
    <th>Svuota</th>
    <th>Cancella</th>
    </tr>
    		<?php
            foreach ($iterator as $row) {
    		?>
                <td><?php echo "".$row["username"]."";?></td>
    			<td><?php echo "".$row["name"]."";?></td>
    			<td><?php echo "".$row["firstname"]."";?></td>
    			<td><?php echo "".$row["email"]."";?></td>
    			<td><a href="users_edit.php?id=<?php echo "".$row["id"]."";?>">Profilo</a></td>
    			<td><a href="users_del.php?id=<?php echo "".$row["id"]."";?>">Svuota</a></td>
    			<td><a href="users_del_all.php?id=<?php echo "".$row["id"]."";?>">Cancella Tutto</a></td>
    		<?php
            }
    ?>
    </table>
    	<?php
    
    
        } else {
            echo '<p>No results could be displayed.</p>';
        }
    mi aiuti ad risolvere il problema?

    perché il codice se ci sono dati funziona tranquillamente e quando non ci sono i dati da errore.

    idee?
    Ultima modifica di LedGiallo; 22-07-2014 a 16:13

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    Quote Originariamente inviata da F@bius Visualizza il messaggio
    L'errore sta nell'impostazione.
    Che in assenza di record mostri un messaggio non c'entra assolutamente nulla.
    allora è difficile farlo in pdo ??? solo aggiungendo un where ??

    come mai in pdo c'è bisogno di due query ?

    perché quando facevo in mysqli usavo una classe e facevo solo una query..

    come mai qui due?

    hai una classe po migliore?

    grazie mille.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ripropongo il mio codice.. ora il mio codice attuale e cosi:

    codice:
    <?php
    session_start();
    include("inc.php"); 
    include("admin.php"); 
    include("layout/template.php");
    layout_header();
    ?>
    <?php
        
    try {
        $ruolo = (isset($_GET['ruolo'])) ? trim($_GET['ruolo']) : '';
        
        if(empty($ruolo))
        {
            $total = $db->query('
                SELECT
                COUNT(*)
                FROM
                users')->fetchColumn();
        
        }else
        {
        $total = $db->query('
            SELECT
                COUNT(*)
            FROM
                users where level_access='.$ruolo.'')->fetchColumn();
    
    
        }
        
        // How many items to list per page
        $limit = 1;
    
    
        // How many pages will there be
        $pages = ceil($total / $limit);
    
    
        // What page are we currently on?
        $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
            'options' => array(
                'default'   => 1,
                'min_range' => 1,    
            ),
        )));
    
    
        // Calculate the offset for the query
        $offset = ($page - 1)  * $limit;
    
    
        // Some information to display to the user
        $start = $offset + 1;
        $end = min(($offset + $limit), $total);
    
    
        if(empty($ruolo))
        {
        // Prepare the paged query
        $stmt = $db->prepare('
            SELECT
                *
            FROM
                users
        
            ORDER BY
                _update
            LIMIT
                :limit
            OFFSET
                :offset
        ');
        }
        else
        
        {
        $stmt = $db->prepare('
            SELECT
                *
            FROM
                users
            where level_access=:level_access
            ORDER BY
                _update
                
            LIMIT
                :limit
            OFFSET
                :offset
        ');
        
        $stmt->bindParam(':level_access', $ruolo, PDO::PARAM_INT);
        
        }
        // Bind the query params
    
    
        $stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
        $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
        $stmt->execute();
    
    
        // Do we have any results?
        if ($stmt->rowCount() > 0) {
            // Define how we want to fetch the results
            $stmt->setFetchMode(PDO::FETCH_ASSOC);
            $iterator = new IteratorIterator($stmt);
    
    
            // Display the results
            ?>
            <table class="table">
    <tbody>
    <tr>
    <th>Username</th>
    <th>Nome</th>
    <th>Cognome</th>
    <th>Email</th>
    <th>Modifica</th>
    <th>Svuota</th>
    <th>Cancella</th>
    </tr>
            <?php
            foreach ($iterator as $row) {
            ?>
                <td><?php echo "".$row["username"]."";?></td>
                <td><?php echo "".$row["name"]."";?></td>
                <td><?php echo "".$row["firstname"]."";?></td>
                <td><?php echo "".$row["email"]."";?></td>
                <td><a href="users_edit.php?id=<?php echo "".$row["id"]."";?>">Profilo</a></td>
                <td><a href="users_del.php?id=<?php echo "".$row["id"]."";?>">Svuota</a></td>
                <td><a href="users_del_all.php?id=<?php echo "".$row["id"]."";?>">Del</a></td>
            <?php
            }
    ?>
    </table>
        <?php
    
    
        } else {
            echo '<p>No results could be displayed.</p>';
        }
        echo '<div align="center">';
            // The "back" link
        $prevlink = ($page > 1) ? '<a href="?ruolo='.$ruolo.'&page=1" title="First page">&laquo;</a> <a href="?ruolo='.$ruolo.'&page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : '<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;</span>';
    
    
        // The "forward" link
        $nextlink = ($page < $pages) ? '<a href="?ruolo='.$ruolo.'&page=' . ($page + 1) . '" title="Next page">&rsaquo;</a> <a href="?ruolo='.$ruolo.'&page=' . $pages . '" title="Last page">&raquo;</a>' : '<span class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</span>';
    
    
        // Display the paging information
        echo '<div id="paging"><p>', $prevlink, ' Page ', $page, ' of ', $pages, ' pages, displaying ', $start, '-', $end, ' of ', $total, ' results ', $nextlink, ' </p></div>';
        echo '</div>';
    } catch (Exception $e) {
        echo '<p>', $e->getMessage(), '</p>';
    }
    ?>
    
    
    <?php
        layout_footer();
    ?>
    idea?

    ora funziona se ci sono i dati , ma senza dati: da errore:

    codice:
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 12
    grazie..per l'aiuto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.