2017-01-29 8 views
5

Я выполняю операцию CRUD, используя только php и bootstrap. Я сейчас застрял в обновлении, потому что я не могу отправить $_GET['updateid'] в мой модальный.Обновление с использованием модальных и php

Это мой HREF, тем удалитьhref работает, но обновление нет.

<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> 

Этот PHP должен взять updateid из href и передать его функции 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(); 
    } 
} 

это мое обновление функция, которая принимает все данные и выполняет запрос

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

Есть ли причина, по которой вы избегаете Javascript? К сожалению, я не думаю, что то, что вы пытаетесь сделать, возможно. Если ссылка удаления является запросом сервера, модальная ссылка - это клиентский запрос, который не будет вызывать ваш «if (isset ($ _ GET ['updateid]]) {« потому что страница на самом деле не отправляется. – tjfo

+2

Я думаю, что это неправильно, вы пытаетесь это сделать. Вы пытаетесь установить параметр 'updateid'' 'GET' для ссылки модального якоря-триггера. Это не так, как это работает. Если вы хотите передать 'updateid' как параметр' GET', то вы добавите его в конец атрибута действия формы. Можете ли вы изменить свой вопрос и обновить с помощью полного html-кода? –

ответ

0

Если вам нужно только обновить данные с помощью модального отображения и отобразить ответ внутри модального кода, вам не нужно добавлять #myModal по ссылке. Вы должны использовать его как этот

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

вместо

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

Надеется, что это поможет.

+1

все еще не работает, –

+0

Вы уверены, что вам не нужно включать home.php в URL-адрес обновления, например, в delete? –

+0

Я уже пробовал, doest work. –

0

Если вы используете один и тот же модаль с различными активирующими ссылками на всей вашей странице, вам нужно заполнить через javascript/jquery. Модаль не принимает параметры из целевой строки, если вы не измените функцию boostrap.js напрямую (я не рекомендую возиться с файлами js vendor). Вы можете сделать встроенный метод onclick, если по какой-либо причине вы не можете добавить свой собственный скрипт на страницу.

JQuery:

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

Вам нужен скрытый вход на форме <input type='hidden' id='updateid' name='updateid'/>, который будет проходить параметр при подаче формы с помощью метода GET.

Если вы используете это в качестве единственной ссылки на ваш модальной вы можете эхо из вашей области в модальных <input type='hidden' name='updateid' value='<?= $row['sched_id']?>'/>

1

Вы должны использовать данный скрипт для вашей покадрово.

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

Вы можете заполнить модальность с HTML, который вы хотите с помощью Ajax/JQuery, как этот 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 
} 

, то вы можете настроить свой сценарий, а как вы хотите.

-1

@tjfo сделал замечание в комментариях к вашему оригинальному вопросу и является правильным. Браузер не вызывает ваш скрипт из-за ссылки «#Modal? ...». Когда вы сообщаете браузеру загружать новое «#» место на той же странице, браузер не связывается с сервером, чтобы получить новый экземпляр страницы.

Если вы хотите сделать это без использования javascript для отправки сообщений на сервер, вы можете создавать уникальные точки доступа, каждый из которых имеет свой собственный URL-адрес на сервере.Это заставит браузер перезагружать страницу для каждого вызова, и он отправит запрос на сервер для завершения действия.

Аналогичным подходом было бы изменить настройки веб-сервера, чтобы вызовы новых URL-адресов были перенаправлены на ваш основной сценарий (например, index.php).

Ни один из этих подходов не рекомендуется, потому что ваш сценарий использует ссылки $ _POST, и браузер не отправляет данные POST при загрузке новой страницы.

Самый чистый метод заключается в использовании кнопки бутстрапа для вызова функции javascript с необходимым идентификатором. Используйте javascript для создания URL-адреса. Пакет ВСЕ ваши данные в данных POST (см. Примечание после абзаца). Используйте javascript для вызова сервера (прочитайте на AJAX) с вашими данными POST, а затем обработайте ответ соответствующим образом.

(Примечание: нет смысла отправлять данные GET и данные POST по одному и тому же запросу --- обратите внимание, если вы настаиваете на возможности отправки идентификатора с использованием параметров GET время от времени, вы можете использовать переменную $ _REQUEST для одновременного доступа к данным $ _POST и $ _GET).

Я рад проработать это с вами в разделе комментариев. Отправьте больше своего кода, и больше людей могут предоставить дополнительную помощь.