Autor Zpráva
Luccy
Profil *
ahojky, přátelé


mám takový problémek - jak mám zapsat cestu stránkování když url podmiňují 2 faktory

1. faktor počet inzerátů dané kategorie
2. faktor kraj

respektive potřebovala by jsem to zapsat nějak takto:


 if($page > 1) {  
      echo "<a href='detail.php?region='.$regionselect.'?page=1'> &lt;&lt; </a>";  
    }  


nebo jak se to zapisuje? aby výsledné url vypsalo např nějak takto:
 detail.php?region=4?page=1 


respektive jak jinak udělat aby mi to ve stránkování vypisovalo podle hodnoty ze <select> a zároveň i podle page=?
o_O
Profil
Luccy:
např nějak takto
Otazník se píše jen za URL souboru, mezi různými hodnotami (region, page) se píše & (&amp;).

Nějak nechápu Váš dotaz. O co přesně Vám jde (čeho chcete dosáhnout)?
Luccy
Profil *
Chtěla bby jsem dosáhnout aby mi to stránkovalo v kategorii např automobily i v případě že uživatel vybere např kraj vysočinu, udělala jsem to takto:

<a href='detail.php?region=".$regionselect."?&page=1'>
ale pořád mi tu vzniká problem že když dám zobrazit všechny kraje, stránkování běží jak má u všech krajů totiž mám takto <a href='detail.php?page=1'>. No a teď je problém když u kategorie vyberu např kraj vysočina - oni se zobrazí inzeráty které mají dole se vypíše stránkování ale když kliknu na stránku 2 přejde mi to do stránky a href='detail.php?region=".$regionselect."?&page=2'> ale zobrazí se hodnoty ze stránkování <a href='detail.php?page=2'>


jak to správně zapsat je příkaz
<a href='detail.php?region=".$regionselect."?&page=1'>
napsán správně? díky
joe
Profil
Odkaz máš zapsaný dobře :) Tvůj problém spočívá v tom, že to nemáš vyřešené ve skriptu, který se o to stránkování stará - tedy tam musíš zohledňovat danou kategorii.

Tzn. že někde tam bude dotaz (pravděpodobně do databáze) -
SELECT .. FROM .. LIMIT .. , ..


A pokud budeš mít vyplněný parametr v URL adrese
isset($_GET['region'])
tak s ním také musíš počítat v tom dotazu, který by pak měl vypadat cca.
SELECT .. FROM .. WHERE region = mysql_real_escape_string($_GET['region']) LIMIT .. , ..
Anonymní
Profil *
joe:
Odkaz máš zapsaný dobře :)
<a href='detail.php?region=".$regionselect."?&page=1'>

Nemá to být bez toho druhého otazníku ?
joe
Profil
Anonymní:
Má, toho jsem si nevšiml :), je to jak píše o_O
Luccy
Profil *
no pořád s tím mám problémek

dotaz sem vyzkousela napsat natvrdo takto:
$articles = mysql_query("SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE  kategorie ='1' && region ='13' ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);  



první stránka detail.php se vypíše jak má - stránkování napočítá přesný počet stránek ale jakmile kliknu na druhou stránku která vypadá takto (2 >):
/detail.php?region=13&page=2 
tak mi to nevypíše nic, nemužu přijit co je špatně?
joe
Profil
WHERE  kategorie = 1 && region =13


Čísla piš bez apostrofů.

A kde je chyba... Zkus si přímo ten dotaz vložit třeba do phpMyAdmin a nebo do kódu za ten řádek napiš var_dump($articles); co to vypíše. Máš v databázi data, která tomu dotazu odpovídají?
Luccy
Profil *
ano v db mám data která dotazu odpovídají, selectuje to podle kraju co vybírám ale nikdy nevypíše tu druhou stránku mám to teď zapsáno takto:

WHERE  kategorie =1  &&  region=".$regionselect." ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);
- ale to pracuje jak má

var_dump($articles); vypíše správně resource(4) of type (mysql result) což mi sedí i podle databáze - nastavila sem stránkování po 3 produktách, takže na 2 stránku zbývá jeden produkt ale když kliknu na odkaz druhé stránky nevypíše se nic, co může být ještě špatně? díky
Luccy
Profil *
Respektive proč druhá stránka nic nezobrazí?
okolojdouci
Profil *
Luccy:
když kliknu na odkaz druhé stránky nevypíše se nic, co může být ještě špatně?

