Autor Zpráva
mirio
Profil
Ahoj,

chtěl jsem se zeptat. Mám klasické komentáře pod článkem, ve formuláři mám povinné jen pole "Jméno" a "Vlastní komentář", ale samozřejmě tam mám pole "e-mail" a "web".

O co mi jde?

Na "jméno" mám navázaný mail a pod slovem "web" se mi zobrazuje url přispívajícího. Problém je v tom, že když mi přispivatel nevyplní mail a web, obě položky ("jméno" a "web") zůstanou samozřejmě ativní (mailto:, a href...). Chtěl bych ale udělat, aby se mi v tomto případě "jméno" zobrazilo pouze jako text a "web" se nezobrazil vůbec. Rozumíte? Jak ale na to, že? Klidně mě jen nakopněte, rád se učím... :-)

Dík všem.

Mirio
nightfish
Profil
bez kódu, který vypisuje ty komentáře to úplně přesně napsat nepůjde, nicméně:

<?php
//předpokládám následující proměnné: $jmeno, $komentar, $email, $web

echo $jmeno;
if (!empty($email)) echo " <a href=\"mailto:$email\">mail</a>";
if (!empty($web)) echo " <a href=\"$web\">web</a>";
echo "$komentar";
?>
mirio
Profil
...
mirio
Profil
nightfish: To Tvé řešení je mnohem hezčí, použiju to, díky!!!
mirio
Profil
Tak nemám, začal jsem se v tom ztrácet, tady je kód, jakým vypisuju komentáře, ale nějak tam tu podmínku nemůžu zapracovat, buď to nevypíše ani web ani jméno s mailem vůbec nebo to hodí chybu. Co dělám špatně (tohle je samozřejmě původní kód bez podmínky)?

$s = mysql_query("SELECT * FROM komentare WHERE idclanku = $id ORDER BY ncas ASC");

if(mysql_num_rows($s)!=0):
while($e = mysql_fetch_array($s)):

echo "<div class='komentar' id='komentar-";
echo $e["idkomentare"];
echo "'>";
echo "<p class='komentar_hlavicka'>";
echo "[";
echo "<a title='Trvalý odkaz na komentář' href='#komentar-";
echo $e["idkomentare"];
echo "'>";
echo $e["idkomentare"];
echo "</a>";
echo "]&nbsp;";
echo "<a href='mailto:";
echo $e["email"];
echo "'>";
echo $e["jmeno"];
echo "</a> - <a href='";
echo $e["url"];
echo "'>";
echo "web";
echo "</a> <em>(";
echo date("j. " . "m. " . "Y, " . "H:i:s", $e["ncas"]);
echo ")</em> : ";
echo $e["predmet"];
echo "<p class='komentar_text'>";
echo $e["text"];
echo "</p>";
echo "</div>";

endwhile;
endif;
mirio
Profil
Nevím, jestli jsem tu předchozí otázku nepoložil špatně. Tak znova...

Jakým způsobem zapracuji tu podmínku, kterou mi tady nabídl nightfish do mého kódu, kterým vypisuji komentáře?

Děkuju za odpověď, nemůžu se hnout z místa.
k
Profil *
f(mysql_num_rows($s)!=0){
while($e = mysql_fetch_array($s)){

echo "<div class='komentar' id='komentar-".$e["idkomentare"]."'><p class='komentar_hlavicka'>[";
echo "<a title='Trvalý odkaz na komentář' href='#komentar-".$e["idkomentare"]."'>".$e["idkomentare"]."</a>]&nbsp ;";

echo (!empty($e['email']) ? "<a href='mailto:".$e["email"]. "'>".$e["jmeno"]."</a>"; : $e['jmeno'];)
echo (!empty($e['url']) ? " - <a href='".$e["url"]."'>web</a> "; : "neni url";)

echo "<em>(".date("j. " . "m. " . "Y, " . "H:i:s", $e["ncas"]).")</em> : ";
echo $e["predmet"]."<p class='komentar_text'>".$e["text"]."</p></div>";

}
}
mirio
Profil
Tak se přiznám, že v tomto zápisu totálně tápu. Mám z toho udělat fci? To asi nepůjde, protože už tohle je fce, ale je má chyba, že jsem to tady nevypsal celé. Koukneš na to znova? Takhle je to v plné verzi:

