PHP & Javascript
Sziasztok!
A segítségeteket szeretném kérni.
Üzeneteket jelenítek meg a weboldalamon. Az üzeneteket adatbázisban tárolom. Az üzeneteket egy x-el lehet bezárni, ami javascript segítségével eltünteti az üzenetet.
Na már most. Az adatbázisban van egy active mező ami arra szolgál, hogyha az értéke nulla akkor az üzenetet nem listázza ki az oldal.
Van egy php függvényem ami megváltoztatná az üzenethez tartozó mező értékét nullára, ha bezárjuk az x-el az üzenetet.
Ehhez kérném a segítségeteket. Hogyan tudnám megvalósítani, hogy az x-re kattintva eltűnik az üzenet majd az adatbázisban is megváltoztatom az értéket?
Üdv,
Bence
■ A segítségeteket szeretném kérni.
Üzeneteket jelenítek meg a weboldalamon. Az üzeneteket adatbázisban tárolom. Az üzeneteket egy x-el lehet bezárni, ami javascript segítségével eltünteti az üzenetet.
Na már most. Az adatbázisban van egy active mező ami arra szolgál, hogyha az értéke nulla akkor az üzenetet nem listázza ki az oldal.
Van egy php függvényem ami megváltoztatná az üzenethez tartozó mező értékét nullára, ha bezárjuk az x-el az üzenetet.
Ehhez kérném a segítségeteket. Hogyan tudnám megvalósítani, hogy az x-re kattintva eltűnik az üzenet majd az adatbázisban is megváltoztatom az értéket?
Üdv,
Bence
AJAX
Segítség
Így hirtelen nem pontosan tudom, hogyan is nézne ez ki ezekkel a lehetőségekkel.
Olvasd el
thx
én inkább a jquery-t ajánlom,
jQuery post
Ezzel a függvénnyel meg tudod oldani^^
gyors példa:
nézd át a "jquery mouse events", "php json_encode", "jquery attr", "jquery post", "jquery ready"
és nagyjából képbe kerülsz, utánna írd át a kódot igényeidnek megfelelően és csináld meg a php oldalt :)
Kódok
Üzenet kiírás:
<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td class=\"yellow-left\">".$yellow."</td>
<td class=\"yellow-right\"><a class=\"close-yellow\"><img src=\"style/images/table/icon_close_yellow.gif\" alt=\"\" /></a></td>
</tr>
</table>
</div>";
Div bezárása:
$(".close-yellow").click(function () {
$("#message-yellow").fadeOut("slow");
$("#hungary").fadeOut("slow");
});
$(".close-red").click(function () {
$("#message-red").fadeOut("slow");
});
$(".close-blue").click(function () {
$("#message-blue").fadeOut("slow");
});
$(".close-green").click(function () {
$("#message-green").fadeOut("slow");
});
});
Az update pedig:
$sqlmsgs = "UPDATE messages SET active=0 WHERE id='".$_SESSION['id']."' AND type='".$type."'";
$row = mysql_query($sqlmsgs);
}
hmm, ennyire részletessen
Saját kódok
Tetszik
bocsi, nem láttam hogy te
Firefox böngészbőben tedd fel a firebug plugint. Firebugot megnyitva a konzolnál látod a hibákat, javascript hibákat. Itt látod a háttérben futó ajax kéréseket is.
Ha javascriptben irsz egy ilyen sort: console.log(<<változónév>>) az adott változót, szöveget, jquery objektumot kiirja a konzolra. Ha egy jquery objektumot pl $('.close-button) iraszts ki, akkor a konzolon rákattintva megmutatja hogy melyik elem az. Így tudod ellenőrizni, hogy a selector-od jó e.
Html-ben, azonos id-val csak egy! elem szerpelhet, azaz ha előbbi leírásod alapján több "message-yellow" id-ju cucc is van, akkor hibásan fog működni a kódod, használj class-t.
a bezáró linkeknek adj egy közös classt, pl, close-button
$('.close-button).click(function(){
$(this).parents('div').filter(':first').fadeOut("slow");
});
ezzel amikor rákattintasz a linkre, megkeresi a dom tree-ben az a elött lévő első div szülőt, és elrejti azt.
A dom treet, a firebug-ban úgy láthatod ha a html tabra kattintasz.
POST
A gondom ezzel van:
function(data){
if(data.success){
item.remove();
}
},'json'
).error(function(){
alert('szerver hiba');
});
Ezt egyáltalán nem értem, és hiába olvasgatom a documentációt róla, nem tudom működésre bírni. Illetve ha át is ad értéket a message-off-nak az a $_POST-ban érhető el?
Ez a része nekem teljes homály.
igen, ez post-al küldi a
Mivel ott van a "},'json'" sor, ezért válasznak mindenféleképpen json-t vár.
A php scriptedben a következőt kell tenned:
// id létezésének és korrekt adat tartalmának vizsgálása
...
$id = $_POST['id'];
// kapott id feldolgozása
...
header('Content-type: application/json');
echo json_encode(array('success'=>true));
die();
és lényeges, hogy az echo soron kívül semmi mást ne küldjél a kimenetre (utf8 bom, szóköz a php tag előtt stb.)
ha nem 200-as statuszú a weboldal ami válaszol a kérésre, vagy nem json stringet kap válaszként (a header is fontos lehet), akkor az ".error(function(){" rész fut le
ha a tömbben a success -nek false értéket állítasz be, akkor nem fogja törölni az üzenetet a weblapon (a db-ben még igen, ha törölted....)
Eddig tiszta, tehát a php-m
Most nézem, hogy az előző kommentem nem sikerült túl jól.
Ugyanis az eltüntetés rész működik. Kivéve, ha benne van a postos rész, beszúrom a függvényt, igazából a fentebbi kódodat módosítottam, lehet teljesen marhaság. Ezzel mi a gond?:
var item = jQuery(this);
$.post('../../message-off.php', {id: item.attr('id'},
function(data){
if(data.success){
$(this).parents('div').filter(':first').fadeOut("slow");
}
},'json'
).error(function(){
alert('Nem sikerült csatlakozni a szerverhez!');
});
});
Ugyanis ez így nem működik nekem. :) A fadeout rész önmagában igen, de így nem.
olvasásra jó, nem tudom mi a
- van javascript hiba?
- történik ajax kérés?
- ha igen milyen adatok kerülnek postolásra, benne van az id?
- mi a szerver válasza?
- a szerver válasz megfelelő json string?
hiányzott egy zárójel az attr
(?)()
handle()
a = Object { originalEvent=Event click, type="click", timeStamp=1328374087282, több...}
ab()
).error(function(){
A hiba a jquery 1.4.1-es
Most az 1.4.1 és az 1.7.1-et is használja az oldal, lentebb leírom miért.
Kattintáskor az üzenet:
custom_jquery.js (49. sor)
POST http://127.0.0.1/biomedical/fejlesztve/newadmin2/admin12v30/message-off.php 200 OK 1.04s
json success true
válasz {"success":true}
Viszont ha használom az 1.4.1-et is, akkor a postban megjelenik az id, source id=
Az sql módosítás nem történik meg, a buborék nem tűnik el.
Sehová tovább? Firebugon és
Firebugon és Firephp-n kívül tudok valamit hibakeresésre? A konzolon kívül van ott más lehetőség, hogy hibát keressek? Vagy innen már tudnom kéne mi a gond? :)
Wireshark
Fiddler2
Sikerült megoldani a
Viszont a postolt idval nem működik a változtatás adatbázisban. Még egyszer átnézem a kódot, de nem találok benne hibát, mert manuálisan megadott értékre lefut.
$sqlmsgs = "UPDATE messages SET active=0 WHERE id='".$_POST['id']."'";
$row = mysql_query($sqlmsgs);
header('Content-type: application/json');
echo json_encode(array('success'=>true));
die();
Egy kérdés
De engem nem hagy nyugodni az alapkérdésben egy dolog:
Ez egy "egyfelhasználós" honlap? U.is, ha az adatbázisban az üzenet-rekordnak egy mezője szolgál arra, hogy mutassa: Júzer megjelenített már, akkor itt van egy súlyos adatbázishiba.
Egyetlen Júzer megjeleníti, ezután a többi sem látja.
Biztosan ezt akarod?
Dehogy. Ahogyan írtam, bár
Ha ezt sikerült megvalósítani a többit már könnyű szerrel megoldom. :)
Örömmel jelentem be,
Az utolsó postolási hiba figyelmetlenségből adódott, ami a consolban ki is derült. Tökéletesen müködik a javascriptben a postolás. Az adatok módosulnak a modul tökéletesen működik. Mindenkinek köszönöm a segítséget!
üdv,
Nermendis