| 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: 15 let
|
|||
0