function komentare($id){

$s = mysql_query("Select * from komentare where idclanku = $id order by ncas asc");

if(mysql_num_rows($s)!=0):
while($e = mysql_fetch_array($s)):

echo "<div class='komentar' id='komentar-";
echo $e["idkomentare"];
echo "'>";
echo "<p class='komentar_hlavicka'>";
echo "[&nbsp;";
echo "<a title='Trvalý odkaz na komentář' href='#komentar-";
echo $e["idkomentare"];
echo "'>";
echo $e["idkomentare"];
echo "</a>";
echo "&nbsp;]";
echo "\r\n";
echo "<a href='mailto:";
echo $e["email"];
echo "'>";
echo $e["jmeno"];
echo "</a> - <a href='";
echo $e["url"];
echo "'>";
echo "web";
echo "</a> <em>(";
echo date("j. " . "m. " . "Y, " . "H:i:s", $e["ncas"]);
echo ")</em> : ";
echo $e["predmet"];
echo "\r\n";
echo "<p class='komentar_text'>";
echo $e["text"];
echo "</p>";
echo "\r\n";
echo "</div>";
echo "\r\n";

endwhile;
endif;

}
k
Profil *
function komentare($id){

$s = mysql_query("Select * from komentare where idclanku = $id order by ncas asc");

if(mysql_num_rows($s)!=0){
while($e = mysql_fetch_array($s)){

echo "<div class='komentar' id='komentar-".$e["idkomentare"]."'><p class='komentar_hlavicka'>[";
echo "<a title='Trvalý odkaz na komentář' href='#komentar-".$e["idkomentare"]."'>".$e["idkomentare"]."</a>]&nbsp ;";

echo (!empty($e['email']) ? "<a href='mailto:".$e["email"]. "'>".$e["jmeno"]."</a>"; : $e['jmeno'];)
echo (!empty($e['url']) ? " - <a href='".$e["url"]."'>web</a> "; : "neni url";)

echo "<em>(".date("j. " . "m. " . "Y, " . "H:i:s", $e["ncas"]).")</em> : ";
echo $e["predmet"]."<p class='komentar_text'>".$e["text"]."</p></div>";

}
}

}

Jestli chces vyuzivat funkce tak si precti neco o OOP. Predpokladam ze pak mas nekde naky cyklus kterym te fci predavas id-cka -- kdybych byl ucitel a tys mi tenhle zapis ukazal tak neprojdes do dalsiho roku.
nightfish
Profil
mirio
k to s největší pravděpodobností napsal dobře, akorát to trochu zhustil a upravil...
prostě když v tom svém smažeš všechno od if(mysql_num_row... až po endif; (samozřejmě si to nejdřív někam zazálohuješ), doplníš na stejné místo kompletní kód od k, tak by to mělo fungovat

PS: ještě je potřeba na začátek toho kopírovaného kódu doplnit "i" (má být if, je jen f)...

EDIT: pozdě
mirio
Profil
k:
Chtělo to jen maličké úpravy, jinak to házelo chyby, ale teď už to funguje perfektně.

Jestli chces vyuzivat funkce tak si precti neco o OOP. Predpokladam ze pak mas nekde naky cyklus kterym te fci predavas id-cka -- kdybych byl ucitel a tys mi tenhle zapis ukazal tak neprojdes do dalsiho roku.

Víš, pro mě jsou fóra, jako je toto neocenitelné, bez Vaší pomoci bych se ještě dlouho nehnul. Já se vše učím jen tak, z ničeho (z internetu). Ten zápis, který jsem použil, jsem si někde přečetl a proto ho začal používat. Prostě metoda pokus/omyl. Proto jsem moc rád, za Vaše rady, protože učit se tyhle věci mě opravdu baví. Děkuju.


nightfish:
Tobě taky moc děkuju za rady. Určitě se tady ještě setkáme. Už teď přemýšlím, jak udělat u komentářů reakce na ně (do tabulky přidám něco jako rodičovské_id a.. ...zkusím nad tím podumat :-) ), takže když už budu opravdu v koncích, napíšu si zase nesměle o radu.

Tady je ten kód, už funkční, pokud někdo bude chtít:

function komentare($id){

$s = mysql_query("Select * from komentare where idclanku = $id order by ncas asc");

if(mysql_num_rows($s)!=0){
while($e = mysql_fetch_array($s)){

echo "<div class='komentar' id='komentar-".$e["idkomentare"]."'><p class='komentar_hlavicka'>[&nbsp;";
echo "<a title='Trvalý odkaz na komentář' href='#komentar-".$e["idkomentare"]."'>".$e["idkomentare"]."</a>&nbsp; ]&nbsp;";

echo (!empty($e['email']) ? "<a href='mailto:".$e["email"]."'>".$e["jmeno"]."</a>" : $e['jmeno']);
echo "&nbsp;";
echo (!empty($e['url']) ? "<a href='".$e["url"]."'>web</a> " : "");

echo "<em>(".date("j. " . "m. " . "Y, " . "H:i:s", $e["ncas"]).")</em> : ";
echo $e["predmet"]."<p class='komentar_text'>".$e["text"]."</p></div>";

}
}

}
nightfish
Profil
k
Jestli chces vyuzivat funkce tak si precti neco o OOP. Predpokladam ze pak mas nekde naky cyklus kterym te fci predavas id-cka -- kdybych byl ucitel a tys mi tenhle zapis ukazal tak neprojdes do dalsiho roku.
můžeš zkusit osvětlit, co je na uvedeném kódu/způsobu kódování špatného? rád bych to věděl...
k
Profil *
nightfish
Jestli chces vyuzivat funkce tak si precti neco o OOP. Predpokladam ze pak mas nekde naky cyklus kterym te fci predavas id-cka -- kdybych byl ucitel a tys mi tenhle zapis ukazal tak neprojdes do dalsiho roku.
Mel jsem namysli i ten kod co jsem mu napsal ja. Z hlediska OOP je reseni "volat z cyklu fci ktere predavam idcko a ona vse udela" docela dost spatne. Spis by ta fce mela vratit celkove pole s hodnotama a ty si v cyklu vypsat. Typu $celkovepole=$clanky->GetKomentare(); a pak foreach($celkovepole ...) a vypisovat. Tak jsem to myslel.
k
Profil *
mirio
jsem rad ze jsis sam vsiml tech stredniku a opravil je. Nemam rad kdyz nekdo jen kopiruje a pak sem pise ze to nefunguje ze to hazi chybu;)
mirio
Profil
k:
jsem rad ze jsis sam vsiml tech stredniku a opravil je. Nemam rad kdyz nekdo jen kopiruje a pak sem pise ze to nefunguje ze to hazi chybu;)

Já taky ne. :-)

Jinak co se týká těch idček, já je tam normálně otrocky valím ručně, protože to je jediný způsob, na který jsem přišel o "Objektově Orientovaném Programování" nevím vůbec nic. Takže to dělám takto:

<?
$id=1;
require "komentare.php";
komentare($id);
?>

To mi ale bohužel, zabraňuje v tom mít stránky generované přímo z DB, musím mít každou zvlášť a přiřadím id ručně, nebo se mýlím?
k
Profil *
mylis se. Pokud generujes stranky tak ze mas text v db, tak prece napred musis vedet id clanku ktery chces vytahnout a to same id budes mit i u komentaru.
K OOP clovek dojde casem, hlavne pokud se chce programovani vic venovat,nebo se tim zivit. Ale, ver mi, mnohonasobne to usnadnuje a zrychluje praci.
mirio
Profil
Takhle, možná že jsem se špatně vyjádřil, zase.

Musím ale přece vždy mít nějakou "základní" stránku, ze které si zavolám skript, pomocí kterého vypíšu text nějakého článku z DB. Zase tímhle...

<?
$id=1;
require "clanek.php";
clanek($id);
?>

...otrockým způsobem. A tu stránku pak musím mít uloženou na serveru, protože jinak bych se na ni už nedostal (čili něco jako ruční permalink :-) ). Nebo by to šlo přes id a url? Fakt nevím...
k
Profil *
To jde jednoduse za url das ?id=1 (takze: url.php?id=1) a ve skriptu budes mit $id=$_POST['id'];
mirio
Profil
Aha, tak nějak jsem to myslel. Nebudu teď odbíhat od tématu, které dělám tj. komentáře, ale pak na to určitě kouknu a s největší pravděpodobností se tady na fóru s nějakým dotazem objevím. :-)

Děkuju moc!
Toto téma je uzamčeno. Odpověď nelze zaslat.

0