

buttonをクリックし、name='action'がPOSTされたら、DELETEをexecute();しているのですが、  
このとき、同時にhome.phpへ遷移させたいです。

`<button type='submit' name='action' value='delete'
onclick="location.href='home.php'">`  
だったり、  
`if ($_POST['action'] == 'delete') {$stmt->execute(); header("Location:
./home.php");}`  
なども試したのですが、うまくいきませんでした。

いろいろ調べて試したのですが、自分の力では、遷移と削除のどちらか一方しか一度に実行できませんでした。  
方法をご存知の方、ご教示いただけると幸いです。

[code]

    $stmt = $db->prepare("DELETE FROM table WHERE url = :url");
    $stmt->bindValue(":url", $url, PDO::PARAM_STR);
    echo "<form method=\"post\"><button type='submit' name='action' 
    value='delete'>Delete</button></form>";
    if ($_POST['action'] == 'delete') {
        $stmt->execute();
    }
    
[/code]


CC BY-SA 3.0
2015-12-02T02:55:48.420
19538
2015-12-02T12:35:37.270
2015-12-02T03:31:59.610
3516
12973
question
javascript php html database
button押下で、削除の実行とページ遷移したい


上記のコードが action=delete 自の処理だとした場合、中でechoしてしまうと php はヘッダを出力してしまいます。  
つまり後から

[code]

    header("Location: ./home.php");
    
[/code]

を実行しても移動しなくなってしまいます。また削除の prepared statement が作られているのに if
の中だけでしか実行していないのも気になります。

[code]

    if ($_POST['action'] == 'delete') {
        $stmt = $db->prepare("DELETE FROM table WHERE url = :url");
        $stmt->bindValue(":url", $url, PDO::PARAM_STR);
        $stmt->execute();
        header("Location: ./home.php");
        return;
    }
    
[/code]

こう書くと action=delete 時に削除クエリを実行し、その後画面遷移してくれるかと思います。


CC BY-SA 3.0
2015-12-02T04:54:10.160
19541
2015-12-02T04:54:10.160
440
19538
answer


JavaScriptでbuttonの押下時の処理を制御するのはどうでしょうか？

[code]

    document.querySelector("button[name='action']").onclick = function() {
      var data = { "name": "John Doe", "age": 25 }; // POSTするデータ
      var url  = "./action.php"; // POST送信先URL
      var xhr  = new XMLHttpRequest();
    
      xhr.open("POST", url);
      xhr.setRequestHeader("Content-Type", "application/json");
      xhr.timeout   = 1000 * 30;
      xhr.onload    = _onXHRLoad;
      xhr.onerror   = _onXHRError;
      xhr.ontimeout = _onXHRTimeout;
      xhr.send(JSON.stringify(data));
    
      /**
       * 非同期通信成功時の処理
       */
      function _onXHRLoad(ev) {
        location.href = "./home.php";
      };
    
      /**
       * 非同期通信エラー時の処理
       */
      function _onXHRError(err) {
        console.error("Error:", err);
        return false;
      };
    
      /**
       * 非同期通信タイムアウト時の処理
       */
      function _onXHRTimeout(err) {
        console.error("Error:", err);
        return false;
      };
    };
    
[/code]


CC BY-SA 3.0
2015-12-02T12:35:37.270
19562
2015-12-02T12:35:37.270
13493
19538
answer