Autor | Zpráva | ||
---|---|---|---|
Ladiscz Profil |
#1 · Zasláno: 20. 6. 2011, 18:09:32
Dobrý den,
prosím, potřeboval bych poradit ohledně vytvoření tabulky na webových stránkách... Jde o to, že potřebuji tabulku pro plánovač akcí, kde v prvním sloupci bude ID akce a od toho se bude vše odvíjet. V databázi mám dvě tabulky, v jedné vypsané ID, typ akce, datum akce atp., v druhé stejné ID, jméno účastníka a jeho roli... Rád bych tabulku vytvořil tak, aby se mi akce + účastníci řadili vpodstatě k sobě, teď mi to totiž dělá to, že to vypíše všechny akce v tabulce nahoru a teprve po všech vypsaných akcích to vypíše účastníky. Předem děkuji za radu. (PS: omlouvám se za složitý skript, ale opravdu tomu nerozumím a všechno víceméně okoukávám odjinud a jen překopávám skripty metodou pokus/omyl) function ShowNews() { global $Config, $db; $db->select_db($Config['Database']['Database']); if(array_key_exists('raidy', $_GET)) $Filter = ' WHERE `equip` = '.$_GET['equip']; else $Filter = ''; $this->db->select_db($Config['Database']['Database']); $limit = 5; if(array_key_exists('page_index', $_GET)) $Page = $_GET['page_index']; else $Page = 0; $DbResult = $db->query('SELECT COUNT(*) FROM `raidy`' .$Filter); $DbRow = $DbResult->fetch_row(); $TotalCount = $DbRow[0]; $Output = '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><b>ID</b></td>'. '<td width="125"><b>Datum</b></td>'. '<td width="50"><b>Čas</b></td>'. '<td width="170"><b>Raid</b></td>'. '<td width="80"><b>Raid Leader</b></td>'. '<td width="110"><b>Požadovaný EQ</b></td>'. '</tr>'. '</table>'; $DbResult = $db->query('SELECT * FROM `raidy` WHERE `id`=`id` ORDER BY `rok` DESC, `mesic` DESC, `den` DESC, `hod` ASC, `min` ASC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($raidy = $DbResult->fetch_assoc()) { $text = str_replace('&', '&', $raidy['text']); $leader = str_replace('&', '&', $raidy['leader']); $raid = str_replace('&', '&', $raidy['raid']); $id = str_replace('&', '&', $raidy['id']); $equip = str_replace('&', '&', $raidy['equip']); $rok = str_replace('&', '&', $raidy['rok']); $mesic = str_replace('&', '&', $raidy['mesic']); $den = str_replace('&', '&', $raidy['den']); $denvtydnu = str_replace('&', '&', $raidy['denvtydnu']); $hod = str_replace('&', '&', $raidy['hod']); $min = str_replace('&', '&', $raidy['min']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$id.'</font></td>'. '<td width="125"><font color="#99AACC">'.$denvtydnu.', '.$den.'.'.$mesic.'.'.$rok.'</font></td>'. '<td width="50"><font color="#99AACC">'.$hod.':'.$min.'</font></td>'. '<td width="170"><font color="#99AACC">'.$raid.'</font></td>'. '<td width="80"><font color="#99AACC">'.$leader.'</font></td>'. '<td width="110"><font color="#99AACC">'.$equip.'</font></td>'. '</tr>'. '</table>'; } global $Config, $db; $db->select_db($Config['Database']['Database']); $DbResult = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick`,`ucast`.`role`, `raidy`.`id` AS `IDR` FROM `ucast`,`raidy` LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($ucast = $DbResult->fetch_assoc()) { $guid = str_replace('&', '&', $ucast['IDU']); $nick = str_replace('&', '&', $ucast['nick']); $role = str_replace('&', '&', $ucast['role']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$guid.'</font></td>'. '<td width="125"><font color="#99AACC">'.$nick.'</font></td>'. '<td width="50"><font color="#99AACC">'.$role.'</font></td>'. '</tr>'. '</table>'; } $Output .= '<div class="Center">'.$this->PageList('page_index', $Page, $TotalCount, $Config['Web']['TableRowPerPage'], 10).'</div>'; return($Output); } |
||
Rellik Profil |
#2 · Zasláno: 20. 6. 2011, 18:35:15
No řeknu to asi tak: Do toho while kde vypisuješ ty akce, dej další While který bude vypisovat účastníky podle ID z toho prvního cyklu..
<?php while (){ // výpis z tabulky s akcemi kde získáš ID akce while() { // výpis z tabulky s účastníky WHERE id= získané z předchozího while } } } ?> Aspoň tak nějak sem to řešil já při něčem podobném... |
||
Ladiscz Profil |
#3 · Zasláno: 20. 6. 2011, 19:06:24
No upravil jsem to přibližně tak, jak jsem snad měl, ale teď mi to vypisuje chybu:
Fatal error: Call to a member function fetch_assoc() on a non-object in C:\Program Files\EasyPHP-5.3.2i\www\test\inc\html.php on line 27 $DbResult = $db->query('SELECT * FROM `raidy` ORDER BY `rok` DESC, `mesic` DESC, `den` DESC, `hod` ASC, `min` ASC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($raidy = $DbResult->fetch_assoc()) { $text = str_replace('&', '&', $raidy['text']); $leader = str_replace('&', '&', $raidy['leader']); $raid = str_replace('&', '&', $raidy['raid']); $id = str_replace('&', '&', $raidy['id']); $equip = str_replace('&', '&', $raidy['equip']); $rok = str_replace('&', '&', $raidy['rok']); $mesic = str_replace('&', '&', $raidy['mesic']); $den = str_replace('&', '&', $raidy['den']); $denvtydnu = str_replace('&', '&', $raidy['denvtydnu']); $hod = str_replace('&', '&', $raidy['hod']); $min = str_replace('&', '&', $raidy['min']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$id.'</font></td>'. '<td width="125"><font color="#99AACC">'.$denvtydnu.', '.$den.'.'.$mesic.'.'.$rok.'</font></td>'. '<td width="50"><font color="#99AACC">'.$hod.':'.$min.'</font></td>'. '<td width="170"><font color="#99AACC">'.$raid.'</font></td>'. '<td width="80"><font color="#99AACC">'.$leader.'</font></td>'. '<td width="110"><font color="#99AACC">'.$equip.'</font></td>'. '</tr>'. '</table>'; $DbResult = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE`, `raidy`.`id` AS `IDR` FROM `ucast`, `raidy` WHERE `IDU`=`IDR` LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($ucast = $DbResult->fetch_assoc()) { $guid = str_replace('&', '&', $ucast['IDU']); $nick = str_replace('&', '&', $ucast['NICK']); $role = str_replace('&', '&', $ucast['ROLE']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$guid.'</font></td>'. '<td width="125"><font color="#99AACC">'.$nick.'</font></td>'. '<td width="50"><font color="#99AACC">'.$role.'</font></td>'. '</tr>'. '</table>'; } } |
||
Tori Profil |
#4 · Zasláno: 20. 6. 2011, 19:24:26
Ladiscz:
Na ř.26 si přepisujete proměnnou $DbResult z prvního dotazu. |
||
Ladiscz Profil |
#5 · Zasláno: 20. 6. 2011, 20:17:29
Tori:
Bohužel nevím, jak přesně to mám přepsat.. Pokud tam přepíšu na $DbResult2 = $db2->query... tak mi to na tomtýž řádku vypíše jinou chybu: Fatal error: Call to a member function select_db() on a non-object in C:\Program Files\EasyPHP-5.3.2i\www\test\inc\html.php on line 253 |
||
Tori Profil |
#6 · Zasláno: 20. 6. 2011, 20:21:04
ř.26+27:
$DbResult2 = $db->query(....); while($ucast = $DbResult2->fetch_assoc()) |
||
Ladiscz Profil |
#7 · Zasláno: 20. 6. 2011, 20:29:29
Už to jde, díky...
Nicméně musel jsem smazat z toho posledního SELECTU WHERE `IDU`=`IDR` a v tabulce teď mám správně hlavičku, pod tím název akce atp., ale pod to mi to vypíše všechny účastníky nezávisle na tom, k jakému ID je řadím... $DbResult = $db->query('SELECT COUNT(*) FROM `raidy`' .$Filter); $DbRow = $DbResult->fetch_row(); $TotalCount = $DbRow[0]; $Output = '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><b>ID</b></td>'. '<td width="125"><b>Datum</b></td>'. '<td width="50"><b>Čas</b></td>'. '<td width="170"><b>Raid</b></td>'. '<td width="80"><b>Raid Leader</b></td>'. '<td width="110"><b>Požadovaný EQ</b></td>'. '</tr>'. '</table>'; $DbResult = $db->query('SELECT * FROM `raidy` ORDER BY `rok` DESC, `mesic` DESC, `den` DESC, `hod` ASC, `min` ASC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($raidy = $DbResult->fetch_assoc()) { $text = str_replace('&', '&', $raidy['text']); $leader = str_replace('&', '&', $raidy['leader']); $raid = str_replace('&', '&', $raidy['raid']); $id = str_replace('&', '&', $raidy['id']); $equip = str_replace('&', '&', $raidy['equip']); $rok = str_replace('&', '&', $raidy['rok']); $mesic = str_replace('&', '&', $raidy['mesic']); $den = str_replace('&', '&', $raidy['den']); $denvtydnu = str_replace('&', '&', $raidy['denvtydnu']); $hod = str_replace('&', '&', $raidy['hod']); $min = str_replace('&', '&', $raidy['min']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$id.'</font></td>'. '<td width="125"><font color="#99AACC">'.$denvtydnu.', '.$den.'.'.$mesic.'.'.$rok.'</font></td>'. '<td width="50"><font color="#99AACC">'.$hod.':'.$min.'</font></td>'. '<td width="170"><font color="#99AACC">'.$raid.'</font></td>'. '<td width="80"><font color="#99AACC">'.$leader.'</font></td>'. '<td width="110"><font color="#99AACC">'.$equip.'</font></td>'. '</tr>'. '</table>'; $DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE`, `raidy`.`id` AS `IDR` FROM `ucast`, `raidy` LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($ucast = $DbResult2->fetch_assoc()) { $guid = str_replace('&', '&', $ucast['IDU']); $nick = str_replace('&', '&', $ucast['NICK']); $role = str_replace('&', '&', $ucast['ROLE']); $Output .= '<table class="QuickInfoTable">'. '<tr>'. '<td width="35"><font color="#99AACC">'.$guid.'</font></td>'. '<td width="125"><font color="#99AACC">'.$nick.'</font></td>'. '<td width="50"><font color="#99AACC">'.$role.'</font></td>'. '</tr>'. '</table>'; } |
||
Rellik Profil |
#8 · Zasláno: 20. 6. 2011, 20:44:19
no vypíše ti to všechno, protože si právě u toho $DbResult2 vymazal to WHERE `IDU`=`IDR` - jen to `IDR' musíš změnit za výpis z té první tabulky - $raidy['IDR']
I když popravdě moc se v tomto zápisu kódu nevyznám.. šlo by to celé udělat o moc jednodušej a přehledněj... No ale pokud se v tom vyznáš a funguje to, tak ten výběr už nějak splácáš... Zkus ten řádek 40 vypsat takhle: $DbResult2 = $db->query("SELECT * FROM ucast WHERE IDU=".$raidy['IDR'].""); // to $raidy['IDR'] přejmenuj podle buňky v tabulce, kde máš uloženo to ID akce |
||
Ladiscz Profil |
#9 · Zasláno: 20. 6. 2011, 20:55:41 · Upravil/a: Ladiscz
Pokud to napíšu jako:
$DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE` FROM `ucast` WHERE `IDU`=".$id." ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($ucast = $DbResult2->fetch_assoc()) vyskytne se chyba Fatal error: Call to a member function fetch_assoc() on a non-object in C:\Program Files\EasyPHP-5.3.2i\www\test\inc\html.php on line 2 Pokud jako: $DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE` FROM `ucast` WHERE `IDU`=".$raidy['IDR']." ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); while($ucast = $DbResult2->fetch_assoc()) objeví se: Parse error: syntax error, unexpected T_STRING in C:\Program Files\EasyPHP-5.3.2i\www\test\inc\html.php on line 1 Omlouvám se, opravdu tomu vůbec nerozumím a myslím, že pokud bych se snažil skript zjednodušit, úplně bych ho znefunkčnil |
||
Tori Profil |
#10 · Zasláno: 20. 6. 2011, 20:58:01
$DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE` FROM `ucast` WHERE `IDU`="'.$raidy['IDR'].'" ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); |
||
Rellik Profil |
#11 · Zasláno: 20. 6. 2011, 20:59:38 · Upravil/a: Rellik
Ladiscz:
> Pokud jako: > > 1 > 2 > > $DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE` FROM `ucast` WHERE `IDU`=".$raidy['IDR']." ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); > while($ucast = $DbResult2->fetch_assoc()) > > > objeví se: Protože kombinuješ jednoduché uvozovky s dvojitými... $DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`,`ucast`.`role` AS `ROLE` FROM `ucast` WHERE `IDU`='.$raidy['IDR'].' ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']);[/i] > [i]while($ucast = $DbResult2->fetch_assoc()) EDIT: byl sem pomalejší... :) |
||
Ladiscz Profil |
#12 · Zasláno: 20. 6. 2011, 21:05:16
Děkuji, já jsem na to opravdu levej, pro mě to je uvozovka jako uvozovka =o)
Nicméně další chybička: Fatal error: Call to a member function fetch_assoc() on a non-object in C:\Program Files\EasyPHP-5.3.2i\www\test\inc\html.php on line 254 tedy na řádku while($ucast = $DbResult2->fetch_assoc()) hned pod výše zmiňovaným $DbResult2 ... |
||
Rellik Profil |
#13 · Zasláno: 20. 6. 2011, 21:37:11
Napiš strukturu těch dvou tabulek, něco s tím vymyslíme... ;)
|
||
Tori Profil |
#14 · Zasláno: 20. 6. 2011, 21:38:38 · Upravil/a: Tori
Ladiscz:
Sorry, špatně jsem napsala ten dotaz: $DbResult2 = $db->query('SELECT `ucast`.`guid` AS `IDU`, `ucast`.`nick` AS `NICK`, `ucast`.`role` AS `ROLE` FROM `ucast` WHERE `ucast`.`id_akce` = "'.$raidy['IDR'].'" ORDER BY `IDU` DESC LIMIT '.($Page * $Config['Web']['TableRowPerPage']).', '.$Config['Web']['TableRowPerPage']); Přibližně takhle, ALE: Místo označeného id_akce si doplňte název sloupce v tabulce ucast, který se má shodovat se sloupcem id v tabulce akcí. Nenašla jsem, jak přesně se jmenuje. ↑ Pravda, to bude rychlejší. |
||
Ladiscz Profil |
#15 · Zasláno: 20. 6. 2011, 21:53:17
Tabulka raidy:
-id -raid -equip -leader -text -den -mesic -rok -hod -min -denvtydnu Tabulka ucast: -guid (má se shodovat s id v tabulce raidy) -nick -role |
||
Ladiscz Profil |
#16 · Zasláno: 20. 6. 2011, 21:56:55
Už mi to jde, když jsem to upravil =o)
Děkuju moc všem za vaše úsilí, teď už to snad zvládnu, jste zlatí =o* |
||
Časová prodleva: 13 let
|
0