problemi query con valori -1 -2 -3 negativi

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

Salve, ho questa paginazione che funziona tranquillamente .. ma solamente se uno non va modificare l'url dell'indirizzo della pagina esempio:
index.php?p=1 <- questa va bene e funziona tranquillamente..

ma
index.php?p=-1 da errori syntax mysql limit.

la paginazione e questa :

Codice: Seleziona tutto

<?php
/*
 * PHP Pagination Class
 *
 * @author David Carr - dave@daveismyname.com - http://www.daveismyname.com
 * @version 1.0
 * @date October 20, 2012
 */
class Paginator{

        /**
	 * set the number of items per page.
	 *
	 * @var numeric
	*/
	private $_perPage;

	/**
	 * set get parameter for fetching the page number
	 *
	 * @var string
	*/
	private $_instance;

	/**
	 * sets the page number.
	 *
	 * @var numeric
	*/
	private $_page;

	/**
	 * set the limit for the data source
	 *
	 * @var string
	*/
	private $_limit;

	/**
	 * set the total number of records/items.
	 *
	 * @var numeric
	*/
	private $_totalRows = 0;



	/**
	 *  __construct
	 *  
	 *  pass values when class is istantiated 
	 *  
	 * @param numeric  $_perPage  sets the number of iteems per page
	 * @param numeric  $_instance sets the instance for the GET parameter
	 */
	public function __construct($perPage,$instance){
		$this->_instance = $instance;		
		$this->_perPage = $perPage;
		$this->set_instance();		
	}

	/**
	 * get_start
	 *
	 * creates the starting point for limiting the dataset
	 * @return numeric
	*/
	private function get_start(){
		return ($this->_page * $this->_perPage) - $this->_perPage;
	}

	/**
	 * set_instance
	 * 
	 * sets the instance parameter, if numeric value is 0 then set to 1
	 *
	 * @var numeric
	*/
	private function set_instance(){
		$this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]); 
		$this->_page = ($this->_page == 0 ? 1 : $this->_page);
	}

	/**
	 * set_total
	 *
	 * collect a numberic value and assigns it to the totalRows
	 *
	 * @var numeric
	*/
	public function set_total($_totalRows){
		$this->_totalRows = $_totalRows;
	}

	/**
	 * get_limit
	 *
	 * returns the limit for the data source, calling the get_start method and passing in the number of items perp page
	 * 
	 * @return string
	*/
	public function get_limit(){
        	return "LIMIT ".$this->get_start().",$this->_perPage";
        }

        /**
         * page_links
         *
         * create the html links for navigating through the dataset
         * 
         * @var sting $path optionally set the path for the link
         * @var sting $ext optionally pass in extra parameters to the GET
         * @return string returns the html menu
        */
	public function page_links($path='?',$ext=null)
	{
	    $adjacents = "2";
	    $prev = $this->_page - 1;
	    $next = $this->_page + 1;
	    $lastpage = ceil($this->_totalRows/$this->_perPage);
	    $lpm1 = $lastpage - 1;

	    $pagination = "";
		if($lastpage > 1)
		{   
		    $pagination .= "<div class='pagination'>";
		if ($this->_page > 1)
		    $pagination.= "<a href='".$path."$this->_instance=$prev"."$ext'>« previous</a>";
		else
		    $pagination.= "<span class='disabled'>« previous</span>";   

		if ($lastpage < 7 + ($adjacents * 2))
		{   
		for ($counter = 1; $counter <= $lastpage; $counter++)
		{
		if ($counter == $this->_page)
		    $pagination.= "<span class='current'>$counter</span>";
		else
		    $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";                   
		}
		}
		elseif($lastpage > 5 + ($adjacents * 2))
		{
		if($this->_page < 1 + ($adjacents * 2))       
		{
		for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
		{
		if ($counter == $this->_page)
		    $pagination.= "<span class='current'>$counter</span>";
		else
		    $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";                   
		}
		    $pagination.= "...";
		    $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>";
		    $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>";       
		}
		elseif($lastpage - ($adjacents * 2) > $this->_page && $this->_page > ($adjacents * 2))
		{
		    $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>";
		    $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>";
		    $pagination.= "...";
		for ($counter = $this->_page - $adjacents; $counter <= $this->_page + $adjacents; $counter++)
		{
		if ($counter == $this->_page)
		    $pagination.= "<span class='current'>$counter</span>";
		else
		    $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";                   
		}
		    $pagination.= "..";
		    $pagination.= "<a href='".$path."$this->_instance=$lpm1"."$ext'>$lpm1</a>";
		    $pagination.= "<a href='".$path."$this->_instance=$lastpage"."$ext'>$lastpage</a>";       
		}
		else
		{
		    $pagination.= "<a href='".$path."$this->_instance=1"."$ext'>1</a>";
		    $pagination.= "<a href='".$path."$this->_instance=2"."$ext'>2</a>";
		    $pagination.= "..";
		for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
		{
		if ($counter == $this->_page)
		    $pagination.= "<span class='current'>$counter</span>";
		else
		    $pagination.= "<a href='".$path."$this->_instance=$counter"."$ext'>$counter</a>";                   
		}
		}
		}

		if ($this->_page < $counter - 1)
		    $pagination.= "<a href='".$path."$this->_instance=$next"."$ext'>next »</a>";
		else
		    $pagination.= "<span class='disabled'>next »</span>";
		    $pagination.= "</div>\n";       
		}


	return $pagination;
	}
}
e il mio codice funzionante è questo:

