Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
Nazdarek. Snazim si spravit strankovanie na zaklade selectu z formulara, no problem je v tom, ze vzdy mi vypise vysledky iba na prvej strane. Ked kliknem na dalsiu stranku alebo odkaz, tak mi to vyhodi pociatocny formular.
Tu je Script:
<?php
if ($_POST["spracuj"]) {
if($_POST["vzdelanie"]!="nic")
{
mysql_connect("xxxx","xxxx","xxxx");
mysql_select_db("xxxxx");
$rowsPerPage = 10;
$pageNum = 1;
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}
$offset = ($pageNum - 1) * $rowsPerPage;
$query = "SELECT meno FROM doplnky where (skola='".$_POST["vzdelanie"]."') LIMIT $offset, $rowsPerPage";
$result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result))
{
echo $row['meno'] . '<br>';
}
echo '<br>';
$query = "SELECT COUNT(meno) AS numrows FROM doplnky where (skola='".$_POST["vzdelanie"]."')";
$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];
$maxPage = ceil($numrows/$rowsPerPage);
$nav = '';
for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nav .= " $page "; }
else
{
$nav .= " <a href=\"index.php?formular=a&page=$page\">$page</a> ";
}
}
if ($pageNum > 1)
{
$page = $pageNum - 1;
$prev = " <a href=\"index.php?formular=a&page=$page\">[Prev]</a> ";
$first = " <a href=\"index.php?formular=a&page=1\">[First Page]</a> ";
}
else
{
$prev = ' ';
$first = ' ';
}
if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$next = " <a href=\"index.php?formular=a&page=$page\">[Next]</a> ";
$last = " <a href=\"index.php?formular=a&page=$maxPage\">[Last Page]</a> ";
}
else
{
$next = ' ';
$last = ' ';
}
echo $first . $prev . $nav . $next . $last;
}
}
?>
<form method="post">
<table>
<tr>
<td>Pohlavie:</td>
<td><select name="vzdelanie" size="1" value="<?echo $_POST["vzdelanie"]?>" >
<option value="nic" selected>Žiadne
<option value="zakl">Základné
<option value="stred">Stredoškolské
<option value="vysok">Vysokoškolské
</option>
</select>
</td>
</tr>
</table>
<input type=hidden name="spracuj" value="true">
<input type="submit" value="Vyhľadaj">
</form>
Keď vsak odstranim odtial podmienky vyberu ( napr. if ($_POST["spracuj"]) ) a zadam si podmienku v query "rucne", tak to funguje bez problemov.
V čom by mohol byt problem???
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
asi v tom že ten POST neposielaš na ďalšiu stranu ... (ak som správen porozumel čo chceš)
|
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
No myslel som, ze ten Post potrebuje len na select z databazy a uz len samotne vysledky rozdeli na stranky.. Ale mozno je to naozaj tym co vravis.. A ako teda zapisat, aby mi teda Post posielalo aj na dalsie stranky???
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
no ja by som to riešil session
|
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
Nazdarek..No skusal som som pouzit to session..Funguje to, ale ma to taky mali zadrhel.. Totiz..ak si spravim formular (ako to mam uvedene v prispevku), tak do session start musim dat toto:
<?php
session_start();
if ($_POST["odesli"]) {
if(!Empty($_POST['pohlavie']));
$_SESSION['vzdelanie']=$_POST['vzdelanie'];
}
takto to funguje. Problem nastava pri refresh stranky.. Totiz vzdy ked ju refreshnem, tak mi na nej zobrazi vysledky z posledneho vyhladavanie.. A ak sa prekliknem na nu z inej stranky, tak mi berie rovno select
$_SESSION["vzdelanie"]=="vsetci"; Cize ten kt. mam nastaveny ako prvy select vo formulari..
Neviete mi niekto poradit ako to vyriesit?? lebo som skusal rozne kombinacie a fakt uz neviem co este vyskusat..
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
No, tak sa nad tým trochu zamyslime... $_POST premenná sa vytvorí len bezprostredne po odoslaní formuláru. Jej argumenty sú v HTTP požiadavku skryté, takže ich nemožno odsledovať. Pri refreshnutí odoslanej stránky sa odosiela opäť POST požiadavka (na čo slušný prehliadač upozorní, pretože väčšinou nechceme údaje odosielať dvakrát - napr. pri posielaní príspevku sem do fóra).
Čo však v tomto prípade robíme, je len jednoduchý výber údajov z databázy. Nemeníme dáta v databázi a zároveň potrebujeme stránkovať - tj vygenerovať viacero rôznych stránok, ktoré ale závisia od toho, ako sme vybrali tú prvú.
Riešenie pomocou $_SESSION zlyhalo. Prečo? Pretože údaje sa síce do $_SESSION zapíšu, avšak po prechode na inú stránku tam ostanú a pri opätovnom návrate sa aplikácia tvári, že dáta už boli odoslané. Riešiť by sa to dalo zrušením $_SESSION na vhodnom mieste, avšak to nie je úplne triviálne, keďže jediný funkčný spôsob by bolo na všetky stránky okrem stránok s výsledkom daného formulára dať kontrolu na existenciu $_SESSION - čo je nesystémové, nepraktické a neefektívne.
Skutočné riešenie totiž spočíva inde. Dáta POST requestom nemeníme, taktiež neposielame žiadne citlivé dáta. Preto je správne pri odosielaní namiesto metódy POST použiť metódu GET a pri stránkovaní ponechať vygenerovaný GET string na všetky stránky v stránkovaní. Presne pre takéto prípady existuje rozdiel medzi GET a POST (ak by si mi neveril, skús si čokoľvek vyhľadať v Googli a pozri sa na URL pri prechádzaní stránok v stránkovaní).
A naozaj, pri použití GET namiesto POST naše problémy zmiznú.
Takže po krátkom zamyslení a chvíli teoretizovania sme našli riešenie, čiže môžme ísť spokojne na a zamýšľať sa o iných veciach .
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
p306t .. Tak toto je vyklad hodny pochvaly.. Naucne a vtipne.. Diik..Hned ako sa dostanem k PC,na ktorom robim na stranke tak to skusim..
|
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
p306t.. Tak som skusil to strankovanie s metodou GET.. A nefunguje to.. Totiz, ak som pouzil GET bez session, tak to zobrazi vysledky len na prvej stranke. Na dalsich strankach mi uz nezobrazilo nic. Pri pouziti session a GET, som narazil na ten isty problem..Totiz, strankovanie sice fungovalo no pri kazdom refreshi stranky mi zobrazilo vysledky posledneho vyhladavanie...cize som sa dostal na zaciatok mojho problemu.. Nemohol by mi niekto hodit link kde je nejake strankovanie ale 100% funkcne, alebo nebol by niekto ochotny upravit, resp. ukazat mi na skripte, ktory som tu hodil, ako to ma byt spravne??
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
No lebo si nečítal pozorne. p360t píše: ...a pri stránkovaní ponechať vygenerovaný GET string na všetky stránky v stránkovaní. To znamená, že každá stránka v stránkovaní bude mať url tvaru Citácia: http://www.nieco.sk/niekde/subor.php?page=CISLO&vzdelanie=NIECO Len tak zmeniť POST na GET samozrejme nepomôže, lebo to bude úplne rovnaký HTTP požiadavok, akurát v prípade GET budú odoslané údaje v HTTP hlavičke.
Realizácia je taká, že odkazy, ktoré budú tvoriť to stránkovanie budú vyzerať nejak takto:
Kód: <a href="subor.php?page=1&vzdelanie=<?php echo $_GET['vzdelanie'];?>">stranka 1</a> <a href="subor.php?page=2&vzdelanie=<?php echo $_GET['vzdelanie'];?>">stranka 2</a> <a href="subor.php?page=3&vzdelanie=<?php echo $_GET['vzdelanie'];?>">stranka 3</a>
Avšak musím ťa ešte upozorniť na jednu vec: premennú $_GET['vzdelanie'] musíš kontrolovať, aby nikto nemohol na stránku vložiť škodlivý kód (to znamená použiť funkcie ako strip_tags(), htmlspecialchars() atď).
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
No ja neviem kde robim chybu, ale mne to stale nejde..Upravil som ten odkaz nasledovne :
$prev = " <a href=\"$self?page=$page&vzdelanie=<?php echo $_GET['vzdelanie'];?>\">[Prev]</a> ";
a vypisuje mi to v kuse toto chybove hlasenie:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in W:\domains\xxx..xxx\stranky.php on line 68
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Počuj, ešte na jednu vec ťa musím upozorniť. Keď sem dám príklad, kus nejakého kódu, tak to neznamená, že ho máš bezhlavo skopírovať a o nič sa nestarať, ale naopak, máš si ho prečítať, pochopiť (ak nepochopíš, tak požiadaj o ďalšie vysvetlenie) a nakoniec vyskúšať (ak nefunguje pokúsiť sa z chybového hlásenia zistiť, čo sa stalo a pokúsiť sa to opraviť).
V tom príklade je výpis premennej $_GET['vzdelanie'] akoby zasadený do okolitého HTML kódu. Ty používaš vypisovanie HTML pomocou PHP kódu (čo sú vo výsledku ekvivalentné postupy) a preto si to musíš upraviť:
Kód: $prev = " <a href=\"$self?page=$page&vzdelanie=\"".$_GET['vzdelanie']."\">[Prev]</a> ";
Navyše, nemôžeš veciam len tak slepo dôverovať, je možné, že aj ja som spravil chybu (ale to neznamená, že ty nie si schopný ju odhaliť - naopak, si, tak sa o to aspoň pokús).
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
nato, aby si miesto POST, alebo SESSION (to bol teda fakt dobry nezmysel, to ta jak napadlo Tominator??? omg ) pouzil GET, musis si prerobit cely kod... funguje to totalne inak..
nezabudni, ale preistotu vsetky tie GET osetrit, predtym ako ich capnes do vyberu z DB.. nikdy nevies, kto co bude skusat...
(ked si pozres inac hocijaku stranku so strankovanim, vsade to ide cez get)
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 23.04.08 Prihlásený: 31.08.08 Príspevky: 37 Témy: 10 | 10 |
p306t.. No ci mi veris alebo nie, tak ja som fakt najprv skusal..Nie len bezhlavo skopiroval..ale neslo mi to ) K tomu php kodu :
bola tam taka mala chybicka ( \" ), takze takto to funguje ( pre zaciatocnikov ako som ja, ktori by to chceli tiez pouzit ):
$prev = " <a href=\"$self?page=$page&vzdelanie= ".$_GET['vzdelanie']."\">[Prev]</a> ";
No teraz ma zaujima dalsia vec. A to je to zabezpecenie. Hladal som na nete cosi k HTMLSpecialChars. Narazil som len na nejake zdrojaky no a z toho som nejako vydedukoval, ze by to malo vyzerat asi takto:
Na zaciatok skriptu som si dal
$xyz = $_GET["vzdelanie"];
$xyz = HTMLSpecialChars($xyz);
No a potom do SQL selectu :
SELECT meno FROM register where (vzdelanie='".$xyz."') LIMIT $offset, $rowsPerPage
a odkazu :
$prev = " <a href=\"$self?page=$page&vzdelanie=".$xyz."\">[Prev]</a> ";
Lenze nejako som nespozoval nijake zmeny(mozno som ani ziadne nemal )
Tak ma zaujima, ci som to HTMLSpecialChars spravne pouzil, ak ano,tak ci to postacuje taka ochrana a ak nie, tak ako by to malo byt spravne..Alebo nejaky dobry link, kde to pochopi aj taka lama ako ja..
Dik
|
|
Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 4 | 468 | 23.10.2008 17:23 newboy1 | | v PHP, ASP | 13 | 790 | 25.05.2008 17:19 stenley | | v PHP, ASP | 9 | 701 | 28.04.2011 2:13 JanoF | | v PHP, ASP | 7 | 529 | 18.05.2010 17:10 Ecko | | v Assembler, C, C++, Pascal, Java | 4 | 395 | 01.04.2012 12:47 gaspa10 | | v Delphi, Visual Basic | 2 | 854 | 21.10.2008 19:06 chiwo | | [ Choď na stránku: 1, 2 ] v PHP, ASP | 32 | 2397 | 28.08.2009 17:21 stenley | | v PHP, ASP | 2 | 403 | 29.03.2009 15:05 stenley | | v PHP, ASP | 8 | 1077 | 14.05.2008 14:55 eMPiko | | v Notebooky a netbooky | 9 | 610 | 04.11.2011 20:04 pato770 | | v Operačné systémy Unix a Linux | 5 | 1535 | 02.11.2006 11:43 itsgoingd | | v Operačné systémy Microsoft | 7 | 1041 | 19.06.2008 16:26 ridick | | v Operačné systémy Microsoft | 6 | 691 | 01.07.2009 0:49 djkuko4 | | v nVidia grafické karty | 14 | 883 | 09.03.2008 10:16 mirec9580 | | v Operačné systémy Microsoft | 5 | 507 | 29.11.2009 2:14 Chaos | | v Operačné systémy Unix a Linux | 3 | 348 | 24.02.2013 12:04 XOLOO |
|