Autor | Zpráva | ||
---|---|---|---|
kofik Profil * |
Ahoj, marně už se pokouším s výpisem do 4 sloupcové tabulky. V tabulce mám vytvořen seznam hráču, každý hráč ma jedno id a má m u nej vypsano jméno, za jaký tym hraje atd... Za každý tym hraje asi přez 15 hráču a chtěl bych udělat výpis jmen hráčů do tabulky, která by měla 4 sloupce a aby se to rovnoměrně vypsalo. Díky moc za ppomoc fakt si nevým rady....
|
||
fuckin Profil |
#2 · Zasláno: 3. 8. 2009, 10:43:19
Tak sem ukaz cos vytvoril, my ti to upravime.
|
||
kofik Profil * |
#3 · Zasláno: 3. 8. 2009, 10:44:52
No právě že jsem tady na foru už hledal a zkoušel, ale nic nešlo :-(
|
||
kofik Profil * |
#4 · Zasláno: 3. 8. 2009, 10:48:39
Nevím jesli vám to pomůže, ale vytvořil jsem to v html a takhle bych chtěl aby to vypadalo, ale abych nemuel pořád pracně přidávat nebo mazat hráše, tak jsem si vytvořil databázi a chtěl bych to aby mi to vypisovalio takhle http://www.koberickafotbalovaliga.wz.cz/index.php?sekce=tymy
|
||
AM_ Profil |
#5 · Zasláno: 3. 8. 2009, 11:02:54 · Upravil/a: AM_
for ($i = 0; $i < count($zaznamy); $i++){ //vypsat zaznamy if ($i % 4 == 0) echo '<tr>'; //kazdy 4ty zaznam zacina radek echo '<td>'.$zaznamy[$i].'</td>'; if ($i % 4 == 3) echo '</tr>'; //kazdy 4k+3ty zaznam ukoncuje radek } //srovnani poslednich lichych zaznamu if ($i % 4 != 3){ //posledni zaznam nedokoncil radek while ($i % 4 != 3){ //vypiseme zbyvajici prazdne bunky echo '<td> </td>'; $i++; } echo '</tr>'; //ukoncime } |
||
kofik Profil * |
#6 · Zasláno: 3. 8. 2009, 11:11:44
[#5] A nemá ještě neco být před tím kódem? Nějak mi to nejde....
|
||
Alphard Profil |
#7 · Zasláno: 3. 8. 2009, 11:12:57
AM:
Pěkný script, mám chuť dát ho do FAQ, chceš ho ještě nějak okomentovat? Nebo ho tam můžeš vložit pod svým jménem, není to zamčené (ale možná ho ve finále ještě trochu upravím :-)). |
||
Alphard Profil |
#8 · Zasláno: 3. 8. 2009, 11:13:44
kofik:
Musíte mít ty hráče v proměnné $zaznamy, takže asi výběr z databáze. |
||
kofik Profil * |
#9 · Zasláno: 3. 8. 2009, 11:17:23
[#8] nemůžete mi to prosím napsat :-)
|
||
Alphard Profil |
#10 · Zasláno: 3. 8. 2009, 11:24:11
$hraci = mysql_query ("select ... "); for ($i = 0; $hrac = mysql_fetch_assoc ($hraci); $i++){ |
||
AM_ Profil |
#11 · Zasláno: 3. 8. 2009, 11:27:14
kofik
aha, a je pro tebe důležité, aby se to vyplňovalo po sloupcích? můj skript to vyplní po řádcích, což je algoritmicky jednodušší, ale nevím, jestli ti to vyhovuje. Jinak samozřejmě stačí jakkoli naplnit pole $zaznamy - s databází pracovat umíš? Alphard klidně to tam dám :) |
||
kofik Profil * |
#12 · Zasláno: 3. 8. 2009, 11:45:43
má to být teda nějak tak?
$spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $hraci = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2009` WHERE `tym` LIKE CONVERT( _utf8 'G-Team' USING latin2 ) COLLATE latin2_czech_cs LIMIT 0 , 30"); echo "<table>"; for ($i = 0; $hrac = mysql_fetch_assoc ($hraci); $i++){ if ($i % 4 == 0) echo '<tr>'; echo '<td>'.$hrac[$i].'</td>'; if ($i % 4 == 3) echo '</tr>'; } //srovnani poslednich lichych zaznamu while ($i % 4 != 3){ echo '<td> </td>'; } echo '</tr>'; echo "</table>"; |
||
Alphard Profil |
#13 · Zasláno: 3. 8. 2009, 11:49:16 · Upravil/a: Alphard
Aha, po sloupcích, to jsem si nevšiml. Takže tady je verze po sloupcích.
<?php define ("COLS", 4); $zaznamy = range(1, 27); $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<table>\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo $zaznamy[$j*$pocetRadku + $i]; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; ?> kofik: Tak to zkuste, ne? Je to rychlejší, než když to budeme zkoumat. |
||
kofik Profil * |
#14 · Zasláno: 3. 8. 2009, 11:53:34
[#12] Zkočel jsem to co jsem tady psal aspon 3x a nějak se ta stránka nenačte a zamrzne celý prohlížeč...
|
||
Alphard Profil |
#15 · Zasláno: 3. 8. 2009, 12:21:52 · Upravil/a: Alphard
Alphard:
„Pěkný script, mám chuť dát ho do FAQ“ Beru zpět, vždyť se to zacyklí :-) kofik: Omlouvám se, tady je opravená verze: $spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $zaznamy = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2009` WHERE `tym` LIKE CONVERT( _utf8 'G-Team' USING latin2 ) COLLATE latin2_czech_cs LIMIT 0 , 30"); define ("COLS", 4); echo "<table>\n"; for ($i = 0; $zaznam = mysql_fetch_assoc ($zaznamy); $i++) { if ($i % COLS == 0) echo "<tr>"; echo "<td>".$zaznam['jmeno']."</td>"; if ($i % COLS == COLS - 1) echo "</tr>\n"; } //srovnani poslednich lichych zaznamu while ($i++ % COLS != 0){ echo "<td></td>"; } echo "</tr>\n"; echo "</table>\n"; |
||
kofik Profil * |
#16 · Zasláno: 3. 8. 2009, 12:28:51
Díky tak by to nějak mělo být a ještě detajl, jdou tam před ty jména vložit ještě čísla 1. 2. 3. to bude maličkost ne?
|
||
Alphard Profil |
#17 · Zasláno: 3. 8. 2009, 12:37:16
Jestli chcete řadit po sloupcích, tak takhle (je tam i číslování):
$spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $result = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2009` WHERE `tym` LIKE CONVERT( _utf8 'G-Team' USING latin2 ) COLLATE latin2_czech_cs LIMIT 0 , 30"); while ($line = mysql_fetch_assoc ($result)) $zaznamy[] = $line; define ("COLS", 5); $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<table>\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo ($j*$pocetRadku + $i +1).". ".$zaznamy[$j*$pocetRadku + $i]['jmeno']; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; A původní verze s číslováním: $spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $zaznamy = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2009` WHERE `tym` LIKE CONVERT( _utf8 'G-Team' USING latin2 ) COLLATE latin2_czech_cs LIMIT 0 , 30"); define ("COLS", 4); echo "<table>\n"; for ($i = 0; $zaznam = mysql_fetch_assoc ($zaznamy); $i++) { if ($i % COLS == 0) echo "<tr>"; echo "<td>".($i+1).". ".$zaznam['prijmeni']."</td>"; if ($i % COLS == COLS - 1) echo "</tr>\n"; } //srovnani poslednich lichych zaznamu while ($i++ % COLS != 0){ echo "<td></td>"; } echo "</tr>\n"; echo "</table>\n"; |
||
AM_ Profil |
#18 · Zasláno: 3. 8. 2009, 12:49:17
„Alphard:
„Pěkný script, mám chuť dát ho do FAQ“ Beru zpět, vždyť se to zacyklí :-)“ chybka opravena, zapomněl jsem v druhém cyklu přičítat i :) |
||
kofik Profil * |
#19 · Zasláno: 3. 8. 2009, 12:54:35
Dík všem moc za rady, už to jede jak má díky...
|
||
Kajman_ Profil * |
#20 · Zasláno: 3. 8. 2009, 13:07:07
AM, Alphard:
Také by se nemělo vypisovat </tr>, pokud se nedávalo žádné <td></td>. A do prázdných buněk by se mohla dát nedělitelná mezera, ale to být asi nemusí. |
||
kofik Profil * |
#21 · Zasláno: 3. 8. 2009, 13:23:58
Naazil sem na menší problém, když vložím n astránku
// FC Bahnhof $spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $result = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2010` WHERE `tym` LIKE CONVERT( _utf8 'FC Bahnhof' USING latin2 ) COLLATE latin2_czech_cs ORDER BY `jmeno` ASC"); while ($line = mysql_fetch_assoc ($result)) $zaznamy[] = $line; define ("COLS", 4); $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<div class=\"text1\">\n"; echo "<span class=\"podnadpis-grey\">FC Bahnhof</span><br />\n"; echo "<table class=\"kontakty-table\">\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo ($j*$pocetRadku + $i +1).". ".$zaznamy[$j*$pocetRadku + $i]['jmeno']; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; echo "</div>\n"; a hned pod toto // Team kruťasů $spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); $result = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2010` WHERE `tym` LIKE CONVERT( _utf8 'Team Kruťasů' USING latin2 ) COLLATE latin2_czech_cs ORDER BY `jmeno` ASC"); while ($line = mysql_fetch_assoc ($result)) $zaznamy[] = $line; define ("COLS", 4); $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<div class=\"text2\">\n"; echo "<span class=\"podnadpis-blue\">Team kruťasů</span><br />"; echo "<table class=\"kontakty-table\">\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo ($j*$pocetRadku + $i +1).". ".$zaznamy[$j*$pocetRadku + $i]['jmeno']; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; echo "</div>\n"; ?> Tak to dělá bordel, pač s toho prvního skriptu se načtou data a vkládají se kak i do toho druhého... udělalo mi to tohle http://www.koberickafotbalovaliga.wz.cz/index.php?sekce=tymy |
||
Alphard Profil |
#22 · Zasláno: 3. 8. 2009, 13:34:37
Kajman:
„Také by se nemělo vypisovat </tr>, pokud se nedávalo žádné <td></td>“ Díky, prvně mě ani nenapadlo, že taková situace může nastat. Musím to přepsat skoro celé. :-) „A do prázdných buněk by se mohla dát nedělitelná mezera, ale to být asi nemusí.“ AM_ ji tam má. Já kodeřině nerozumím, ale budu vám věřit. kofik: Takhle se to nedá nakopírovat za sebe. Připojení stačí jedno, konstanta taky jen jedna. Ideální by bylo vybrat vše v jednom dotaze, pak to naházet do pole a v cyklu vypsat všechny týmy |
||
Kcko Profil |
#23 · Zasláno: 3. 8. 2009, 13:47:46
Zkus toto
vyzkouseno, overeno Pocet sloupecku si menis v promenne $column a staci tedy rovnou predat pole $seznam = "AC Chievo Verona AC Milan AC Siena ACF Fiorentina ADO Den Haag AEK Atény AIK Fotboll AJ Auxerre Ajax Amsterdam Alkmaar Almería Arsenal FC AS Monako FC"; $tymy = explode("\n", $seznam); $celkem = count($tymy); $column = 4; $per_column = $celkem / $column; $per_column_af = ceil($per_column); $chunk = array_chunk($tymy, $per_column_af, false); echo '<table border=1>'; for ($i = 0; $i < $per_column_af; $i++) { echo "<tr>"; for ($j = 0; $j < $column; $j++) { if (in_array($chunk[$j][$i], $tymy)) { echo "<td>".$chunk[$j][$i]."</td>"; } else { echo "<td> </td>"; } } echo "</tr>"; } echo '</table>'; |
||
Alphard Profil |
#24 · Zasláno: 3. 8. 2009, 14:27:03 · Upravil/a: Alphard
Kcko:
Chápu-li to dobře, tvůj kód neřeší daný problém, je to jen jiná verze toho, co již funguje (i když array_chunk() je dobrý nápad, nemohu se rouhodnout, co je lepší do FAQ :-)). kofik: // na začátku vše nastavíme $spojeni = mysql_connect("$server","$uzivatel","$heslo"); mysql_select_db("$databaze", $spojeni); define ("COLS", 4); // a pak měníme již jen obsah $result = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2010` WHERE `tym` LIKE CONVERT( _utf8 'FC Bahnhof' USING latin2 ) COLLATE latin2_czech_cs ORDER BY `jmeno` ASC"); while ($line = mysql_fetch_assoc ($result)) $zaznamy[] = $line; $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<div class=\"text1\">\n"; echo "<span class=\"podnadpis-grey\">FC Bahnhof</span><br />\n"; echo "<table class=\"kontakty-table\">\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo ($j*$pocetRadku + $i +1).". ".$zaznamy[$j*$pocetRadku + $i]['jmeno']; else echo " "; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; echo "</div>\n"; // další tabulka, vymažeme $zaznamy atd. unset($zaznamy); $result = mysql_query ("SELECT `jmeno` FROM `tabulka_kanonyri_2010` WHERE `tym` LIKE CONVERT( _utf8 'Team Kruťasů' USING latin2 ) COLLATE latin2_czech_cs ORDER BY `jmeno` ASC"); while ($line = mysql_fetch_assoc ($result)) $zaznamy[] = $line; $pocetRadku = ceil(count ($zaznamy) / COLS); echo "<div class=\"text1\">\n"; echo "<span class=\"podnadpis-grey\">Team kruťasů</span><br />\n"; echo "<table class=\"kontakty-table\">\n"; for ($i = 0; $i < $pocetRadku; $i++) { echo "<tr>"; for ($j = 0; $j < COLS; $j++) { echo "<td>"; if (isset ($zaznamy[$j*$pocetRadku + $i])) echo ($j*$pocetRadku + $i +1).". ".$zaznamy[$j*$pocetRadku + $i]['jmeno']; else echo " "; echo "</td>"; } echo "</tr>\n"; } echo "</table>\n"; echo "</div>\n"; Tohle by mělo fungovat, ale jak jsem již psal, z hlediska výkonu by bylo lepší vytáhnout to jedním dotazem. |
||
AM_ Profil |
#25 · Zasláno: 3. 8. 2009, 15:04:38
kofik
je čas na mou věčnou pravdu: zkus nejdřív trochu projít základy, než se pustíš do pokročilejší práce s PHP, DB a tak. PHP se nedá psát tak že se zeptáš na fóru jak se něco dělá a pak si tam intuitivně přepíšeš pár věcí po svém aby to možná fungovalo. „„A do prázdných buněk by se mohla dát nedělitelná mezera, ale to být asi nemusí.“ AM_ ji tam má. Já kodeřině nerozumím, ale budu vám věřit.“ Co se týče nedělitelné mezery v prázdných buňkách, je to lepší, protože IE úplně prázdnou buňku tuším nevykreslí vůbec (tj ani případné stylování jako barva, rámeček) a tabulka pak vypadá blbě. „Také by se nemělo vypisovat </tr>, pokud se nedávalo žádné <td></td>.“ můj kód to tak ani dělat nebude. Jediný problém by snad nastal v případě, kdy by bylo pole prázdné (nevypsalo by se úvodní <tr>), ale to už se dá ošetřit jednoduchou podmínkou - pokud je pole prázdné, vůbec tuto část nespustit. |
||
Alphard Profil |
#26 · Zasláno: 3. 8. 2009, 16:47:30
AM:
„můj kód to tak ani dělat nebude“ Právěže bude, stačí, když se dokončí řádek. Aplikuje se tato větev if ($i % 4 == 3) echo '</tr>'; a pak se </tr> vypíše ještě jednou nepodmíněně. |
||
AM_ Profil |
#27 · Zasláno: 3. 8. 2009, 20:54:25
Alphard
tak, i toto jsem opravil a okomentoval, jestli to chceš do FAQ takhle už je to snad dobře :) kód jsem původně ani nezkoušel, psal jsem to z hlavy. |
||
Časová prodleva: 15 let
|
0