Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][MySQL][PHP] Usuwanie rekordów z bazy danych
Forum PHP.pl > Forum > Przedszkole
@rtur
Kombinuje pare godzin i nie moge dojść, zatemproszę mądrzejszych od siebie.
mam taki kod html:
  1. <div id="wiadomosci">
  2. <div id="wiadomosc_4" class="wiadomosc">
  3. <div class="userInfo">
  4. <span class="numer" title="wiadomość #1">#1</span><span class="date">2011-05-11 15:36:14</span> <span class="nick">Autor 1</span> pisze: </div>
  5. <div class="WiadOpcje">
  6. <span class="opcje_wiadomosci"><a class="usun" href="#" title="usuń wiadomość">usuń</a>
  7. </div><!-- /class WiadOpcje -->
  8. <div class="trescWiadomosci"><p>tutaj tresc wiadomosci 1</p></div><!-- /class trescWiadomosci -->
  9. <div class="WiadStopka"><span class="ipnadawcy">adres ip nadawcy: 123.123.123.123</a></span></div><!-- /class -->
  10. </div><!-- /id -->
  11. <div id="wiadomosc_5" class="wiadomosc">
  12. <div class="userInfo">
  13. <span class="numer" title="wiadomość #2">#2</span><span class="date">2011-05-11 15:59:14</span> <span class="nick">Autor 2</span> pisze: </div>
  14. <div class="WiadOpcje">
  15. <span class="opcje_wiadomosci"><a class="usun" href="#" title="usuń wiadomość">usuń</a>
  16. </div><!-- /class WiadOpcje -->
  17. <div class="trescWiadomosci"><p>tutaj tresc wiadomosci 2</p></div><!-- /class trescWiadomosci -->
  18. <div class="WiadStopka"><span class="ipnadawcy">adres ip nadawcy: 123.123.123.123</a></span></div><!-- /class -->
  19. </div><!-- /id -->
  20. </div>

i do tego próbuje taki ajax:
  1. $('a.usun').click(function(e) {
  2. e.preventDefault();
  3. var parent = $(this).parent();
  4. $.ajax({
  5. type: 'get',
  6. url: 'usun.php',
  7. data: 'usun=' + parent.attr('id').replace('wiadomosc_',''),
  8. beforeSend: function() {
  9. parent.animate({'backgroundColor':'#fb6c6c'},300);
  10. },
  11. success: function() {
  12. parent.slideUp(300,function() {
  13. parent.remove();
  14. });
  15. }
  16. });
  17. });

chciałbym aby po naciśnięciu na usuń (<a class="usun" href="#" title="usuń wiadomość">usuń</a>) z bazy usuwał się rekord o id = wiadomosc_#id, a także żeby z widoku na stronie znikał div o id wiadomosc_#id, nie bardzo mam już pomysł, co zrobic aby to działało.

usun.php?usun=1 wpisane w ff elegancko usuwa rekord id=1
melkorm
Kod
data : {
usun :  parent.attr('id').replace('wiadomosc_','')
}


Do tego:
1. FireBug - zobaczysz sobie co ci zwraca itp
2. Sprawdzanie gdzie występują błąd - DEBUGOWANIE czyli:
- czy skrypt JS wysłał odpowiednie dane w żądaniu ?
- czy skrypt PHP odebrał poprawne dane, obrobił je i wykonał zaplanowane działania
3. var_dump
4. alert w js, lub console.log.


W ten sposób od razu byś doszedł do punktu gdzie występuje błąd - gdybyś nadal nie wiedział to byś też tu napisał ale z innym pytaniem i konkretnym, czyli "dlaczego skrypt php nie odbiera poprawnych danych?"

Przy okazji :
Zamiast bawić się ID'kami możesz zrobić tak:
  1. <a ... id_message="5">Usuń</a>

I twedy:
Kod
data : {
usun :  parseInt($(this).attr('id_message'))
}


P.S. Wbijcie sobie w końcu do głowy przedszkolaki że Debugowanie to wasza tarcza i miecz :/
@rtur
pobawiłem się trochę firebugiem i wyszedł mi taki kod JS, który działa

