Új komment megjelenítése frissítés nélkül
Sziasztok
Hozzászólok valamihez, és szeretném ha az új hozzászólás egyből megjelenne frissítés nélkül.
Ez most végülis meg is van, annyi gond van vele, hogy nem jó helyre rakja ki(legalulra most), és formázatlan. Mutatom hozzá a dolgokat. Köszönöm előre is a segítséget.
A form:AjaxÉs a feldolgozó php, ami kirakja az újat isAmi az utolsó kommentet kirakja, az abban az if-ben van ami ellenőrzi, hogy sikerült e az insert.
■ Hozzászólok valamihez, és szeretném ha az új hozzászólás egyből megjelenne frissítés nélkül.
Ez most végülis meg is van, annyi gond van vele, hogy nem jó helyre rakja ki(legalulra most), és formázatlan. Mutatom hozzá a dolgokat. Köszönöm előre is a segítséget.
A form:
if(isset($_SESSION['user_logged_in']))
{
echo '<form id="kommentForm" method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<input type="hidden" value='.$dog_id.' id="dog_id" />';
echo '<textarea name="dog_komment" id="dog_komment"></textarea>';
echo '<input type="button" id="addKomment" value="Hozzászólok" />';
echo '</form>';
}
$('#addKomment').click(function()
{
if($('#dog_komment').val() != "")
{
var kommentSzoveg = $('#dog_komment').val();
var dog_id = $('#dog_id').val();
$.ajax
({
type: 'POST',
url: 'files/add_komment.php',
data: { komment:kommentSzoveg, id:dog_id },
cache: 'false',
beforeSend: function()
{
$('#addKomment').val('Pillanat..').attr('disabled', 'disabled');
},
success: function(data)
{
$('#kommentForm')[0].reset();
$('#addKomment').val('Hozzászólok').removeAttr('disabled');
$('#dog_komment').css('height', 40+px);
$('.komment_box').append(data);
$('.komment:last').fadeIn('slow');
},
error: function(e)
{
alert(e);
}
});
return false;
}
});
<?php
session_start();
include_once("connect.php");
$hiba = "";
$komment = mysqli_real_escape_string($kapcs, $_POST['komment']);
$id = intval($_POST['id']);
$ido = date("Y-m-d-H:i");
$user_nev = $_SESSION['user_logged_in']['vezeteknev'].' '.$_SESSION['user_logged_in']['keresztnev'];
if(empty($komment))
{
$hiba = "Nem írt semmit a hozzászólás mezőbe.";
}
if(strlen($komment) > 5000 )
{
$hiba = "A hozzászólása maximum 5000 karakter legyen.";
}
if($hiba == "")
{
$addKomment = mysqli_query($kapcs, "INSERT INTO dog_komment(user,kutya,hozzaszolas,mikor,user_nev)
VALUES('".$_SESSION['user_logged_in']['id']."','".$id."','".$komment."','".$ido."', '".$user_nev."')") or die(mysqli_error($kapcs));
$last_id = mysqli_insert_id($kapcs);
echo '<div class="komment" id="komment_box_'.$last_id.'">';
if($_SESSION['user_logged_in']['thumb'] != "")
{
echo '<a href="profil?user='.$_SESSION['user_logged_in']['id'].'" title="">';
echo '<img class="no_image" src="images/user/'.$_SESSION['user_logged_in']['thumb'].'" width="40" height="40" alt="" />';
echo '</a>';
}
else
{
echo '<a href="profil?user='.$_SESSION['user_logged_in']['id'].'" title="">';
echo '<img class="no_image" src="images/no_image.gif" width="40" height="40" alt="" />';
echo '</a>';
}
echo '<h4 class="comment_user"><a href="profil?user='.$_SESSION['user_logged_in']['id'].'"
title="">'.$user_nev.'</a></h4>';
echo '<h6 class="comment_date">'.$ido.'</h6>';
if(isset($_SESSION['user_logged_in']))
{
echo '
<ul class="options_div">
<li><a href="#" class="btn"><img src="images/options.png" witdh="25" height="17" /></a>
<ul>
<li><a href="#">Hozzászólás szerkesztése</a></li>
<li><a href="#">Még valami lesz itt</a></li>
<li><a class="delete_komment" id="'.$last_id.'" href="#">Hozzászólás törlése</a></li>
</ul>
</li>
</ul>
';
}
include_once("smiley.php");
echo '<p>'.smiley(nl2br($komment)).'</p>';
echo '</div>';
}
?>
append
append
helyett használj valamilyen más függvényt. Hogy miért formázatlan, azt nem tudom, valószínűleg nem megfelelő adat van adata
változóban.Legegyszerűbb a böngésződ fejlesztői eszközében megnézni, hogy hogyan néz ki a HTML struktúrád a beszúrás után, majd ennek ismeretében javítod a beszúrást.
A formázás gond is csak addig
Kivettem az appendet, akkor
A divben amiben van az egész komment, és annak adatai hogy ki írta, mikor és az író profilképe, azok formázva jelennek meg ahogy kell..
Viszont egy komment divben van mégegy div, abban pedig linkek, na ez nem kap css-t, pedsig a class-t megkapja megnéztem.
Az mitől lehet, hogy csak
Figyelj jobban
Te:
Nézd át jobban a jQuery doksiját, sok más út is van a DOM manipulálására vagy HTML tartalom beszúrására. A divek körül nézz szét, hogy miért oda kerül, ahova, az append mindig a meglévő HTML végéhez fűz hozzá, ezért írta Poetro, hogy mást használj. Pl. ha van fórumtéma is (mint itt), akkor lehet ahhoz képest
insertAfter(target)
vagy az első kommenttelinsertBefore(target)
.Gondolom az egész oldalt egy másik szkripted teszi ki, ezért jelenik meg ott jól, itt meg vagy nem ugyanazt a HTML-t gyártod le belőle, vagy rossz helyre "appendálsz".
Ezzel már előre rakja ki, a
$('.komment_box:eq(0)').before(data);
Csak az az érdekes, ha egy olyan hírhez szólok hozzá, aminél még nincsenek hozzászólások, oda nem rakja ki az új kommentet, csak oldalfrissítés után.
Aminél pedig már van komment, oda kirakja egyből.
Lehet a before miatt? Csak
Meg lesz az
Igen, az a baj, hogy nincs olyan elemed 0 kommentnél, hogy
$('.komment_box:eq(0)')
.Így látatlanban annyi hackelést tudok javasolni, hogy az oldal kirakásánál nézd meg, ha 0 kommented van, akkor is tegyél ki egy üres div-et:
Így most valamemnnyire oké,
1 - Elküldöm a kommentet, megjelenik egyből.
2- A második komment ugyan ide, az is megjelenik egyből, de nem elsőnek rakja ki, hanem másodiknak csak.
Ezek a hibák csak ugye ott vannak amelyik hírnél még nem volt írva 1 hozzászólás sem.
A jquery még mindig ennyi:
prepend()
.komment_box
, inkább a kommentek szülőeleméhez add hozzá aprepend()
függvénnyel az új hozzászólást. Azappend()
-del ellentétben ez mindig a tartalom elejére illeszti az újat.Tökéletes, köszönöm szépen.
ott a pont
?
Mi a kérdés?
Sziasztok Ismét nem működik
Ismét nem működik a komment progim, csak oldal frissítés után rakja ki a legutóbbi kommentet amit írtam. Mutatok pár kódot, valaki lenne szíves megnézni mi lehet a gond? Előre is köszöntöm!
Itt mentem el, és adom vissza az új kommentet:
Hiba?
Különben mi a
px
változó értéke?Px változó?? Amugy semmilyen
Amugy semmilyen hibát nem ad, annyi van hogy egyből nem rakja ki a kommentet, csak oldalfrissítés után.
Px
Ja igen, azzal a textarea
De miért nem javítod ki
40+'px'
-re?!Definiálta a px változót és a
Igen, azt elnéztem,
Léha
JQuery
De nem hiszem, hogy a px
Ellenőrizd a böngésződ
A Javascript részben így hirtelen annyit látok, hogy a $.ajax hívásban a cache paraméter string ('false'), pedig boolean-nak kéne lennie (false). Ez hiba.
A másik, hogy a disabled állításánál a prop függvényt kéne használni az attr helyett. Itt ugyanis igazából nem az attribútumot akarod állítani, hanem az idevágó DOM elem tulajdonságát. Az attribútum csak a kezdőállapotot hivatott meghatározni. Javaslom a dokumentáció tanulmányozását.
Hát bonyolult ez, nem értem
Na most, ha az adott hírnél még nincs 1 komment sem, és ha írok hozzá, akkor nem jelenik meg, csak frissítés után.
Ha olyanhoz írok, aminél már van komment, akkor annál egyből megjelenik jól az új komment.
Valami ötlet? Milyen kódot, vagy részt másoljak be?
js és javítottam a PROP-os dolgot amit írtál.
Létezik?
.komment_box
akkor is, amikor még nincs hozzászólás?Ahogy Poetro is írja, és én
Az ellenőrzést végezheted a DOM inspectorban kézzel vagy a konzolban DOM hívásokkal (komment hozzáadás előtt), vagy akár a kódodba is illeszthetsz egy loggolást a megfelelő helyre, ami a konzolra írja majd az eredményt (célszerű a prependes sor elé, utána meg írj egy kommentet):
Van komment_box divem akkor
Ugye lekérem a hírt táblából, és ha van rá találat, már akkor kiíratok egy komment_box divet, pont ezért, hogy a prepend működjön.
Hát, látatlanban nehéz.
Na mégsem, konzol: talált
Kiírattam máshol, mostmár így jó, akkor a prepend miatt volt a gond.
Még annyit kérdeznék, hogy szerintetek ez milyen kommentelő progi? Gondolom lehetne rajta finomítani meg alakítani még, arra várnék ötleteket.
Meg akkor ezt használnám máshol is kommentelni.
Még annyit kérdeznék, hogy
Na akkor várom.
Hibák
1, Az adatbázist kezelő műveleteket tedd külön fájlba, ne hívd közvetlenül soha a kódból a függvényeket, mert ha a későbbiekben olyan váltás történik, mint például a mysql -> mysqli esetében, jóval egyszerűbb lesz átírni a kódot.
2, Nem célszerű keverni a programlogikát a megjelenítéssel, azaz szét kéne szedni a fájlt két részre:
a, a php fájl elején elvégzed az ellenőrzéseket, lekérdezéseket, összeállítod azokat az adattömböket, amit ki kell írni,
b, a php fájl végén van a html kód, és a kapott adattömböknek megfelelően írsz ki mindent.
Ekkor (adatbázis)hiba esetén nem fog a felhasználó egy üres képernyőt kapni, hanem szépen meg tudod jeleníteni neki a hibaüzenetet.
3, Kétszer dolgozol: először akkor, amikor az eredeti HTML oldalt összeállítod, ahol a kommentek vannak, másodszor pedig az ebben a fórumtémába beküldött kódban, azon belül is a javascriptben valósítod meg az űrlap beküldéséért felelős logikát.
a, Ha jól sejtem, a komment megjelenítéséért felelős HTML kódrészlet legalább két helyen van megírva, azaz később, ha módosítani kell, ennyivel több hibázási lehetőség van,
b, a komment beküldéséért felelős kódrészlet speciálisan van megírva, a megadott form elemből szedi össze a megadott mezőket. Ha átviszed ezt később egy másik projektbe, ahol mások az azonosítók, esetleg több van belőlük vagy kevesebb, a javascript kódot is módosítani kell.
Hogyan érdemes?
a, Ugyanazt a HTML kódrészletet mindig ugyanazzal a php kóddal szabad előállítani.
b, Kell találni/írni egy olyan JS függvényt, ami egy megadott formról összeszed minden űrlapelem-adatot, és elküldi a <form> method attribútumában található scriptnek (gyanítom, hogy a jQueryben van ilyen).
4, Hibás a programlogika abból a szempontból, hogy ha sikerült az adatbázisba elmenteni az épp beküldött kommentet, csak ennek az egy kommentnek küldi vissza a HTML kódját - viszont nem kezeli azt az esetet, ha közben már más is hozzászólt (például a mostanit egy óráig pötyögte az illető).
5, A jQuery függvényekkel láthatóan csak próbálkozol, de fogalmad sincs, hogy mit csinálnak (lásd append() az elején), arra való a dokumentáció, hogy olvassák el.
6, Érzésem szerint (javíts ki, ha tévedek) a kommentelés nem működik kikapcsolt javascripttel. Ha így van, semmi sem indokolja, hogy így legyen.
Köszi a részletes és normális
Attól függetlenül, hogy működik a dolog, semmiképp ne maradjon ebben a formában? Javascript kódom se jó?
Igen, nagyjából így kéne
1, a kimenő adatokat egy szép nagy tömbbe tenném, pl. $adatok
2, mint írtam a 34-es hozzászólás 1-es pontjában, külön függvényeket készítenék a lekérdezéseknek. Pl. a lekerdez($sql) függvény lefuttatná a paraméterül kapott lekérdezést, a választ pedig betenné egy tömbbe; ha hiba történt, akkor nem tömböt ad vissza, hanem hibakódot
3, a fájl tetején a menü összeállítása kb. így történne:
$valasz = lekerdez("SELECT * FROM menu WHERE status=1 ORDER BY id ASC");
//hiba esetén
if (!is_array($valasz)) {
return $valasz;
}
$adatok['menu'] = $valasz;
$valasz = lekerdez("SELECT * FROM kommentek WHERE akármi");
if (!is_array($valasz)) {
return $valasz;
}
$adatok['kommentek'] = $valasz;
}
4, Aztán a végén a HTML-ben pedig ezt csinálhatod:
<?php foreach ($adatok['menu'] as $menupont) { ?>
<li><a href="<?php print $menupont['href']; ?>">="<?php print $menupont['felirat']; ?></a>
<?php } ?>
</ul>
Ez persze nagyon vázlatos megoldás.
Akkor az oké amit bemásoltam
Az nem OK, mert továbbra is
Amiket Gábor ír, remek tanácsok, és tulajdonképpen ezek az első lépések abba az irányba, hogy a spagettikód állapotából elinduljál a kódszervezés rögös, ám szükséges útján. Nem is az számít, hogy ezt függvényekkel vagy objektumokkal éred el, hanem az, hogy a kódod átlátható, olvasható, módosítható, fejleszthető legyen - akár mások, akár a jövőbeli önmagad számára.
Említed, hogy amit most írsz, többször fel akarod használni. Annyira ne tervezz hosszú távra vele, mert ahogy egyre többet tanulsz majd a kódszervezésről, folyamatosan újra akarod írni majd úgyis, mert rájössz a súlyos hiányosságaira.
Vesd bele magad a kódszervezés kitanulásába - sajnos ez az a pont, amikor az ember rájön, hogy a webfejlesztés jóval több, mint aminek az ember gondolta, amikor belekezdett (velem legalábbis így volt). Az egy dolog, hogy a CSS, Javascript, PHP, stb. lehetőségei, függvényei közül melyik pontosan mit csinál, arra ott a dokumentáció - a kérdés, hogyan építesz fel mindebből egy jó rendszert.
A kikapcsolt javascript.
Ha a Javascript nem feltétlenül szükséges valamihez, például olyan egyszerű esetekben, mint egy hozzászólás, akkor általában rossz döntés szükségessé tenni. A Javascriptre alapvetően úgy gondolj, mint egy plusz réteg, ami kényelmi funkciókat biztosít. Weboldalaknál mindenképpen, webalkalmazás az más kérdés, persze.
Semmiképp, ha engem kérdezel. Azt felejtsd el, hogy valami "működik", mert ez az érv nem segít neked ebben a szakmában. Azt nézd, hogyan lehetne jobb. A Javascript kódod ugyanúgy spagetti.
De akkor a php-t olyanra mint
Az miben más? Olyanra, amit
Mér most akkor az sem jó? A
Leírtuk párszor, hogyan
Nem jó
Olvasd végig figyelmesebben amiket írtunk. Teljesen nem csináljuk meg helyetted.
Megkérdezhetem, hány éves vagy?
Ismét kérdezem, mitől más a
Vagy függvényekre, vagy objektumokra lesz szükséged. El kell szeparálnod a különböző feladatokat, és nem különböző spagettifájlokba, amiket aztán include-olsz. Egy függvény egy dolgot csináljon, ne egy helyen legyen az adatbázisművelet, a HTML előállítás, stb.
Ez igen!
A 34-es hozzászólást mindenki szépen könyvjelzőzze, és ha elakad valamiben, először olvassa újra!
Nagyon jól összeszedted, gratula hozzá, csak 1-2 dolgot tennék hozzá.
2.a.b.: Én inkább 3 részre osztanám (MVC-szerűen, bár nem tudom, miért nem CMV-nek hívjuk, mert úgy jön sorban):
a. beérkező adatok és a jogosultságok ellenőrzése;
b. adatbázis-műveletek, válaszadatok előállítása (természetesen 1. szerint);
c. a b-től (vagy a-tól) kapott adatokkal a kimenet (HTML) előállítása.
Persze az a és b szorosan összefügg, mégis jobb, ha külön van. Ezzel együtt most még nem javasolnék keretrendszer-tanulást, jobb, ha párat kiszenvedsz 0-ról, akkor tanulod meg igazán.
3: Magyarul sablonozol.
4: Javaslat: először is csináld meg JS nélkül működőre, aztán ha még annyira Ajaxozni akarsz, akkor mindig az összes (ehhez a hírhez tartozó) kommentet kérd le és jelenítsd meg, vagy azt a limitet, amit JS nélkül is.
+7: Kezdj el tartalomtípusokban gondolkodni, a menü egy aránylag állandó tartalom, ezt külön állítod elő, esetleg cache-eled is, külön tartalomtípus a hír, megint más a komment, a felhasználó is egy, stb. Ezeket külön-külön kezeld, jól elkülönített (pl. más fájlok) programrészek foglalkozzanak velük, minden rétegszinten (1 és 2-es pont).
Nem is tudom, talán neki jót
Ha képes magától
És ennek most a működésre
Mint valószínűleg látod,
Jól szervezett kódban könnyebb a hibakeresés, hibajavítás, tesztelés (ez spagettikódban eleve problémás lenne), fejlesztés. Eleve jóval kisebb az esélye a hibák elkövetésének, mert a kód átlátható, részekre bontott. Spagettikóddal te magad is nagy bajban leszel, ha mondjuk egy hónap után bele kell nyúlnod, mondjuk kijavítani egy hibát, mert addigra már nem emlékszel, mi hogy is volt és nincs követhető struktúra, ami vezessen.
Én is így haladtam, de
Nálunk az is közrejátszott, hogy volt más programnyelveken tapasztalatunk. A spagettikód semmilyen nyelven nem kifizetődő :).
Valóban
Az is igaz, hogy
Szerintem a spagetti, ahonnét mindenki elindul, van aki képes továbblépni néhány nagyobb lépést egészen a jól felépített OOP-ig, van aki kevesebbet - és van aki megreked a spagettinél.
Szerk.: a házépítős példád nagyon tetszik, azt mondom: a jól felépített házhoz ne használjon feltétlenül kész betont, hanem inkább lapátoljon a betonkeverőbe maga (fw helyett).
Keretrendszer
Szóval nem egyszerű a problémakör.
Ez már szerintem az ízlések
Ha olyat választ, ami szakmailag elfogadott (a Yii-t nem próbáltam, de sokan mondják, hogy jó), azzal már biztos, hogy előrébb van, mintha spagettikóddal iparkodik. Szerencsés esetben úgyis tovább fejlődik, igénye lesz más frameworköket is megismerni, hogy azok hogyan oldanak meg bizonyos problémákat.
Én épp azért
Egyébként én IDE nélkül szinte a fejlesztést tartom lehetetlennek, persze ez erős túlzás, néha hobbyból még assembly-zek is, ahhoz pedig még mindig a megszokott DOS-os szövegszerkesztőt használom, kötegfájllal fordítok. :)
De - ha nem is teljesen kezdőnek - én javaslom mindenkinek a számára kényelmes IDE használatát, nagyon meg tudja gyorsítani - könnyíteni a fejlesztést. Persze ennek kiválasztása is van olyan nehéz, mint a keretrendszeré. Aztán még ott a verziókezelés... - lehet sorolni.