Как заставить сервер использовать POST вместо GET - PullRequest
0 голосов
/ 26 февраля 2020

Как и многие люди здесь, у меня проблема. Я пытаюсь удалить что-то в базе sql с помощью кнопки html (которая не в форме (не так ли?)). Для этого я использую Ajax и PHP. Мой код Ajax достигает успеха, и все должно работать. Но PHP ищет запрос GET, поэтому POST остается нулевым.

Вот мой Ajax:

    function deleteImg(arg){
      console.log("I'm now in the function");
      var url = window.location.href;
      $.ajax({
           type: "POST",
           url:url,
           data:{action:'delete', id:'arg'},
           beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")},
           success:function(html) {
                console.log("Success :) ");
           }

      });
}

А вот мой php:

<?php

    session_start();

    $dir    = '../uploads/';
    $files1 = scandir($dir);

    function remove($id){
        $file = $dir . $files1[$id];
        unlink($file);
    }


    if ($_SERVER['REQUEST_METHOD'] == 'GET') {
     echo "<script>alert( \" request method is get \" )</script>";
     }


     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      echo "<script>alert( \" La request method is post \" )</script>";
      }

    if(isset($_POST['action'])){

      if( $_POST['action'] == 'delete'){
            header('Location: projets.php');
            remove($id);
      }

    }
?>

Это мой первый вопрос, а engli sh нет мой основной язык, так что извините, если чего-то не хватает.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Ваша remove функция пытается использовать переменные из глобального контекста, но они неизвестны внутри самой функции. Чтобы разрешить доступ к этим переменным внутри функции, либо добавьте их в качестве параметров в функцию, либо объявите как global в пределах.

<?php
<?php
    error_reporting( E_ALL );
    session_start();
    $message=false;

    $dir    = '../uploads/';
    $dir=__DIR__ . '/upload';   #for MY environment
    $files = scandir( $dir );


    function remove( $id ){
        global $dir;
        global $files;
        if( array_key_exists( $id, $files ) ){
            $file = realpath( $dir . '/' . $files[ $id ] );
            return unlink( $file );
        }
        return false;
    }




    if( $_SERVER['REQUEST_METHOD']=='POST' ){
        ob_clean();

        $args=array(
            'action'    =>  FILTER_SANITIZE_STRING,
            'id'        =>  FILTER_SANITIZE_STRING
        );
        $_POST=filter_input_array( INPUT_POST, $args );
        extract( $_POST );


        if( !empty( $action ) && !empty( $id ) ){
            $status=remove( $id );
            $message=$status ? 'File deleted' : 'Error: Unable to find file';
        }

        exit( $message );
    }
?>



<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>Delete...</title>
        <script src='//code.jquery.com/jquery-latest.js'></script>
        <script>
            function deleteImg( event, arg ){
                var url = window.location.href;
                $.ajax({
                    type:"POST",
                    url:url,
                    data:{
                        action:'delete',
                        id:arg
                    },
                    success:function( r ) {
                        console.log( r );
                        event.target.parentNode.removeChild( event.target );
                    }
                });
            }
        </script>
    </head>
    <body>
        <?php
            foreach( $files as $index => $file ){
                if( $file!='.' && $file!='..' && !is_dir( $file ) ) {
                    printf('<a href="#" onclick="deleteImg( event, \'%d\' )">Delete %s</a><br /><br />', $index, $file );
                }
            }
        ?>
    </body>
</html>
0 голосов
/ 26 февраля 2020

Итак, я все еще пытаюсь это исправить. Я обнаружил, что если я заменим $ _POST на $ _GET, значение также не будет установлено.

if(isset($_GET['action']))

Все равно будет ложным. Даже если сервер прослушивает $ _GET ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...