[PHP] kniha návštěv - rozdělení příspevk 10 na tabulku

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod czbios 20. 11. 2005 22:05

loldaolda píše:
khihihi píše:nepouzivajte for( ; ; )! je pomaly, ceknite si nejaky ten benchmark..
esteticky krajsie je nechat indexovu premennu doklusat k 0 a prirodzene tak ukoncit while()

for( ;; ) ze je pomaly? To snad ne... Co teda pouzivat? While?

For je podle me nejelegantnejsi cyklus :-/
to je celkem jedno .. tohle by jsi řešil kdyby jsi dělal rozsáhlejší aplikace pro velký online hry nebo velký servery v PHP i když pochybuju to by jsi asi spíš využil .NET ale to je jedno tohle jem álo frekventovaná stránka a tenhle problém naštěstí nemusím řešit
czbios
Junior
Uživatelský avatar

Odeslat příspěvekod BetWithLowe(smazano) 20. 11. 2005 23:17

loldaolda píše:for( ;; ) ze je pomaly? To snad ne... Co teda pouzivat? While?

schválně sem to v javě vyzkoušel a při dlouhých cyklech(500 mil.) pruchodu je podstatne rychlejsi while...
BetWithLowe(smazano)
Junior

Odeslat příspěvekod christian 20. 11. 2005 23:26

PHP ale neni Java.. A uz vubec by me nenapadlo tyhle dva jazyky srovnavat rychlostne..
die('Hacking attempt');

Kdo se chce zapojit do alpha testu nové verze aplikace SuperFórum pro Android, napište mi soukromou zprávu.
christian
Hlavní administrátor
Uživatelský avatar

Odeslat příspěvekod BetWithLowe(smazano) 20. 11. 2005 23:29

rychlosti budou urcite nekde jinde, ale ty rychlosti budou v podobnem pomeru (for/while)...
BetWithLowe(smazano)
Junior

Odeslat příspěvekod esem 21. 11. 2005 00:14

Pokud to chces udelat univerzalne, pak strankovani zas az takovy problem byt nemusi, ale vzdycky je tu riziko, ze stranka, kde to chces vlozit uz zrovna tu "ridici" promennou pouziva. Tudiz reseni bych oznacil jako skoro-univerzalni.

Od php 4. jsou k dispozici tzv. superglobalni promenne. Tudiz ve svem skriptu muzes zjistit, jake promenne byly v URL nastavene - jsou v poli: $_GET. Jedine co potrebujes je, ze k uz existujicim promennym pridas tu svoji, upravenou.

To se da snadno provest pomoci 2 veci:
- cyklus foreach http://www.php.net/manual/cs/control-structures.foreach.php
- pouziti superglobalni promenne $_GET http://www.php.net/manual/cs/language.variables.predefined.php

Hotovy priklad je nize - psal jsem to z hlavy, tak je mozne ze tam budou nejake drobne syntakticke chyby a taky doufam ze jen syntakticke. Zkus si projit ty stranky, na ktere jsem poslal linky, myslim si, ze na reseni prijdes sam. Pokud prece jen chces nakopnout, tak se koukni na priklad co jsem poslal.

IMHO:
Nejlepsi a nejuplnejsi popis jazyka PHP je uveden v oficialni dokumentaci:
http://www.php.net/manual/cs/index.php. Vrele doporucuju si to projit - jedna se hlavne o sekci III. Reference jazyka. Neni tam toho moc a i presto je tam vsechno!

Rekneme, ze chces nastavit aby se priste zobrazila stranka cislo 5.
Kód: Vybrat vše
$NextPage = 5;

$MojeURL = 'index.php';
$oddelovac = '?';
$bylaRidiciPromenna = false;
foreach ( $_GET as $klic => $hodnota ) {
  if ( $klic != 'nextpage' ) $MojeURL .= $oddelovac . $klic . '=' . $hodnota;
  else{
    $MojeURL .= $oddelovac . 'nextpage=' . $NextPage;
    $bylaRidiciPromenna = true;
  }
  $oddelovac = '&';
}
if ( !$bylaRidiciPromenna ) $MojeURL .= $oddelovac . 'nextpage=' . $NextPage;

echo '<a href="'.$MojeURL.'">Dalsi stranka</a>';


v URL se tvoje ridici promenna uz muze vyskytovat, proto tam jsou ta "if", ktera zajisti, aby se ta ridici promenna nevyskytla v novevygenerovane URL 2x.

Tip: kdyz predavam cislo do SQL tak se mi velmi osvedcilo:
$sql = 'SELECT * FROM tablename LIMIT '.(int)$nejakaPromenna;