Kod
$('a.usun').click(function(e) {
    e.preventDefault();
    var parent = $('.userInfo').parent();
    $.ajax({
      type: 'get',
      url: 'usun.php',
      data: {
      usun :  parent.attr('id').replace('wiadomosc_','')},
      beforeSend: function() {
        parent.animate({'backgroundColor':'#fb6c6c'},300);
      },
      success: function() {
        parent.slideUp(300,function() {
          parent.remove();
        });
      }
    });
  }


ale pojawia się problem tego typu że zawartość tą mam pobieraną na początku do diva o id content i jest ona okresowo odświeżana i wtedy d... nie działa, jak treść jest w kodzie działa jak w divie nie działa
melkorm
Zainteresuj się funkcją live w jQuery.
@rtur
ja chyba tego .live nie ogarnę tak szybko sad.gif

jeżeli można to proszę o podpowiedź gdzie popełniam błąd że to nie działa.
link do przykładu: http://piece-kra.pl/artur/
klikam archiwizuj i cisza, nic się nie dzieje na podglądzie konsoli firebuga
amii
A masz tam klasę usun ? Bo ja jej nie widzę w źródle.
@rtur
klasa usun została zmieniona na archiwizuj, do usun się chyba nic nie odnosi tam w kodzie smile.gif

działa smile.gif

a tak cały kod js wygląda:
Kod
$(document).ready(function(){
function pobierzWiadomosci(){
$('#content').load('pobierz-wiadomosci.php', function() {
$('a.archiwum_w').click(archiwizuj);
}).fadeIn('fast');
};
$('.pobierzNoweWiadomosci').click(pobierzWiadomosci);
$('#content').html(pobierzWiadomosci);
function archiwizuj() {
    var parent = $('.userInfo').parent();
    $.ajax({
      type: 'get',
      url: 'archive.php',
      data: {
      archive :  parent.attr('id').replace('wiadomosc_','')},
      beforeSend: function() {
        parent.animate({'backgroundColor':'#fb6c6c'},300);
      },
      success: function() {
        parent.slideUp(300,function() {
          parent.remove();
          $('#content').html(pobierzWiadomosci);
        });
      }
    });
  }
});


może można to jeszcze jakoś zoptymalizować ten kod?
można to jeszcze jakoś zabezpieczyć żeby ktoś archiwizował wiadomości tylko z tego ajaxa a nie wpisując w przeglądarkę np archive.php?archive=1 ?
nospor
Cytat
można to jeszcze jakoś zabezpieczyć żeby ktoś archiwizował wiadomości tylko z tego ajaxa a nie wpisując w przeglądarkę np archive.php?archive=1 ?
A co ci szkodzi, że ktoś to zrobi z przeglądarki? Jak chce to jego sprawa smile.gif
To co idzie ajaxem równie dobrze może pójść normalnie.
@rtur
Cytat(nospor @ 12.05.2011, 11:26:55 ) *
A co ci szkodzi, że ktoś to zrobi z przeglądarki? Jak chce to jego sprawa smile.gif
To co idzie ajaxem równie dobrze może pójść normalnie.

W sumie racja, to tylko jedynie może zabezpieczę sesją zalogowany=tak żeby te operacje mogły wykonywać tylko osoby zalogowane.
nospor
Cytat
to tylko jedynie może zabezpieczę sesją zalogowany=tak żeby te operacje mogły wykonywać tylko osoby zalogowane.
Nie "może" a koniecznie

Mało tego: musisz jeszcze zrobić zabezpieczenie, by dany user mógł usuwać tylko swoje wiadomości a nie cudze
@rtur
Cytat(nospor @ 12.05.2011, 12:09:07 ) *
Mało tego: musisz jeszcze zrobić zabezpieczenie, by dany user mógł usuwać tylko swoje wiadomości a nie cudze

To mogę sobie darować bo to bedzie tzw skrzynka główna dla kilku userów

to jeszcze spytam o taką drobnostkę.
Jak wynik działania tego php do którego odnosi się ajax zwrócić na stronie z poziomu której wykonywałem funkcję? archive.php?archive=id_wiadomości zwraca "wiadomość zarchiwizowana" albo "wiadomość nie zarchiwizowana" i to chcę wyświetlić w konkretnym divie na mojej stronie z poziomu której wykonywałem te funkcję.
nospor
Metoda success w parametrze wywołania zawiera dane zwrotne. Rób z nimi co chcesz smile.gif
@rtur
Dzięki, ale wynikł jeszcze inny problem
Mam w js funkcje usun()
  1. function usun() {
  2. var parent = $('.userInfo').parent();
  3. $.ajax({
  4. type: 'get',
  5. url: 'wiadomosci,usun.',
  6. data: {
  7. id : parent.attr('id').replace('wiadomosc_','')},
  8. beforeSend: function() {
  9. parent.animate({'background-color':'#fb6c6c'},150);
  10. },
  11. success: function(data) {
  12. parent.remove();
  13. $('#statusT').html(data);
  14. $('#content').html(WiadomosciNieczytane);
  15. }
  16. });
  17. }

i ona usuwała to co trzeba jak było url: 'wiadomosci.php?akcja=usun',

tylko że zrobiłem sobie teraz w .htaccess przyjazne linki, i nie wiem co zrobić żeby link jaki jest wywoływany przez te funkcje wyglądał tak:
Kod
wiadomosci,usun.3

w tej postaci która jest w funkcji zwraca taki link:
Kod
wiadomosci,usun.?id=3

i wynik zwraca błąd 404
peter13135
nie możesz dokleić tego id do
Kod
url: 'wiadomosci,usun.',
?
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.