Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] usuwanie rekordu / wpisu z bazy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
arkoslaw
Witam, mam problem ze skryptem usuwajacym rekordy z bazy, rzecz wydaje sie banalna ale troche sie komplikuje po podpieciu php pod jQuery...podczas szukania rozwiazania natknalem sie na taki skrypt(link: LINK)

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('a.delete').livequery('click', function(e) {
  3. e.preventDefault();
  4. var parent = $(this).parent();
  5. $.ajax({
  6. type: 'get',
  7. url: 'linki/show_news.php',
  8. data: 'ajax=1&delete=' + parent.attr('id').replace('record-',''),
  9. beforeSend: function() {
  10. parent.animate({'backgroundColor':'#fb6c6c'},300);
  11. },
  12. success: function() {
  13. parent.slideUp(300,function() {
  14. parent.remove();
  15. });
  16. }
  17. });
  18. return false;
  19. });
  20. });
[JAVASCRIPT] pobierz, plaintext

+taki skrypt PHP
  1. if(isset($_GET['delete']))
  2. {
  3. $query = 'DELETE FROM news WHERE id_news = '.(int)$_GET['delete'];
  4. $result = mysql_query($query);
  5. }
  6. while($newsy = mysql_fetch_array($query))
  7. {
  8. echo '<div class="record" id="record-',$newsy['id_news'],'">
  9. <a href="?delete=%27,$newsy[%27id_news%27],%27" class="delete">Delete</a>
  10. <strong>',$newsy['tytul'],'</strong>
  11. <strong>',$newsy['autor'],'</strong>
  12. <strong>',$newsy['tresc'],'</strong>
  13. <strong>',$newsy['data'],'</strong>
  14. <strong>',$newsy['tytul'],'</strong>
  15. </div>';


Animacja dziala czyli zwija elegancko rekordy ale nie usuwa z bazy rekordow.
Patrzyłem pod FireBugiem no i zatrzymuje się przy parent.remove ale i tak zwija sie dany rekord. Id danego rekordu tez dobrze odczytuje wiec jest to pewnie wina IFa lub tego dziwnego zapytania...

Chodzi mi o jak najprostszy skrypt zeby go tylko mozna bylo podpiac pod jQuery, probowalem z innymi skryptami ale dzilaja tylko wtedy gdy mam return true czyli przekierowanie do nastepnej strony, a musze zrobic tak zeby to zapytanie bylo wykonywane po stronie przegladarki.

Mam nadzieje, że ktoś sie zainteresuje tym problemem bo siedze nad tym od wczoraj;/
P.S. Możliwe, że wina leży po stronie pluginu LivQuery?
vokiel
W FireBug'u jest konsola, w której pojawiają się zapytania, gdy klikniesz na jedno z nich masz tam zakładki: Parametry, Nagłówki, Odpowiedź. Zerknij na parametry, czy są wysłane poprawnie, oraz na odpowiedź, żeby zobaczyć, czy przypadkiem serwer nie sypnął błędem.

Drobne poprawki:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('a.delete').livequery('click', function(e) {
  3. e.preventDefault();
  4. var parent = $(this).parent();
  5. $.ajax({
  6. type: 'get',
  7. url: 'linki/show_news.php',
  8. data: {ajax: 1, delete: parent.attr('id').replace('record-','')},
  9. beforeSend: function() {
  10. parent.animate({'backgroundColor':'#fb6c6c'},300);
  11. },
  12. success: function() {
  13. parent.slideUp(300,function() {
  14. $(this).remove();
  15. });
  16. }
  17. });
  18. return false;
  19. });
  20. });
[JAVASCRIPT] pobierz, plaintext


  1. if(isset($_GET['delete']) && !empty($_GET['delete'])){
  2. $query = 'DELETE FROM news WHERE id_news = '.(int)$_GET['delete'];
  3. $result = mysql_query($query);
  4. }
  5. /* to co tu mialeś nie zadziala */
  6. $query = "SELECT * FROM news";
  7. $result = mysql_query($query);
  8. while($newsy = mysql_fetch_array($result)){
  9. echo '<div class="record" id="record-',$newsy['id_news'],'">
  10. <a href="?delete=%27,$newsy[%27id_news%27],%27" class="delete">Delete</a>
  11. <strong>',$newsy['tytul'],'</strong>
  12. <strong>',$newsy['autor'],'</strong>
  13. <strong>',$newsy['tresc'],'</strong>
  14. <strong>',$newsy['data'],'</strong>
  15. <strong>',$newsy['tytul'],'</strong>
  16. </div>';
  17. }
arkoslaw
Vokiel, zmiast "pomógł" zrób sobie opcje "donate";) Nie wiem jak to robisz, że w tak krótkim czasie rozpoznajesz problem i dajesz rozwiązanie, wielkie dzięki wszystko elegancko działa. Nawet nie wiedziałem że $.ajax ma cos takiego jak delete. Mam jeszcze dwa pytania jeśli można:

1. Chodzi o wyświetlanie rekordów z bazy, nie wyświetla mi 1 najstarszego rekordu, wiem dziwny problem:D

2. Nie wiem czy mi się uda ale bede próbował zrobić paginacje w jQuery, jeśli ma ktoś jakiś sprawdzony tutorial jak to zrobić to bardzo bym prosił o linka lub ewentualne wyjaśnienie jak to zrobić pod jQuery żeby nie przeładowywać strony. Wiem że jest do tego plugin ale poza livequery nie moge mieć innych pluginów.

edit// Kurcze w IE niestety wywala błąd i nie działają mi wszystkie ajaxowe linki na stronie, natomiast w FF wszystko w porzadku. W tej linij ce wywala błąd:
[JAVASCRIPT] pobierz, plaintext
  1. delete: parent.attr('id').replace('schowaj','')
  2. },
