यहाँ बहुत सारे लोगों की तरह, मुझे एक समस्या हो रही है। मैं एक एचटीएमएल बटन के साथ एक एसक्यूएल बेस में कुछ हटाने की कोशिश कर रहा हूं (जो एक फॉर्म में नहीं है (क्या मुझे चाहिए?))। इसे प्राप्त करने के लिए मैं अजाक्स और PHP का उपयोग कर रहा हूं। मेरा अजाक्स कोड सफलता तक पहुँचता है और सब कुछ काम करना चाहिए। लेकिन PHP एक GET अनुरोध की तलाश में है ताकि POST शून्य रहे।

यहाँ मेरा अजाक्स है:

    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);
      }
    
    }
?>

यह मेरा पहला प्रश्न है और अंग्रेजी मेरी प्राथमिक भाषा नहीं है, इसलिए अगर कुछ छूट गया है तो मुझे खेद है।

-1
Elouan 26 फरवरी 2020, 12:25
1
यदि आप अजाक्स का उपयोग कर रहे हैं तो फ़ॉर्म की कोई विशेष आवश्यकता नहीं है
 – 
Professor Abronsius
26 फरवरी 2020, 12:30
data:{action:'delete', id:'arg'} data:{action:'delete', id:arg} के आस-पास के उद्धरणों के बिना arg होना चाहिए
 – 
Professor Abronsius
26 फरवरी 2020, 12:32
हाँ, मैंने अभी कोशिश की है और यह कुछ भी नहीं बदलता है :(
 – 
Elouan
26 फरवरी 2020, 12:32
उपयोगकर्ता प्रपत्र डेटा, इस उत्तर को देखें: stackoverflow.com/a/27774479/4414952
 – 
amrography
26 फरवरी 2020, 12:33
beforeSend कॉलबैक भी हटा दें। jQuery स्वचालित रूप से सही सामग्री-प्रकार शीर्षलेख सेट करेगा, इसमें किसी भी तरह से हस्तक्षेप करने की आवश्यकता नहीं है।
 – 
CBroe
26 फरवरी 2020, 12:34

2 जवाब

आपका 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
Professor Abronsius 26 फरवरी 2020, 13:15
हाँ धन्यवाद :), लेकिन फिर भी, निकालें फ़ंक्शन यहां समस्या नहीं है, मैं एक $ POST मान रखने की कोशिश कर रहा हूं जो सेट है ...
 – 
Elouan
26 फरवरी 2020, 13:25
मैंने जो कोड पोस्ट किया है वह पूरी तरह से अच्छी तरह से काम करता है और छवि को हटा देता है ~ शुरुआत में मैंने deleteImg तर्क के लिए तारों का उपयोग किया और फिर इसे आपकी टिप्पणी के अनुसार पूर्णांक का उपयोग करने के लिए संशोधित किया ... ठीक काम करता है
 – 
Professor Abronsius
26 फरवरी 2020, 13:43

इसलिए, मैं अभी भी इसे ठीक करने की कोशिश कर रहा हूं। मुझे पता चलता है कि क्या मैं $_POST को $_GET से प्रतिस्थापित करता हूं, मान न तो सेट है।

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

अभी भी झूठा होगा। भले ही सर्वर $_GET पर सुन रहा हो....

-1
Elouan 26 फरवरी 2020, 13:10