Doplneni:
Tak me ted napadlo pomerne elegantnejsi reseni:
Kód: Vybrat vše
$NextPage = 5;

$MojeURL = 'index.php';
$oddelovac = '?';
$_GET['nextpage'] = $NextPage;
foreach ( $_GET as $klic => $hodnota ) {
  $MojeURL .= $oddelovac . $klic . '=' . $hodnota;
  $oddelovac = '&';
}

echo '<a href="'.$MojeURL.'">Dalsi stranka</a>';
Naposledy upravil esem dne 21. 11. 2005 10:08, celkově upraveno 1
esem
Junior

Odeslat příspěvekod khihihi 21. 11. 2005 02:06

BetWithLowe píše:schválně sem to v javě vyzkoušel a při dlouhých cyklech(500 mil.) pruchodu je podstatne rychlejsi while...i/quote]

http://www.destiney.com/benchmarks/php_loops
lalala, lalala....
Moderátor diskusného fóra Živě.cz ve výslužbě
khihihi
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod BetWithLowe(smazano) 21. 11. 2005 08:55

vsak jo...
BetWithLowe(smazano)
Junior

Odeslat příspěvekod khihihi 21. 11. 2005 10:07

len ako potvrdenie ;)
Moderátor diskusného fóra Živě.cz ve výslužbě
khihihi
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod Andreas 21. 11. 2005 10:09

Ty prece muzes predat odkaz v teto podobe: http://...... index1.php?page=kniha&pocet=10 nebo 20 atd... takze pomoci page si zobrazis sekci kterou chces a pomoci pocet si pres get ziskas pozadovane prispevky.... ne? Takze ten kod, co ti tady psali jde a je jednoduchy... HF GL[/code]
Andreas
Junior

Odeslat příspěvekod (CZ)Bios 21. 11. 2005 12:47

Andreas píše:Ty prece muzes predat odkaz v teto podobe: http://...... index1.php?page=kniha&pocet=10 nebo 20 atd... takze pomoci page si zobrazis sekci kterou chces a pomoci pocet si pres get ziskas pozadovane prispevky.... ne? Takze ten kod, co ti tady psali jde a je jednoduchy... HF GL[/code]
jj děkuji za přspění... příště rposím dej třeba jendoduchý příklad... na to mě právě přivedl ESEM..
právě že jsme si neuvědomil že $_GET je pole... a proto vlastně to šlo tak že se jedna proměnna přemázla .. ... doma ty vyzkouší ma dám se celkovýž moje řešení
(CZ)Bios
Kolemjdoucí

Odeslat příspěvekod czbios 21. 11. 2005 19:58

Zde uvedu příklad který je funkční přivedl mě na něj výše myslím ESEM ... psal jsem to už v minulé zprávě a pak poslední příspěvek od Andrease:
rozpočet stránek:

Kód: Vybrat vše
  $sql="select count(*) from kniha ";
  $res=mysql_query($sql);
    if (!$res) {    echo mysql_errno() . "0. : " . mysql_error() . "\n";  };
    $zaznam=mysql_fetch_array($res);
    echo "<span id=\"pocet_zaznamu\"><b>poèet záznamù:   </b>".$zaznam[0]."<br></span>";   
    $zaznamy=$zaznam[0];
    $stranky=$zaznamy/10;
    $stranky=ceil($stranky);
[

výpis stránek

Kód: Vybrat vše
    ?> <table id="strankovani" ><tr><td><?php
   for($i=1;$i<=$stranky;$i++)
    :
      ?> <a id="stranky" href="index1.php?sekce=kniha&pocet=<?php echo $i; ?>"> <?php echo $i; ?></a>   <?php
    endfor; 
        ?> </tr></td></table><?php


a zpracování:

Kód: Vybrat vše
  if($_GET['pocet'])

   :
    $hornimez=$_GET['pocet']*10;
    $dolnimez=$hornimez-10;
    $sql="select jmeno,email,www,text,dc,ip from kniha order by id desc limit $dolnimez,10";
    $res=mysql_query($sql);
    if (!$res) {    echo mysql_errno() . "0. : " . mysql_error() . "\n";  };

   vypis_html($res);
    $uspech=1;
   endif;

if ($uspech!=1)
  :
   $sql="select jmeno,email,www,text,dc,ip from kniha order by id desc limit 0,10";
        $res=mysql_query($sql);
         if (!$res) {    echo mysql_errno() . "0. : " . mysql_error() . "\n";  };

      vypis_html($res);
       
       
  endif;   


kde fce vypis_html() je fce vpisu příspěvku - > individuální formátování



jinak všem děkuji za pomoc moc jste mi dali a pomohli
czbios
Junior
Uživatelský avatar

Předchozí stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků