Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Autor | Správa |
---|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
cavte mam problém...
Tu je kód:
Kód: $sql = "SELECT * FROM aktuality ORDER by id DESC"; $sql1 = "SELECT * FROM komentare ORDER by id DESC";
$result = mysql_query($sql, $connect); $result1 = mysql_query($sql1, $connect);
while ($vypis=mysql_fetch_array($result))
{
echo "".$vypis["nadpis"]." <u>".$vypis["datum"]."</u> <>"; echo "".$vypis["text"]."<br>"; echo "komentáre : ".mysql_num_rows($result1) ; echo "<br>";
while ($vypis1=mysql_fetch_array($result1)) { echo "".$vypis1["komentár"]."<br>"; } }
Vysvetlenie:
Mám dve tabuľky - aktuality a komentare.
Na webe by sa mi mali zobrazovat aktuality podla najväčšieho ID
Pod tým ma byť napísané "komentáre: -pocet komentarov-"
a pod tým maju byt komentare.
Pri tomto kode co som tu dal, sa tieto komentare zobrazuju iba pri prvej novinke, pri dalsich uz nie. Mohli by ste mi pls povedat, co tam je chybne, ked chcem, aby tie komentare sa zobrazovali pod kazdu aktualitu ?
Viem, ze kod je velmi na .... a neformatovany, ale chcem zatial iba neformatovanu verziu.
Ktore komentare ku ktorej novinke patria si vyriesim sam ...
ďakujem za každú radu.
|
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
1.) vyberať aktuality podľa najvyšieho id je blbosť. Ak budeš chcieť napríklad upraviť aktualitu a znovu zverejniť na prvom mieste, nebude stačiť upraviť dátum, ale aj id => vyberaj podľa dátumu! 2.) tie komentáre sa ti zobrazia len pod prvou aktualitou, pretože ich vyberieš naraz všetky. Takže pod prvou aktualitou budeš mať komentáre zo všetkých aktualít. Musíš k tomu dopísať nejaké pravidlo výberu - to čo chceš vyriešiť sám. 3.) prečo vlastne zobrazuješ komentáre v zozname aktualít. Nebolo by lepšie zobraziť komentáre len pri detaile konkrétnej aktuality?
Ak ale teda chceš v tom zozname vypisovať aj komentáre, urob to nejako takto, že každý komentár má v tabuľke aj id aktuality, ku ktorej je priradený. Tak výber bude vyzerať takto: Kód: $sql = "SELECT * FROM aktuality ORDER by id DESC"; $result = mysql_query($sql, $connect);
while ($vypis=mysql_fetch_array($result)) {
echo $vypis["nadpis"]." <u>".$vypis["datum"]."</u> <>"; echo $vypis["text"]."<br>"; echo "komentáre : ".mysql_num_rows($result1) ; echo "<br>";
$sql1 = "SELECT * FROM komentare WHERE aktualita_id = '".$vypis["id"]."' ORDER by id DESC"; $result1 = mysql_query($sql1, $connect); while ($vypis1=mysql_fetch_array($result1)) { echo "".$vypis1["komentár"]."<br>"; } } Tento kód predpokladá, že v tabuľke aktualít je aj stĺpec id, ktoré má každá aktualita unikátne a dané id je priradené ku komentáru. Tak potom vyberieš len komentáre patriace k článku pomocou aktualita_id = '".$vypis["id"]."'
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
tak predsa ...
SELECT na aktuality
nasleduje spraocvanie a vypisanie vo while a tam DRUHY SELECT ale uz aj s konkretnym ID, spracovanie koniec druheho a prveho while
|
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
- hm, zobrazovanie komentárov som chcel riesit cez JS, kde ked kliknem na
Komentare:(cislo) tak sa mi roztvorí stránka s komentarmi,
- ja som myslel, ze ked nedam podmienku pre zobrazovanie komentarov (pre ktoru novinku) som myslel, ze tieto komentare sa u kazdej novinke zobrazia...
- pri prvej novinke, kde pise pocet komentarov, sa mi zobrazi upozornenie, ktore upozornuje na nevalidny parameter mysql_num_rows(), ale pri dalsich novinkach sa zobrazi uz dobre ...
ked som riadok
Kód: $result1 = mysql_query($sql1, $connect); skopiroval pod premenu $result, uz sa zobrazuje bez chyby, ale napise pocet komentarov 0, aj ked tam nejake komentare su a aj ich vypise //EDIT: ok, po rozmyslani som prisiel na tento kód: Kód: $sql = "SELECT * FROM aktuality ORDER by id DESC"; $result = mysql_query($sql, $connect);
while ($vypis=mysql_fetch_array($result)) {
echo $vypis["nadpis"]." <u>".$vypis["datum"]."</u> <>"; echo $vypis["text"]."<br>"; $sql_1 = "SELECT Count(*) as pocet FROM komentare WHERE id = '".$vypis["id"]."' "; $result_1 = mysql_query($sql_1, $connect); while ($vypis_1=mysql_fetch_array($result_1)) { echo " Počet záznamov:".$vypis_1["pocet"]."";
} echo "<br>"; $sql1 = "SELECT * FROM komentare WHERE id = '".$vypis["id"]."' ORDER by id DESC"; $result1 = mysql_query($sql1, $connect); while ($vypis1=mysql_fetch_array($result1)) { echo "".$vypis1["text"]."<br><hr>"; } }
co hovorite na tento kod ?
|
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
...o relacnych databazach nechyrovali ?
alebo alternativa na dva SQL dopyty...
Citácia: SELECT * FROM komentare ORDER BY aktualita_id DESC; SELECT * FROM aktuality;
...a uz len v cykle for vypisat zaradom...
|
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
hm, poradite mi este v niecom ?
mam odkaz komentar.php?com=[id_novinky]
v komenatr.php mam toto tu:
Kód: include ('config.php');
$id_novinky = addslashes($_GET['com']); $napisal = htmlspecialchars($_POST['napisal']); $komentar = htmlspecialchars($_POST['komentar']); $datum = date("d. m. Y - G:i:s");
if ($komentar == "" || $napisal == "" ):
echo "<center>Vyplnte vsetky políčka <br><br>"; else:
$connect = mysql_connect($ip, $user, $pass) or die ("Spojenie so serverom nebolo úspešné"); mysql_select_db($realmd, $connect) or die ("Nepodarilo se spojiť s databázou "); mysql_query("SET NAMES 'cp1250'");
$sql = "INSERT INTO komenty (id_novinky, napisal, komentar, datum) VALUES ('$id_novinky', '$napisal', '$komentar', '$datum')"; mysql_query($sql, $connect);
echo "Prave ste odoslali komentar ...";
mysql_close(); endif;
// tu dalej je uz iba formular pre premenu napisal a komentar
premenná $id_novinky funguje vsade okrem tej podmienky(kde musi vyplnit urcite plicka) po endif ...
ako urobim, aby tá premennná tam fungovala ? Lebo takto sa mi nechce zapisat do stlpca id_novinky
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
no tak ja by som ID_novinky preveroval cez is_numeric()
A k problému odstráň úvodzovky pri ID_novinky lebop je to typ int ...
|
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
ake uvodzovky mam pri ID_novinky ?
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
' .. myslím v SQL dopyte
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Tominator píše: no tak ja by som ID_novinky preveroval cez is_numeric() Mne sa ale zda, ze to, co sa vybera z $_GET, je vzdy string. Cize to ti nepomoze. To znamena radsej pouzit nieco ine...preg_match('/^[0-9]+$/D',$_GET['com']) napriklad?
|
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
Tominator - hm, ale tymto predsa nic nevyriesim ...
Kód: include ('config.php');
$id_novinky = addslashes($_GET['com']); $napisal = htmlspecialchars($_POST['napisal']); $komentar = htmlspecialchars($_POST['komentar']); $datum = date("d. m. Y - G:i:s");
// echo "$id_novinky"; - vypise sa to ID
if ($komentar == "" || $napisal == "" ):
// echo "$id_novinky"; - nevypise sa to ID echo "<center>Vyplnte vsetky políčka <br><br>"; else:
// echo "$id_novinky"; - nevypise sa to ID
$connect = mysql_connect($ip, $user, $pass) or die ("Spojenie so serverom nebolo úspešné"); mysql_select_db($realmd, $connect) or die ("Nepodarilo se spojiť s databázou "); mysql_query("SET NAMES 'cp1250'");
$sql = "INSERT INTO komenty (id_novinky, napisal, komentar, datum) VALUES ('$id_novinky', '$napisal', '$komentar', '$datum')"; mysql_query($sql, $connect);
echo "Prave ste odoslali komentar ...";
mysql_close(); endif;
// echo "$id_novinky"; - vypise sa to ID
// tu dalej je uz iba formular pre premenu napisal a komentar
a proste, tam kde je napisane "nevypise sa to ID", chcem aby vypisalo to ID ... lebo ked nevypise cez echo, predsa sa ani nezapise do DB ...
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
kde kontrolujes, ci bol formular odoslany? mas zapnute zobrazovanie vsetkych chyb?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
hm, nestaci
Kód: if ($komentar == "" || $napisal == "" ):
echo "<center>Vyplnte všetky políčka <br><br>";
else:
Nestačí tak ??
ved ked bude aspon jedna s týchto dvoch premennych prázdna, predsa sa vráti k formuláru a neodošle ho ...
A ked budu vyplnene obidva políčka, pojde dalej, kde je pripojenie k mysql a pod ...
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Ked prides prvykrat na stranku, tak POST premenna este neobsahuje ziadne udaje a ty uz s nimi tak povediac ratas... to iste plati aj pre $id_novinky, treba jej hodnotu poriadne skontrolovat, ale to si uz doplnis hadam sam...
Vyskusaj nasledujuci kod:
Kód: <?php include ('config.php');
if(!empty($_POST)) { $id_novinky = !empty($_GET['com']) ? addslashes($_GET['com']) : ""; $napisal = !empty($_POST['napisal']) ? htmlspecialchars($_POST['napisal']) : ""; $komentar = !empty($_POST['komentar']) ? htmlspecialchars($_POST['komentar']) : ""; $datum = date("d. m. Y - G:i:s");
if($komentar == "" || $napisal == "" ) { echo "<center>Vyplnte vsetky políčka <br><br>"; } else { $connect = mysql_connect($ip, $user, $pass) or die ("Spojenie so serverom nebolo úspešné"); mysql_select_db($realmd, $connect) or die ("Nepodarilo se spojiť s databázou "); mysql_query("SET NAMES 'cp1250'");
$sql = "INSERT INTO komenty (id_novinky, napisal, komentar, datum) VALUES ('$id_novinky', '$napisal', '$komentar', '$datum')"; mysql_query($sql, $connect); mysql_close($connect); } } ?>
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 04.12.07 Prihlásený: 05.11.15 Príspevky: 347 Témy: 51 | 51 Bydlisko: Internet |
Mám jednu otázku:
Tu čo som rozpísal zdrojový kód, zapamätanie ID novinyk mám cez GET.
Keďže GET sa zobrazí na adrese, nerád by som to použil.
Skúšal som cez SESSION, ale v pohode mi to zapíše, ale sa to vždy zapamätá ta hodnota.
Napr. mám dve novinky, s ID 1 a ID 2.
Kliknem pridať komentár na novinku s ID1, v pohode sa mi zapíše.
Keď vyplnil úspešne odoslal, mam tam príkaz na vyprázdnenie toho SESSION, a ked kliknem na novinku s ID2, ulozí sa mi, ze komentár písem pre novinku s ID1.
Da sa urobit aj iným sposobom, ked chcem, aby si pamätalo novinku s daným ID ?? Alebo upravit nejako cez ten Session ?
|
|
Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
|