Diskuze: Výpis dat z databáze + - avatar
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Michal Šmahel:10.3.2015 15:19
Zkopíruj sem svůj dosavadní script, celý ti ho psát nebudu.
K limitu použij LIMIT klauzuli.
http://dev.mysql.com/…/select.html
Rovněž neumím vytvořit script, který by mi vyvolal možnost, aby se
u výběru zobrazil profilový obrázek či nikoli.
Co myslíš tím vyvolal možnost?
Michal Šmahel:10.3.2015 16:13
Tím výběrem asi myslí:
V nějaké stránce má select nebo odkazy na to nebo to a potřebuje podle
výběru vypsat ty články.
Pokud to vypisuješ přes foreach, stačí si jen připravit proměnnou a do té uloží true/false (v tom výběru na té stránce) a při výpisu tam dáš podmínku.
debeneesse:10.3.2015 16:17
Netuším, o jakých článcích mluvíš, psal o profilových obrázích. Nevím.
vanecek.karel:10.3.2015 16:17
Asi jsem to napsal špatně, ale je to samé co píšeš ty. Neumím vytvořit ve scriptu možnost vyvolání profilového obrázku, chci aby byla možnost, že pokud registrovaný návštěvník se bude dívat na registrované jiné uživatele, tak aby si mohl vybrat, zda uvidí 10 posledních uživatelů buď s profilovým obrázkem, či bez profilového obrázku a nebo aby tam byli u deseti posledních uživatelů jak profilové obrázky či nikoli.
<?php
$i=1;
$sql = mysql_query("SELECT * FROM users ORDER BY battles_won DESC, tournaments_won DESC LIMIT 3");
if(mysql_num_rows($sql)>0) {
while($row = mysql_fetch_array($sql)) {
if($i == 1) {
echo '<div class="ranking"> <div class="ranking_1"> </div><div class="ranking_info_top"><span style="font-size:18px;"><b>'.$row[usern].'</b></span><br><br>'.$lang[battles_won].': '.number_format($row[battles_won]).'<br/>'.$lang[won_tournaments].': '.number_format($row[tournaments_won]).'</div></div> ';
} elseif($i == 2) {
echo '<div class="ranking"><div class="ranking_2"></div> <div class="ranking_info_top"><span style="font-size:18px;"><b>'.$row[usern].'</b></span><br><br>'.$lang[battles_won].': '.number_format($row[battles_won]).'<br/>'.$lang[won_tournaments].': '.number_format($row[tournaments_won]).'</div></div> ';
} elseif($i == 3) {
echo '<div class="ranking"><div class="ranking_3"></div> <div class="ranking_info_top"><span style="font-size:18px;"><b>'.$row[usern].'</b></span><br><br>'.$lang[battles_won].': '.number_format($row[battles_won]).'<br/>'.$lang[won_tournaments].': '.number_format($row[tournaments_won]).'</div></div> ';
} else {
echo '<div class="ranking"><div class="ranking_info"><span style="font-size:18px;"><b>'.$row[usern].'</b></span><br><br>'.$lang[battles_won].': '.number_format($row[battles_won]).'<br/>'.$lang[won_tournaments].': '.number_format($row[tournaments_won]).'</div></div>';
}
$i++;
}
}
?>
Důležitá je jedna věc, neuč se používat zastaralé příkazy a je jedno jestli jde o mysql_~, nebo cokoliv jiného. Nikdy ti to k ničemu nebude a nakonec se stejně budeš muset naučit používat novější metody. Nejen že to je zastaralé, ale taky ne zrovna bezpečné. Takže doporučuju mysqli a ještě lépe PDO. U tvého příkladu používaš inkrementaci nějakého integeru, ale proč? Teda chci říct, já to chápu, ale můžeš na to jít jednodušeji. Když chvilku vydržíš a někdo mě nepředběhne, tak ti pošlu kód, musím se na chvíli vzdálit.
Tak tento kód by tě mohl nasměrovat, ale samozřejmě si ho uprav podle představ:
<?php
function getTopUsers($conn, $limit, $profile_pics) {
$lang['user'] = "Uživatel";
$lang['battles_won'] = "Vyhrané bitvy";
$lang['won_tournaments'] = "Vyhrané turnaje";
$sql = "SELECT usern, battles_won, tournaments_won FROM users ORDER BY battles_won DESC, tournaments_won DESC LIMIT $limit";
$result = $conn->query($sql);
$i=1;
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo '<div class="user-box">' . "\n\t";
if ($profile_pics === true) {
echo '<div class="profile-pic">fotka uzivatele na ' . $i . '. místě</div>' . "\n\t";
}
echo '<div class="ranking';
if (($i >= 1) && ($i <= 3)) { echo ' ranking-info-top'; }
if ($i === 1) { echo ' ranking-1'; }
else if ($i === 2) { echo ' ranking-2'; }
else if ($i === 3) { echo ' ranking-3'; }
else { echo ' ranking-info'; }
echo '">' . "\n\t\t";
echo $lang['user'] . ': ' . $row['usern'] . '<br />' . $lang['battles_won'] . ': ' . number_format($row['battles_won']) . '<br/>' . $lang['won_tournaments'] . ': ' . number_format($row['tournaments_won']);
$i++;
echo "\n\t" . '</div>' . "\n" . '</div>' . "\n";
}
} else {
echo "žádný uživatel";
}
}
$conn = new mysqli("localhost", "root", "asdf", "database_name");
$limit = 4;
$profile_pics = true;
getTopUsers($conn, $limit, $profile_pics);
Nakonec jsem tam nechal ten inkrement, ale šlo by to řešit ještě jinak.
Zkoušel sem upravit kód stránky tak jak ji potřebuji ve finálové podobě, ovšem problém v tom, že právě nevím jak vložit možnost zobrazit profil buď s avatarem či bez avataru a zároveň umožnit výpis jen 10ti nových členů.
<?php
class Memberscontroller{
private $registry;
private $model;
public function __construct( Registry $registry, $directCall )
{
$this->registry = $registry;
$urlBits = $this->registry->getObject('url')->getURLBits();
if( isset( $urlBits[1] ) )
{
switch( $urlBits[1] )
{
case 'list':
$this->listMembers( intval( $urlBits[2] ) );
break;
case 'alpha':
$this->listMembersAlpha( $urlBits[2] , intval( isset( $urlBits[3] ) ? $urlBits[3] : 0 ) );
break;
case 'search':
$this->searchMembers( true, '', 0 );
break;
case 'search-results':
$this->searchMembers( false, $urlBits[2] , intval( isset( $urlBits[3] ) ? $urlBits[3] : 0 ) );
break;
default:
$this->listMembers(0);
break;
}
}
else
{
$this->listMembers( 0 );
}
}
private function listMembers( $offset )
{
require_once( FRAMEWORK_PATH . 'models/members.php');
$members = new Members( $this->registry );
$pagination = $members->listMembers( $offset );
if( $pagination->getNumRowsPage() == 0 )
{
$this->registry->getObject('template')->buildFromTemplates('header.php', 'members/invalid.php', 'footer.php');
}
else
{
$this->registry->getObject('template')->buildFromTemplates('header.php', 'members/list.php', 'footerphp');
$this->registry->getObject('template')->getPage()->addTag( 'members', array( 'SQL', $pagination->getCache() ) );
$this->registry->getObject('template')->getPage()->addTag( 'letter', '' );
$this->registry->getObject('template')->getPage()->addTag( 'page_number', $pagination->getCurrentPage() );
$this->registry->getObject('template')->getPage()->addTag( 'num_pages', $pagination->getNumPages() );
if( $pagination->isFirst() )
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '');
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/list/'>První stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'následující', "<a href='members/list/" . ( $pagination->getCurrentPage() - 2 ) . "'>Předchozí stránka</a>" );
}
if( $pagination->isLast() )
{
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'následující', "<a href='members/list/" . $pagination->getCurrentPage() . "'>Další stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/list/" . ( $pagination->getNumPages() - 1 ) . "'>Poslední stránka</a>" );
}
$this->formRelationships();
}
}
private function listMembersAlpha( $alpha='A', $offset=0 )
{
require_once( FRAMEWORK_PATH . 'models/members.php');
$members = new Members( $this->registry );
$pagination = $members->listMembersByLetter( $alpha, $offset );
if( $pagination->getNumRowsPage() == 0 )
{
$this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'members/invalidphp', 'footer.php');
}
else
{
$this->registry->getObject('template')->buildFromTemplates('header.php', 'members/list.php', 'footer.php');
$this->registry->getObject('template')->getPage()->addTag( 'members', array( 'SQL', $pagination->getCache() ) );
$this->registry->getObject('template')->getPage()->addTag( 'letter', " - Písmeno: " . $alpha );
$this->registry->getObject('template')->getPage()->addTag( 'page_number', $pagination->getCurrentPage() );
$this->registry->getObject('template')->getPage()->addTag( 'num_pages', $pagination->getNumPages() );
if( $pagination->isFirst() )
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '');
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/alpha/".$alpha."/'>První stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'následující', "<a href='members/alpha/".$alpha."/" . ( $pagination->getCurrentPage() - 2 ) . "'>Předchozí stránka</a>" );
}
if( $pagination->isLast() )
{
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'následující', "<a href='members/alpha/".$alpha."/" . $pagination->getCurrentPage() . "'>Další stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/alpha/".$alpha."/" . ( $pagination->getNumPages() - 1 ) . "'>Poslední stránka</a>" );
}
}
}
private function searchMembers( $search=true, $name='', $offset=0 )
{
require_once( FRAMEWORK_PATH . 'models/members.php');
$members = new Members( $this->registry );
if( $search == true )
{
$pagination = $members->filterMembersByName( urlencode( $_POST['name'] ), $offset );
$name = urlencode( $_POST['name'] );
}
else
{
$pagination = $members->filterMembersByName( $name, $offset );
}
if( $pagination->getNumRowsPage() == 0 )
{
$this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'members/invalid.php', 'footer.php');
}
else
{
$this->registry->getObject('template')->buildFromTemplates('header.php', 'members/search.php', 'footer.php');
$this->registry->getObject('template')->getPage()->addTag( 'members', array( 'SQL', $pagination->getCache() ) );
$this->registry->getObject('template')->getPage()->addTag( 'public_name', urldecode( $name ) );
$this->registry->getObject('template')->getPage()->addTag( 'encoded_name', $name );
$this->registry->getObject('template')->getPage()->addTag( 'page_number', $pagination->getCurrentPage() );
$this->registry->getObject('template')->getPage()->addTag( 'num_pages', $pagination->getNumPages() );
if( $pagination->isFirst() )
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '');
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/search-results/".$name."/'>První stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'následující', "<a href='members/search-results/".$name."/" . ( $pagination->getCurrentPage() - 2 ) . "'>Předchozí stránka</a>" );
}
if( $pagination->isLast() )
{
$this->registry->getObject('template')->getPage()->addTag( 'následující', '' );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', '' );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'nádsledující', "<a href='members/search-results/".$name."/" . $pagination->getCurrentPage() . "'>Další stránka</a>" );
$this->registry->getObject('template')->getPage()->addTag( 'předchozí', "<a href='members/search-results/".$name."/" . ( $pagination->getNumPages() - 1 ) . "'>Poslední stránka</a>" );
}
}
}
private function formRelationships()
{
if( $this->registry->getObject('authenticate')->isLoggedIn() == true )
{
require_once( FRAMEWORK_PATH . 'models/relationships.php');
$relationships = new Relationships( $this->registry );
$types = $relationships->getTypes( true );
$this->registry->getObject('template')->addTemplateBit( 'form_relationship', 'members/form_relationship.php');
$this->registry->getObject('template')->getPage()->addPPTag( 'relationship_types', array( 'SQL', $types ) );
}
else
{
$this->registry->getObject('template')->getPage()->addTag( 'form_relationship', '' );
}
}
}
?>
debeneesse:11.3.2015 0:10
No, když se tak dívám na tvůj kód, tak teda to si měl říct hned, že to máš určené pro nějakou architekturu, tím pádem je můj kód prakticky nepoužitelný, protože neznám její charakter/aspekty, třídy a metody... Ale něco mně říká, že pokud si jej neumíš poupravit tak, abys jej do ní dostal, tak to můžeš rovnou vzdát, přečíst si tu něco o MVC architektuře, příp. i zajít na https://www.youtube.com/watch?… pokud umíš anglicky a teprve až pochopíš její účel a to, jak pracuje, tak můžeš dále stažený framework rozvíjet...
Zobrazeno 11 zpráv z 11.