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
Tak sem ukaz cos vytvoril, my ti to upravime.
kofik
Profil *
No právě že jsem tady na foru už hledal a zkoušel, ale nic nešlo :-(
kofik
Profil *
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
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>&nbsp;</td>';
    $i++;
  }
  echo '</tr>'; //ukoncime
}
kofik
Profil *
[#5] A nemá ještě neco být před tím kódem? Nějak mi to nejde....
Alphard
Profil
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
kofik:
Musíte mít ty hráče v proměnné $zaznamy, takže asi výběr z databáze.
kofik
Profil *
[#8] nemůžete mi to prosím napsat :-)
Alphard
Profil
$hraci = mysql_query ("select ... ");
for ($i = 0; $hrac = mysql_fetch_assoc ($hraci); $i++){
AM_
Profil
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 *
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>&nbsp;</td>';
}
echo '</tr>';

echo "</table>";
Alphard
Profil
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 *
[#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
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 *
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
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
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 *
Dík všem moc za rady, už to jede jak má díky...
Kajman_
Profil *
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 *
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
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
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>&nbsp;</td>";
		}	
	}
	echo "</tr>";	
}
echo '</table>';

Alphard
Profil
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 "&nbsp;";
    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 "&nbsp;";
    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
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
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
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.

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: