2017-01-29 11 views
5

Robię operację CRUD, używając tylko php i bootstrap. Obecnie utknąłem w aktualizacji, ponieważ nie mogę wysłać $_GET['updateid'] do mojego modala.Aktualizacja za pomocą modala i php

To jest moje href, The usuwaćhref pracuje ale aktualizacjanie jest.

<a href="#myModal?updateid=<?php echo $row['sched_id'];?>" data-toggle="modal" 
       class="btn btn-warning" data-target="#myModal">Update</a> 
<a href="home.php?deleteid=<?php echo $row['sched_id'];?>" class="btn btn-danger">Delete</a> 

To php powinien przyjąć updateid z href i przekazać go do funkcji updateStud()

if(isset($_GET['updateid'])){ 
    $mupdate_id = $_GET['updateid']; 

    if(isset($_POST['modal-submit'])){ 

    $msubj = $_POST['modalsubject']; 
    $msect = $_POST['modalsection']; 
    $mday = implode("", $_POST['modalday']); 
    $mstrTime = $_POST['modalstarttime']; 
    $mendTime = $_POST['modalendtime']; 

    $auth_user->updateSchedule($msubj,$msect,$mday,$mstrTime,$mendTime,$mupdate_id); 
    $schedRow = $auth_user->readSchedule(); 
    } 
} 

To jest moja zmiana funkcję, która pobiera wszystkie dane i wykonuje zapytanie

public function updateSchedule($msubj,$msect,$mday,$mstrTime,$mendTime,$mupdate_id){ 
     $stmt = $this->conn->prepare("UPDATE `schedule` 
      SET `subject_db` = :msubj, 
      `section_db` = :msect, 
      `sched_day` = :mday, 
      `start_time` = :mstrTime, 
      `end_time` = :mendTime 
      WHERE `sched_id` = :mupdate_id "); 

     $stmt->bindparam(":msubj", $msubj); 
     $stmt->bindparam(":msect", $msect); 
     $stmt->bindparam(":mday", $mday); 
     $stmt->bindparam(":mstrTime", $mstrTime); 
     $stmt->bindparam(":mendTime", $mendTime); 
     $stmt->bindparam(":mupdate_id", $mupdate_id); 

     $stmt->execute(); 

     return $stmt; 
    } 
+0

Czy jest jakiś powód, dla którego unikasz Javascript? Niestety nie sądzę, że to, co próbujesz zrobić, jest możliwe. Podczas gdy link usuwania jest żądaniem serwera, łącze modalne jest żądaniem klienta, które nie wywoła twojego "if (isset ($ _ GET ['updateid'])))", ponieważ strona nie jest faktycznie przesyłana. – tjfo

+2

Myślę, że to źle, że próbujesz to zrobić. Próbujesz ustawić parametr 'updateid' URL' GET' na modalny link wyzwalacza kotwicy. Tak nie działa. Jeśli chcesz przekazać parametr 'updateid' jako parametr' GET', dodaj go na końcu atrybutu działania formularza. Czy możesz edytować pytanie i aktualizować go przy użyciu pełnego kodu HTML? –

Odpowiedz

0

Jeśli potrzebujesz tylko zaktualizować dane za pomocą modala i wyświetlić odpowiedź wewnątrz modalu, nie musisz dodawać #myModal do linku. Należy go używać jak to

"?updateid=<?php echo $row['sched_id'];?>" 

zamiast

"#myModal?updateid=<?php echo $row['sched_id'];?>" 

Mam nadzieję, że to pomoże.

+1

nadal nie działa, –

+0

Czy na pewno nie musisz włączać home.php w adresie URL aktualizacji, jak w przypadku usuwania? –

+0

już wypróbowałem, do roboty. –

0

Jeśli używasz tego samego modalu z różnymi linkami aktywacyjnymi na całej stronie, będziesz musiał wypełnić javascript/jquery. Modal nie przyjmuje parametrów z docelowego ciągu, chyba że zmienisz bezpośrednio funkcję boostrap.js (nie polecam mieszać z plikami js dostawcy). Możesz użyć wbudowanej metody onclick, jeśli z jakiegoś powodu nie możesz dodać własnego skryptu do strony.

JQuery:

<a href="#myModal" data-toggle="modal" class="btn btn-warning" data-target="#myModal" onclick="$('#updateid').val('<?= $row['sched_id'] =?>')">Update</a>

Musisz ukryte wejście na formularzu <input type='hidden' id='updateid' name='updateid'/> które następnie przekazać parametr po przesłaniu formularza za pomocą metody GET.

Jeśli używasz tego jako jedyny link do modalnego można echo swoje pole w modalnym <input type='hidden' name='updateid' value='<?= $row['sched_id']?>'/>

1

Trzeba przy użyciu tego skryptu, aby Twój modalne.

<a data-toggle="modal" data-target="#modal-target" data-id="<?= $idyouwant ?>">Change</a> 

można wypełnić swój modal z HTML, który chcesz poprzez ajax/jquery jak ten javascript

$('#modal-target').on('show.bs.modal', function(ev){ 
    var modal = $(this); 
    var link = $(ev.relatedTarget); 
    var id = link.data('id'); 
    modal.find('.modal-body').load('yourserver/?param=' + id); // will load modal body that you want 
} 

następnie można skonfigurować skrypt, jak chcesz.

-1

@tjfo dokonał obserwacji w komentarzu oryginalnego pytania i jest poprawny. Przeglądarka nie wywołuje twojego skryptu ze względu na link "#Modal? ...". Gdy powiesz przeglądarce, że chcesz załadować nową lokalizację "#" na tej samej stronie, przeglądarka nie komunikuje się z serwerem, aby uzyskać nową instancję strony.

Jeśli chcesz, aby działało to bez użycia javascript do wysyłania wiadomości na serwer, możesz utworzyć unikalne punkty dostępu, z których każdy ma swój własny adres URL na serwerze.Zmusiłoby to przeglądarkę do ponownego załadowania strony przy każdym wywołaniu i wysłałoby żądanie do serwera, aby ukończyć działanie.

Podobnym podejściem byłoby zmiana ustawień serwera WWW, tak aby wywołania nowych adresów URL były przekierowywane do głównego skryptu (na przykład index.php).

Żadne z tych podejść nie jest naprawdę zalecane, ponieważ twój skrypt używa odniesień do $ _POST, a przeglądarka nie wysyła danych POST podczas ładowania nowej strony.

Najczystszą metodą byłoby użycie przycisku ładowania początkowego w celu wywołania funkcji javascript z niezbędnym identyfikatorem. Użyj javascript do utworzenia adresu URL. Spakuj WSZYSTKIE swoje dane w danych POST (patrz uwaga po akapicie). Użyj javascript, aby połączyć się z serwerem (odczytaj w AJAX) z danymi POST, a następnie odpowiednio obsłuż odpowiedź.

(Uwaga: nie ma sensu wysyłać danych GET i danych POST na to samo żądanie --- uwaga, jeśli nalegasz na opcję wysyłania identyfikatora za pomocą parametrów GET od czasu do czasu, możesz użyć zmienna $ _REQUEST, aby jednocześnie uzyskać dostęp do danych $ _POST i $ _GET).

Cieszę się, że mogę przez to przejść z Tobą w dziale komentarzy. Opublikuj więcej kodu, a więcej osób może zapewnić dodatkową pomoc.

Powiązane problemy