Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][jquery] Wykonywanie akcji bez przeładowania
Forum PHP.pl > Forum > PHP
polkom21
Otóż mój problem polega na tym, że mam listę na której mam akcje którymi są edycja i usunięcie. Po kliknięciu na ikonę usunięcia pojawia się okno dialogowe do potwierdzenia. Potrzebuję wywołać odpowiedni kod w głównym pliku przez jquery aby usunęło mi ten post i pytanie jak to zrobić.

ścieżka: index.php?page=pages
  1. <?php
  2. if($_GET['action'] == ''){
  3. echo '<table width="100%" border="1">
  4. <tr><td>id</td><td>Tytuł</td><td>Typ strony</td><td>Akcja</td></tr>';
  5. $admin->pages_list();
  6. echo '</table>';
  7. } else if ($_GET['action'] == 'edit'){
  8. $query = $admin->query('SELECT', '*', 'pages', 'WHERE id='.$_GET['id']);
  9. $query = mysql_fetch_assoc($query);
  10. if(isset($_POST['zapisz'])){
  11. $title = $_POST['title'];
  12. if($_POST['update_date'] == 'tak'){
  13. $date = date("d.m.Y");
  14. } else {
  15. $date = $query['date'];
  16. }
  17. if($query['type'] == 'Strona'){
  18. $content = $_POST['content'];
  19. } else {
  20. $content = '';
  21. }
  22. $admin->save_page($title, $date, $content, $query['id']);
  23. }else {
  24. echo '<form action="" method="post">
  25. Tytuł strony: <input type="text" name="title" value="'.$query['name'].'" /><br />
  26. Data: '.$query['date'].'<br />
  27. Zaktualizować datę? <label><input type="radio" name="update_date" value="tak" checked />Tak</label> <label><input type="radio" name="update_date" value="nie" />Nie</label>';
  28. if($query['type'] == 'Strona'){
  29. echo '<br /><textarea name="content" cols="53" rows="4">'.$query['content'].'</textarea>';
  30. }
  31. echo '<input type="submit" name="zapisz" value="Zapisz stronę" />
  32. </form>';
  33. }
  34.  
  35.  
  36. } else if($_GET['action'] == 'delete'){
  37. echo $_GET['id'];
  38. }
  39. ?>
  40.  
  41. <div id="check_delete" title="Usuwanie">
  42. <p class="box">Czy na pewno chcesz usunąć tą stronę?</p>
  43. </div>



jquery:
  1. function usun(id_post){
  2. $("#check_delete").dialog({
  3. resizable: false,
  4. height:140,
  5. modal: true,
  6. buttons: {
  7. "Usuń": function() {
  8. // Tu muszę mieć wywołanie fragmentu kodu żeby usunęło mi konkretną stronę.
  9. $( this ).dialog( "close" );
  10. },
  11. "Anuluj": function() {
  12. $( this ).dialog( "close" );
  13. }
  14. }
  15. });
  16. }
b4rt3kk
Musisz zastosować Ajax - http://api.jquery.com/jQuery.ajax/
polkom21
No dobra na tyle mądry to ja jestem. Napisałem coś takiego:
$.ajax({
type: 'GET',
url: 'index.php?page=pages&action=delete',
data: {id: id_post}
});
i to się odnosi do tego:
if($_GET['action'] == 'delete'){
echo $_GET['id'];
}

tylko pytanie czemu mi nie wyświetla tego id.
b4rt3kk
Akurat nic nie wspomniałeś o ajaxie, a zostawiłeś puste miejsce... Nie widzę też nigdzie żeby było podane ID? Jakoś je trzeba pobrać i przekazać do skryptu jQuery. Zrób sobie plik usun.php:

  1. <?php echo $_GET['id']; ?>


Musisz też dodać coś (obojętnie co), co będzie trzymało zawartość ID, tak żeby jQuery, mógł to pobrać.

  1. <input type="hidden" value="{$query['id']}" class="IDforjQuery" />


  1. $.ajax({
  2. type: "GET",
  3. url: "usun.php",
  4. data: { id: $('.IDforjQuery').val() }
  5. }).done(function( msg ) {
  6. alert(msg);
  7. });
polkom21
ale chodzi o to żeby nie było milionów plików. Skrypt jest wywoływany przez <a href="#" onClick="usun('.$page['id'].');"> gdzie skrypt dostaje id które będzie później użyte.
mogę jeszcze odwołać się bezpośrednio do pliku przez
$.ajax({
type: 'GET',
url: 'pages/pages.php',
data: {action: "delete", id: id_post}
});
ale to też nie chce mi działać.
ensei
Bo złą funkcję dajesz.
http://api.jquery.com/load/
polkom21
No to powiedzcie mi jak mam to zrobić bo już próbowałem przeróżnych rzeczy i nie działa :/
ensei
  1. <!DOCTYPE HTML>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html" />
  4. <meta name="author" content="" />
  5.  
  6. <title>Untitled 8</title>
  7. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
  8. <script type="text/javascript">
  9. function action(id){
  10. document.getElementById(id).innerHTML ="";
  11. document.getElementById(id+"a").innerHTML ="";
  12. $.ajax({ url: 'ajax_response.php',
  13. data: {action: 'delete'},
  14. type: 'post',
  15. success: function(output) {
  16. alert(output);
  17. }
  18. });
  19. }
  20. </script>
  21. </head>
  22.  
  23. <body>
  24. <div id="d15">Usuń mnie</div>
  25. <a href="#" onclick="action('d15');" id="d15a">Usuń wpis</a>
  26.  
  27. </body>
  28. </html>


  1. <?php
  2. file_put_contents('dsada.php', 'dsada');
  3. ?>
polkom21
Najpierw proponujesz mi skorzystać z funkcji load() a podajesz mi rozwiązanie z ajax()? Trochę to nielogiczne.
ensei
Nie ma za co.
polkom21
Dzięki bardzo za chęci ale poradziłem sobie już sam.
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.