Nech si vypsat ten dotaz. Jestli budeš mít pocit, že je v pořádku, postupuj podle #8, jestli to nevyřešíš, napiš ten dotaz sem. Přímo déotaz, který dáváš databázi.
Luccy
Profil *
db dávám dotaz:


$articles = mysql_query("SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE  region=$regionselecte && kategorie=1 ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);  
var_dump($articles);



první stránka zobrazí vše dobře druhá nic, proč?
joe
Profil
Pošli sem raději celý kód... z tohohle se moc vyčíst nedá. Mimochodem v tom dotazu píšeš $regionselecte (e - na konci)
Luccy
Profil *
vkladam kod sem už pomalinku beznadějna:


<?php


$submit = $_POST['submit'];
$regionselect = $_POST['regionselect'];



$connect = mysql_connect ("","","") or die("Nepodařilo se připojit k databázi");

mysql_select_db ("databaze");


if ($submit) {

$regionselecte = $_POST['regionselect'];


echo $regionselect;
//////////////// stránkování inzerátů

$regionselect = $_POST['regionselect'];

$max = mysql_result(mysql_query("SELECT COUNT(*) FROM inzeraty WHERE  region=$regionselect && kategorie=1 "), 0);

echo $max ;


//echo $_GET['regionselect'];
define ("ON_PAGE", 2); //56


   if(!isset($_GET["page"]) || !is_numeric($_GET["page"]) )  
     $page = 1;  
   else  
     $page = $_GET["page"];   

    $by = (ON_PAGE * ($page - 1));  

$articles = mysql_query("SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE  region=$regionselect && kategorie=1 ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);  
var_dump($articles);
echo mysql_error();
  if(mysql_num_rows($articles) > 0) {  
    while($article = mysql_fetch_object($articles)){  // řádek 87

  //region = mysql_real_escape_string($_GET['region'])
//region='".$regionselect."'

$vybernadpis=$article->nadpis;
$vybertext=$article->text;
$vyberkategorie=$article->kategorie;
$vyberid=$article->id;
$vyberfoto=$article->foto;
$vyberemail=$article->email;
$vybertelefon=$article->telefon;
$datum=$article->datum;
$cas=$article->cas;
$vyberdatum=$article->datum;

$datumtotime = strtotime($datum);
$novydatum = date ("j. n. Y", $datumtotime); 
$obr='<img src="http://.cz/fotkaminiatura/'.$vyberfoto.'">';


$adresa='<a href="detail.php?id='.$vyberid.'">'.$vybernadpis.'</a>';


	print "<div style='background:#f9f9f9;width:970px; float:left;text-align:justify; margin-top:20px; padding:5px;'><div style='float:left; width:100px; height:105px;'>".$obr."</div> <div style='color:#434244;padding:3px;width:965px; '> <div style='text-color:blue;'>".$adresa." <small>   <div style='background::#434244; float:right; font-family: Verdana, Arial, Courier, sans-serif; font-size:12pt; color:blue;' > ".$novydatum." v ".$cas."</div> <br></div>".$vybertext."</small></div><BR><BR><div style='float:right; font-family: Verdana, Arial, Courier, sans-serif; font-size:10pt; '><a href='#'>Detail inzerátu</a> | <a href='#'>Odpoveď</a></div> </div>";
	print "<div style='background:white; height:1px;'></div>";
	print "<div style='height:20px; background:white;'></div>";


echo mysql_error();


    if ($vyberfoto!='') { $obr='<img src="http://.cz/fotkaminiatura/'.$vyberfoto.'">';}


   else {$obr='<img src="http://.cz/images/picture.png">';}
		     
    
	


	
     }  
   }  

print "<div style='text-align:center; padding:20px;'>";


if(ON_PAGE < $max){   



    // NA ZAČÁTEK  
    // pokud nejsme na začátku, udělat odkaz na začátek...  
    if($page > 1) {  
      echo "<a href='detail.php?page=1'> &lt;&lt; </a>";  
    }  
      
    // PŘEDCHOZÍ  
    // pokud  nejsme na začátku, zobrazit odkaz na předchozí a cyklus na předchozí  
    if($page > 1) {   
     			echo "<a href='detail.php?region='&page=".($page-1)."'> &lt; </a>";  
                          
   			  // PŘEDCHOZÍ - CYKLUS  
   			  // vypíše 3 předchozí stránky  
    			  for($i = 4; $i > 0; $i--) {  
     			  if(($page - $i) >= 1){  
        		  echo "<a href='detail.php?page=".($page-$i)."'> ".($page-$i)." </a>";  
                                        }  
                                   }  
                  } 

 
  if(($page - $i) >= 1)  
  if($page < ($max / ON_PAGE)) {  
   // DALŠÍ - CYKLUS  
 


  // vypíše 3 následující stránky  
  for($i = 1; $i < 4; $i++) {   
     if(($page + $i) <= ceil($max / ON_PAGE)) {  
       echo "<a href='detail.php?page=".($page+$i)."'> ".($page+$i)." </a>";  
     }  
   }  
                        
   // další  
   echo "<a href='detail.php?page=".($page+1)."'> &gt; </a>";  
 }  

    if(($page + $i) <= ceil($max / ON_PAGE))  

    // KONEC  
    // pokud nejsme na konci, udělat odkaz na konec   
     
    if($page < ceil($max / ON_PAGE)) {  
      echo "<a href='detail.php?page=".ceil($max / ON_PAGE)."'> &gt;&gt; </a>"; 
    }  
}
    echo  "<br />";    echo  "<br />";

print "</div>";


////////////////////////////////////////**************strankovani***********************/////////////////////

}


?>

Luccy
Profil *
zde je kod php, jak říkám první stránka se zobrazí dobře i se stránkováním ale druhá stránka už neběží - kde je tedy chybka?
okolojdouci
Profil *
Co je v $regionselect? Jestli to není číslo, chybí ti na ř. 40 apostrofy.
Luccy
Profil *
v $regionselect je číslo např. - <select><option value="13">Moravskoslezky kraj</option></select> - kde je tedy jinde chybka?
okolojdouci
Profil *
Luccy:
Nauč se hledat chyby.

"nic to nedělá" není žádná informace. Zjisti si, jestli se ten sql dotaz vůbec provede a jestli vrátí nenulový počet záznamů.
Luccy
Profil *
ano SQL dotaz vrátí správný výsledek - počet inzerátů které vyhovují podmínkám v DB, ale nevím proč mi to nechce brát to stránkování - jak mám zjistit u druhé stránky chybu?

už sem bezradná lámu se stím už 2 dny - vidíte tam někde chybku? nakopněte mě prosím..
joe
Profil
Luccy:
echo "<a href='detail.php?region='&page=".($page-1)."'> &lt; </a>";  

Tohle je nějaké podivné, máš tam apostrof navíc a nevyplněný parametr region. Já nepíšu apostrofy u atributů v HTML, takže bych to napsal
echo '<a href="detail.php?region=' . $regionId . '&page=' . ($page-1) . '"> &lt; </a>'; 


Ve zdrojovém kódu HTML by pak mělo být vygenerováno
<a href="detail.php?region=...&page=..."> < </a>


To je jedna věc. Druhá věc je ta, že pokud na ten odkaz klikneš, musíš si z URL vybrat parametry jak page, tak i ten region. Pomocí $_GET.


lámu se stím už 2 dny
To je výdrž :-)

EDIT:

Pravděpodobně tam máš nějaký filtrační formulář, takže tu proměnnou s regionem zjišťuješ
$regionselect = $_POST['regionselect'];

Při stránkování ale používáš metodu GET, takže musíš musíš psát
$regionselect = $_GET['region'];

(název tak, jak uvádíš v tom generování těch odkazů - tedy 'region'

Takže by bylo asi nejlepší před if($submit) na if(!$submit), tam zjistit ten region z GET
Luccy
Profil *
vyzkoušela jsem vše ale marně - když hodím natvrdo takto:

$articles = mysql_query("SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE region=13 &&  kategorie=1 ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);  




opět první stránka se zobrazí jak má a druhá nic

je to tímto že mám $regionselect = $_POST['regionselect']; misto $_GET['regionselect']; ? to musím mít i <form method="GET">?

odkaz je takto:
 // další  
   echo "<a href='detail.php?region=".$regionselect."&page=".($page+1)."'> &gt; </a>";  

ve výsledku se vypíše takto: detail.php?region=13&page=2

jak to tedy dopravit? moc vás prosím pomožte, díky luccy
joe
Profil
Luccy:
Problém je, že neumíš rychle hledat chyby. Udělej tohle:

$articles = mysql_query("SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE region=13 &&  kategorie=1 ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by);

nahraď

$q = "SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE region=13 &&  kategorie=1 ORDER BY id DESC LIMIT ".ON_PAGE." OFFSET " . $by;

echo $q;

$articles = mysql_query($q); 


Ten vypsaný dotaz zkus pustit na databázi nebo jestli v něm není nějaká chyba.

A nebo sem napiš třeba icq, můžu ti s tim pak poradit
Luccy
Profil *
joe:
Když to opravím podle tebe, pracuje to stále stejně - první stránka se načte jak má, vypíše jak má stránkování, když kliknu na druhou stránku nezobrazí se nic, prázdná stránka

může to být tím že mám formulář v POST? či kde může být ještě chybka? děkuji
joe
Profil
Asi je chyba jinde, v kódu se takhle moc neorientuju, musel bych si to zkusit. Pokud se ti zobrazuje jenom bílá stránka - někde došlo k chybě, zkus hned za <?php napsat
error_reporting(E_ALL);
mělo by ti to napsat chybu
Luccy
Profil *
joe:
píše to:

Notice: Undefined index: submit .... on line 71

Notice: Undefined index: regionselect ...... on line 72


chyby těchto řádků:

$submit = $_POST['submit'];
$regionselect = $_POST['regionselect'];


ale proč?
shaggy
Profil
Luccy:
Ako vyzerá ten formulár, ktorý odosielaš? Lebo očividne sa v ňom nenachádzajú polia submit a regionselect.
Luccy
Profil *
joe:
Nebo spíše, chyba vypadá tak - že stránka se načte - běží HTML, ale část kde má být PHP tam je bílé místo - co by to mohlo ještě ovlivňovat?
joe
Profil
Luccy:
Nevím jak chceš, aby ti to fungovalo. Zřejmě tam máš nějaký formulář, který když odešleš, tak se ti objeví záznamy a teď u nich chceš mít stránkování (je to tak?)

Tzn. že po odeslání formuláře - pravděpodobně metoda POST - čteš data z $_POST. Pokud ale klikneš na odkaz, data už máš teď v URL adrese, tzn. čteš z $_GET, proto to píše ty upozornění.

$submit = isset($_POST['submit']) ? $_POST['submit'] : NULL;
$regionselect = isset($_POST['regionselect']) ? $_POST['regionselect'] : NULL;


Takhle to psát nebude.

Jinak není bílá stránka jako bílá stránka... pokud se ti jen nevypisuje něco co chceš od PHP, pak tam máš asi nějakou logickou chybu, když PHP nic nehlásí
joe
Profil
Jo už to vidim, mnt upravim to a pošlu to sem :)
joe
Profil
Zkus to takhle

<?php

$connect = mysql_connect("", "", "") or die("Nepodařilo se připojit k databázi");
mysql_select_db("databaze");

if (isset($_POST['submit'])) {
	$regionselect = isset($_POST['regionselect']) ? $_POST['regionselect'] : NULL;
} else {
	$regionselect = isset($_GET['regionselect']) ? $_GET['regionselect'] : NULL;
}


//////////////// stránkování inzerátů

define("ON_PAGE", 2); //56

$query = "SELECT COUNT(*) FROM inzeraty WHERE kategorie = 1" . ($regionselect ? ' AND region = ' . intval($regionselect) : '');
$max = mysql_result(mysql_query($query), 0);

if (!isset($_GET["page"]) || !is_numeric($_GET["page"])) {
	$page = 1;
} else {
	$page = (int) $_GET["page"];
}

$by = (ON_PAGE * ($page - 1));

$query = "SELECT  id, kategorie, region, nadpis, text, foto, email, telefon, datum, cas FROM inzeraty WHERE  kategorie = 1" . ($regionselect ? 'region = ' . intval($regionselect) : '') . ' ORDER BY id DESC LIMIT ' . ON_PAGE . ' OFFSET ' . $by;
$articles = mysql_query($query);

if (mysql_num_rows($articles) > 0) {
	while ($article = mysql_fetch_object($articles)) {

		$vybernadpis = $article->nadpis;
		$vybertext = $article->text;
		$vyberkategorie = $article->kategorie;
		$vyberid = $article->id;
		$vyberfoto = $article->foto;
		$vyberemail = $article->email;
		$vybertelefon = $article->telefon;
		$datum = $article->datum;
		$cas = $article->cas;
		$vyberdatum = $article->datum;

		$datumtotime = strtotime($datum);
		$novydatum = date("j. n. Y", $datumtotime);
		$obr = '<img src="http://.cz/fotkaminiatura/' . $vyberfoto . '">';

		$adresa = '<a href="detail.php?id=' . $vyberid . '">' . $vybernadpis . '</a>';

		print "<div style='background:#f9f9f9;width:970px; float:left;text-align:justify; margin-top:20px; padding:5px;'><div style='float:left; width:100px; height:105px;'>" . $obr . "</div> <div style='color:#434244;padding:3px;width:965px; '> <div style='text-color:blue;'>" . $adresa . " <small>   <div style='background::#434244; float:right; font-family: Verdana, Arial, Courier, sans-serif; font-size:12pt; color:blue;' > " . $novydatum . " v " . $cas . "</div> <br></div>" . $vybertext . "</small></div><BR><BR><div style='float:right; font-family: Verdana, Arial, Courier, sans-serif; font-size:10pt; '><a href='#'>Detail inzerátu</a> | <a href='#'>Odpoveď</a></div> </div>";
		print "<div style='background:white; height:1px;'></div>";
		print "<div style='height:20px; background:white;'></div>";

		if ($vyberfoto != '') {
			$obr = '<img src="http://.cz/fotkaminiatura/' . $vyberfoto . '">';
		} else {
			$obr = '<img src="http://.cz/images/picture.png">';
		}
	}
}

print "<div style='text-align:center; padding:20px;'>";


if (ON_PAGE < $max) {

	$url = 'detail.php' . ($regionselect ? '?region=' . $regionselect . '&page=' : '?page=');
	
	// NA ZAČÁTEK  
	// pokud nejsme na začátku, udělat odkaz na začátek...  
	if ($page > 1) {
		echo '<a href="' . $url . '1> &lt;&lt; </a>';
	}

	// PŘEDCHOZÍ  
	// pokud  nejsme na začátku, zobrazit odkaz na předchozí a cyklus na předchozí  
	if ($page > 1) {
		echo '<a href="' . $url . ($page - 1) . '"> &lt; </a>';

		// PŘEDCHOZÍ - CYKLUS  
		// vypíše 3 předchozí stránky  
		for ($i = 4; $i > 0; $i--) {
			if (($page - $i) >= 1) {
				echo '<a href="' . $url . ($page - $i) . '"> ' . ($page - $i) . ' </a>';
			}
		}
	}


	if (($page - $i) >= 1)
		if ($page < ($max / ON_PAGE)) {
			// DALŠÍ - CYKLUS  
			// vypíše 3 následující stránky  
			for ($i = 1; $i < 4; $i++) {
				if (($page + $i) <= ceil($max / ON_PAGE)) {
					echo '<a href="' . $url . ($page + $i) . '"> ' . ($page + $i) . ' </a>';
				}
			}

			// další  
			echo '<a href="' . $url . ($page + 1) . '"> &gt; </a>';
		}

	if (($page + $i) <= ceil($max / ON_PAGE))

	// KONEC  
	// pokud nejsme na konci, udělat odkaz na konec   
		if ($page < ceil($max / ON_PAGE)) {
			echo '<a href="' . $url . ceil($max / ON_PAGE) . '"> &gt;&gt; </a>';
		}
}

print "</div>";


////////////////////////////////////////**************strankovani***********************/////////////////////
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0