[JAVASCRIPT] pobierz, plaintext


błąd: "Oczekiwano identyfiaktora, ciągu znaków lub liczby."
Nie ma to jak problemy z badzIEwiem.
vokiel
Sam sobie donate nie zrobię, chyba że w sygnaturce winksmiley.jpg Jednak nie z tego powodu tu pomagam, żeby na tym zarabiać. Kiedyś mi też bezinteresownie pomagano.

Wracając do tematu, to z tym delete to akurat mój błąd. Zapomniałem, że to jest funkcja js, która usuwa właściwość obiektu, to miało być jedno z pól. Trzeba to zmienić np na usun, a następnie po stronie php też.
[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: 'get',
  3. url: 'linki/show_news.php',
  4. data: {ajax: 1, usun: parent.attr('id').replace('record-','')},
  5. beforeSend: function() {
  6. parent.animate({'backgroundColor':'#fb6c6c'},300);
  7. },
  8. success: function() {
  9. parent.slideUp(300,function() {
  10. $(this).remove();
  11. });
  12. }
  13. });
[JAVASCRIPT] pobierz, plaintext

No i w php:
  1. if(isset($_GET['usun']) && !empty($_GET['usun'])){
  2. $query = 'DELETE FROM news WHERE id_news = '.(int)$_GET['usun'];
  3. $result = mysql_query($query);
  4. }


Paginacja w jquery polega tylko na tym, aby wysłać do skryptu php numer strony, i otrzymane wyniki wpisać w jakiś kontener.

Do paginacji polecam klasę Nospora: Pager. Co prawda do jQuery trzeba ją troszeczkę przerobić, gdyż opiera się o advAjax. Ale to nie problem, możesz napisać klasę dziedziczącą po Pager, która zaimplementuje swój sposób generowania pagera. W zasadzie wystarczy Ci jedna metoda:

  1. class Vpager extends Pager{
  2. protected function createHTMLLink($title, $link, $text,$page) {
  3. return '<a class="jquery_pager" title="'.$title.'" href="'.$link.'" rel="'.$page.'">'.$text.'</a>';
  4. }
  5. }


Tej klasy używasz tak jak pierwotnej Nospora, poza tym, że nie dołączasz advAjax, tylko w jQuery piszesz prostą obsługę:

[JAVASCRIPT] pobierz, plaintext
  1. $('a.ranking_pager').livequery('click',function(e){
  2. e.preventDefault();
  3. var page = $(this).attr('rel');
  4. if(loading===false){
  5. loading = true;
  6. $.ajax({
  7. url: "paginator.php",
  8. type: "GET",
  9. data: ({page: page}),
  10. success: function(data){
  11. $('#destination').html(data);
  12. loading = false;
  13. },
  14. error: function(XMLHttpRequest,error,textStatus){
  15. loading = false;
  16. }
  17. });
  18. }
  19. });
[JAVASCRIPT] pobierz, plaintext

arkoslaw
Niestety ale nie działa dalej w IE..wyskakuje komunikat że niby błąd jest w pliku jQuery. W nieskompresowanym jest to wiersz 4167, znak 5.

Jeśli nie będzie się dało z tym nic zrobić to chyba napisze formularz w którym sie wpisuje nazwe newsa i submitem sie potwierdza, innego wyjścia dla IE nie widze, chyba, że wpadnie Ci do głowy jakiś inny sposób na obejście tego problemu.

Wklejam kod ze z pliku jQuery może w czyms pomoże:

[JAVASCRIPT] pobierz, plaintext
  1. _default: function(fx){
  2. if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
  3. fx.elem.style[ fx.prop ] = fx.now + fx.unit;
  4. ==>Linia 4167 else
  5. fx.elem[ fx.prop ] = fx.now;
  6. }
  7. }
[JAVASCRIPT] pobierz, plaintext


P.S. sorki że tak truje ale na dniach muszę to oddać, a gdzie tam do pisania dokumentacji..
vokiel
Jaka wersja jQuery? Polecam korzytanie z CND google

Masz FireBuga? W nim też jest błąd, czy tylko w IE?

BTW
Może zmień:
[JAVASCRIPT] pobierz, plaintext
  1. parent.animate({'backgroundColor':'#fb6c6c'},300);
  2. //na
  3. parent.animate({'background-color':'#fb6c6c'},300);
  4. // albo
  5. parent.animate({backgroundColor:'#fb6c6c'},300);
  6. parent.animate({background-color:'#fb6c6c'},300);
[JAVASCRIPT] pobierz, plaintext


Ewentualnie zamiast ręcznego ustawiania koloru, możesz zrobić klasę w css
  1. .wybrany {background-color: #fb6c6c;}

A następnie robić addCalass('wybrany'), albo removeClass('wybrany')

Sprawdź czy po zmianie tego animate przestanie pojawiać się błąd, bo coś mi się zdaje, że może być tutaj właśnie, a nie w samej bibliotece jQuery
arkoslaw
Po raz kolejny dałeś popis!:D zmieniłem na
[JAVASCRIPT] pobierz, plaintext
  1. parent.animate({'background-color':'#fb6c6c'},300);
[JAVASCRIPT] pobierz, plaintext
tak jak zaleciłeś.

I znam juz nawet powod tego. Nie zauwazylem ze do tego skryptu jest dodany plugin color.js bodajze, no i stad ta skladnia backgroundColor...kolorki i tak nie dzialaja podczas zsuwania sie rekordów ale to mnie akurat nie interesuje;] Działa w IE i FF:D Dzięki wielkie mistrzu Robercie;]

OK dzisiaj już się postaram nie truć ale pewnie się kiedyś odezwe, no i też postaram się komuś pomóc:D

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.