2017-01-29 6 views
5

Ich mache eine CRUD-Operation nur mit PHP und Bootstrap. Ich bin derzeit bei Update stecken, weil ich scheinen kann, senden Sie die $_GET['updateid'] zu meinem Modal.Update mit Modal und PHP

Das ist mein href ist, die löschen href funktioniert, aber das Update nicht.

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

Diese PHP sollte die updateid vom href nehmen und es auf die updateStud() Funktion

dieses Update meine Funktion ist
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(); 
    } 
} 

geben, die alle Daten und führt die Abfrage

nimmt
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

Gibt es einen Grund, warum Sie Javascript vermeiden? Leider glaube ich nicht, was du versuchst zu tun. Während der Link zum Löschen eine Serveranfrage ist, ist der Modallink eine Clientanfrage, die nicht Ihr "if (isset ($ _ GET ['update id'])) {") aufruft, da die Seite nicht wirklich gesendet wird. – tjfo

+2

Ich denke, das ist falsch, dass Sie versuchen, dort zu tun. Sie versuchen, den 'updatesid'-URL' GET'-Parameter auf den modalen Anker-Trigger-Link zu setzen. So geht es nicht. Wenn Sie die 'updateid' als' GET'-Parameter übergeben möchten, fügen Sie sie am Ende des Formularaktionsattributs hinzu. Können Sie Ihre Frage bearbeiten und mit dem vollständigen HTML-Code aktualisieren? –

Antwort

0

Wenn Sie die Daten nur mithilfe von modal aktualisieren und die Antwort innerhalb des Modals anzeigen müssen, müssen Sie dienicht hinzufügenzum Link. Sie sollten es wie folgt statt

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

Verwendung von

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

Hoffe, es hilft.

+1

funktioniert immer noch nicht, –

+0

Sind Sie sicher, dass Sie home.php nicht in die Update-URL wie in delete aufnehmen müssen? –

+0

Ich habe es bereits versucht, tun Sie Arbeit .. –

0

Wenn Sie das gleiche Modal mit verschiedenen aktivierenden Links auf Ihrer Seite verwenden, müssen Sie JavaScript/Jquery eingeben. Das Modal akzeptiert keine Parameter aus der Zielzeichenfolge, es sei denn, Sie ändern die Funktion boostrap.js direkt (ich empfehle nicht, mit den Dateien des Herstellers js zu arbeiten). Sie können eine Inline-Onclick-Methode ausführen, wenn Sie aus irgendeinem Grund kein eigenes Skript zur Seite hinzufügen können.

JQuery:

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

Sie werden einen versteckten Eingang auf dem Formular müssen <input type='hidden' id='updateid' name='updateid'/>, die dann einen Parameter übergeben werden, wenn Sie das Formular mit der GET-Methode vor.

Wenn Sie dies als die einzige Verbindung zu Ihrem modalen verwenden Sie Feld in dem modalen echo kann <input type='hidden' name='updateid' value='<?= $row['sched_id']?>'/>

1

Sie müssen dieses Skript auf Ihren modal zu verwenden.

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

Sie können Ihre modal mit html füllen, die Sie wollen über Ajax/jQuery wie dieses 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 
} 

dann können Sie Ihr Skript konfigurieren und wie Sie wollen.

-1

@tjfo hat eine Bemerkung in den Kommentaren Ihrer ursprünglichen Frage gemacht und ist korrekt. Der Browser ruft aufgrund des Links "#Modal? ..." Ihr Skript nicht auf. Wenn Sie dem Browser mitteilen, einen neuen "#" Speicherort auf derselben Seite zu laden, kommuniziert der Browser nicht mit dem Server, um eine neue Instanz der Seite zu erhalten.

Wenn Sie möchten, dass dies funktioniert, ohne Javascript zum Senden von Nachrichten an den Server zu verwenden, können Sie eindeutige Zugriffspunkte erstellen, die jeweils ihre eigene URL auf dem Server haben.Das würde den Browser zwingen, die Seite bei jedem Anruf neu zu laden, und es würde eine Anfrage an den Server senden, um die Aktion abzuschließen.

Ein ähnlicher Ansatz wäre es, die Einstellungen des Webservers so zu ändern, dass alle Aufrufe neuer URLs an Ihr Hauptscript (zB index.php) weitergeleitet werden.

Keines dieser Verfahren wird wirklich empfohlen, da Ihr Skript $ _POST-Verweise verwendet und der Browser beim Laden einer neuen Seite keine POST-Daten sendet.

Die sauberste Methode wäre, Ihre Bootstrap-Taste zu verwenden, um eine JavaScript-Funktion mit der erforderlichen ID aufzurufen. Verwenden Sie Javascript, um eine URL zu erstellen. Packen Sie alle Ihre Daten in die POST-Daten (siehe Hinweis nach Absatz). Verwenden Sie Javascript, um den Server (lesen Sie in AJAX) mit Ihren POST-Daten aufzurufen, und behandeln Sie dann die Antwort entsprechend.

(Hinweis: Es macht keinen Sinn, GET-Daten und POST-Daten auf die gleiche Anfrage zu senden --- beachten Sie, wenn Sie darauf bestehen, die ID von Zeit zu Zeit mit GET-Parameter zu senden, können Sie verwenden die Variable $ _REQUEST, um gleichzeitig auf die Daten $ _POST und $ _GET zuzugreifen.

Ich bin glücklich, dies mit Ihnen in den Kommentaren abarbeiten zu können. Veröffentlichen Sie mehr von Ihrem Code und weitere Personen können zusätzliche Unterstützung bereitstellen.