Codice: Seleziona tutto

<?php
include('inc.php');
include('template/'.$theme.'/template.php');
$title = "News";
layout_header($title);
?>
<p class="titolo_news">News</p>
<?php
	$pages = new Paginator($news_per_pages_client,'p');
	 
	//get number of total records
	$stmt = $db->query('SELECT count(id) FROM news');
	$row = $stmt->fetch(PDO::FETCH_NUM);
	$total = $row[0];
	 
	//pass number of records to
		$pages->set_total($total); 
	 
	$data = $db->query('SELECT users.username, news_categories.name as _name , news.*, DATE_FORMAT(news._date,"%d/%m/%Y ore %H:%i") as "data_it" FROM users 
       INNER JOIN news 
          ON users.id = news.id_users INNER JOIN news_categories 
          ON news_categories.id = news.id_categories order by _date desc '.$pages->get_limit());

		$num = $data->rowCount();
		  
		if ($num>0)
		{		
			?>
	
			<?php
			foreach($data as $row) {
		?>
		<div id="post">
		<p class="classeH2"><?php echo $row["title"]; ?></p>
		<p class="meta">Postato da : <a href="user_view.php?id=<?php echo $row["id_users"]; ?>"><?php echo $row["username"]; ?></a><strong>&nbsp;&nbsp;Data:&nbsp;&nbsp;</strong><?php echo $row["data_it"]; ?><strong>&nbsp;&nbsp;Categoria:&nbsp;&nbsp;</strong><?php echo $row["_name"]; ?></p>
		<hr size="2">
		<br />
		<div class="entry">
		<?php echo $row["content"]; ?>
		</div>
		<br />
		<p><a href="news_view.php?id=<?php echo $row["id"]; ?>">Leggi Tutto</a></p>
		</div>	
			<?php
			}
			?>
			<br />
			<div align="center">
			<?php
			
			//create the page links
			echo $pages->page_links();
			?></div><?php
		}else
		{
			echo '404';
		}
?>
<?php
	layout_footer();
?>
come posso risolvere il problema ?

grazie mille.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

mi da questo:

Codice: Seleziona tutto

 Uncaught exception 'PDOException' with message '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 '-200,100' at line 4' 
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

vedete le prime righe di codice, vuol dire c'è un int messo male ma io non sono capace di modificare perché le classi non lo ancora studiate....

Codice: Seleziona tutto

   /**
    * get_start
    *
    * creates the starting point for limiting the dataset
    * @return numeric
   */
   private function get_start(){
      return ($this->_page * $this->_perPage) - $this->_perPage;
   }

   /**
    * set_instance
    * 
    * sets the instance parameter, if numeric value is 0 then set to 1
    *
    * @var numeric
   */
   private function set_instance(){
      $this->_page = (int) (!isset($_GET[$this->_instance]) ? 1 : $_GET[$this->_instance]); 
      $this->_page = ($this->_page == 0 ? 1 : $this->_page);
   }

   /**
    * set_total
    *
    * collect a numberic value and assigns it to the totalRows
    *
    * @var numeric
   */
   public function set_total($_totalRows){
      $this->_totalRows = $_totalRows;
   }

   /**
    * get_limit
    *
    * returns the limit for the data source, calling the get_start method and passing in the number of items perp page
    * 
    * @return string
   */
   public function get_limit(){
           return "LIMIT ".$this->get_start().",$this->_perPage";
        }
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Gli input dell'utente vanno controllati e filtrati SEMPRE.
Se non vuoi valori negativi quando ne trovi uno hai 2 possibilità, o forzi il valore al valore minimo o lanci un errore.
Non vedo perché andare a scomodare altre parti del codice, soprattutto se di "terze parti".
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

quindi come devo fare un controllo con una if ?

mi dici come fare?

grazie mille e scusa molto per il ritardo ma ero via..
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4605824#p4605824][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Gli input dell'utente vanno controllati e filtrati SEMPRE.
Se non vuoi valori negativi quando ne trovi uno hai 2 possibilità, o forzi il valore al valore minimo o lanci un errore.
Non vedo perché andare a scomodare altre parti del codice, soprattutto se di "terze parti".
mi dici come devo fare???

grazie mille .
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Non mi sembra difficile.
Fai un if prima di impostare il numero di pagine in Paginator.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

a che punto.. non riesco ad fare..

mi protesti fare un esempio tu.. per cortesia e ti ringrazio moltissimoooo.

grazie mille.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

guarda qui:
http://www.daveismyname.com/creating-a- ... ination-bp
mi protesti aiutarmi?
grazie mille.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

ho ridotto il codice..
vedi:

Codice: Seleziona tutto

$pages = new Paginator(1,'p');
	
	$stmt = $db->query('SELECT id FROM pages');

	$pages->set_total($stmt->rowCount());
	 
	$data = $db->query('SELECT * FROM pages order by _date desc '.$pages->get_limit());

	$num = $data->rowCount();
		  
		if ($num>0)
		{	
					?>
		<table class="table">
			<tbody>
			<tr>
			<th>Pagina</th>
			<th>Titolo</th>
			<th>Data</th>
			<th>Stato</th>
			<th>Modifica</th>
			<th>Cancella</th>
			</tr>
			<?php
			foreach($data as $row) {
			?>
			<tr>
			<td><?php echo "".$row["url"]."";?></td>
			<td><?php echo "".$row["title"]."";?></td>
			<td><?php echo "".$row["_date"]."";?></td>
			<td><?php echo "".$row["isPublic"]."";?></td>
			<td><a href="pages_edit.php?id=<?php echo "".$row["id"]."";?>">Modifica</a></td>
			<td><a href="pages_del.php?id=<?php echo "".$row["id"]."";?>">Cancella</a></td>			
			<?php
			}
			?>
			</table>
			<?php
			
			//create the page links
			echo $pages->page_links();
		}else
		{
			echo '404';
		}
ma me lo fa lo stesso anche se ho seguito il tutorial.. anche se sto facendo una cosa diversa...da quello che spiega il tutorial.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Non ho capito dove passi il valore negativo
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

lo digito io nella barra degli indirizzi del browser ad esempio:
http://www.nomesitoweb.it/pages.php?p=-10
e mi da quel expection limit

idea come risolvere?

perché avevo provato il controllo con un int(get),
ma dopo non mi funzionava più la paginazione.

come risolvere?

grazie mille.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Nel codice che hai postato non leggi mai quel valore
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

è questo:
$pages = new Paginator(1,'p');

e la classe genera la paginazione con la get di nome "p" ..e con echo pages-links crea i numeri e i valori $_get.
come faccio ad controllarla e facendo funzionare anche la paginazione.?
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

ciao per far prima essendo che non è un errore mio me e della classe .. ho trovato il demo del tutorial che ti ho linkato.
vedi:
prima
http://www.daveismyname.com/demos/simpl ... ation/?p=4
dopo
http://www.daveismyname.com/demos/simpl ... tion/?p=-4

vedi cosi capiamo come mai.

grazie mille.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Diciamo che la classe che hai scelto è fatta coi piedi.

Puoi risolvere mettendo prima di "new Paginator(....)" questo:

Codice: Seleziona tutto

$_GET['p'] = max( 1, intval($_GET['p']) );
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4608654#p4608654][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Diciamo che la classe che hai scelto è fatta coi piedi.

Puoi risolvere mettendo prima di "new Paginator(....)" questo:

Codice: Seleziona tutto

$_GET['p'] = max( 1, intval($_GET['p']) );
ok, quasi risolto.. l'unico problemino..
e che se non c'è p
mi da:
Notice: Undefined index: p

come posso risolvere?

penso con un isset ma dove ?
grazie mille.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Brutto per brutto fai prima a mettere un @ prima di max(...)
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da treled »

si lo so .. ma le @ non me garbano posso fare isset($_GET["p"]) ?
giusto?
ora provo.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problemi query con valori -1 -2 -3 negativi

Messaggio da Zoff »

Così:

Codice: Seleziona tutto

$_GET['p'] = isset($_GET['p']) ? max( 1, intval($_GET['p']) ) : 1;
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti