简体   繁体   中英

How to call a php function from javascript alert

Basically what i am trying to do is- create a page to upload file. Below is the code and its working fine:

    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
            function wow_default_alert() {alert("Successfully saved!"); }
        </script>
    </head>
    <body>

    <form action="index.php" method="post" name="myForm" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="submit">
    </form>

    <?php

         if(isset($_POST["submit"])) {
            if (!file_exists('.\\tigerimg\\')) 
            {
                mkdir('.\\tigerimg\\', 0777, true);
            }
             $target_dir = '.\\tigerimg\\';
            $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
            $uploadOk = 1;
            $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
            // Check if image file is a actual image or fake image


                 $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
                if($check !== false) {
                     "File is an image - " . $check["mime"] . ".";
                    $uploadOk = 1;
                } else {
                     "File is not an image.";
                    $uploadOk = 0;
                }

            // Check if file already exists
            if (file_exists($target_file)) {
                echo "Sorry, file already exists.";
                $uploadOk = 0;
            }
            // Check file size
            if ($_FILES["fileToUpload"]["size"] > 500000) {
                echo "Sorry, your file is too large.";
                $uploadOk = 0;
            }
            // Allow certain file formats
            if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
            && $imageFileType != "gif" ) {
                echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
                $uploadOk = 0;
            }
            // Check if $uploadOk is set to 0 by an error
            if ($uploadOk == 0) {
                echo "Sorry, your file was not uploaded.";
            // if everything is ok, try to upload file
            } else {
                if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file))
                 {
                //  echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
                echo '<script type="text/javascript">
                         wow_default_alert();
                        </script>';
                } else {
                    echo "Sorry, there was an error uploading your file.";
                }
            }
        }
    ?>

But the problem is that if i refresh the page again -after uploading one file successfully, it works with the same post values.

Previously i used the below code to unset post data-which worked for other pages.

clear Code-1

    <?php
    session_start();

      if( strcasecmp($_SERVER['REQUEST_METHOD'],"POST") === 0) 
        {
          $_SESSION['postdata'] = $_POST;
          header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
          exit;
        }

      if( isset($_SESSION['postdata'])) 
        {
          $_POST = $_SESSION['postdata'];
          unset($_SESSION['postdata']);
        }
    ?>

But i cant use it in this one. It shows error:

Undefined index: fileToUpload in C:\xampp\htdocs\up\index.php on line 41
Notice: Undefined index: fileToUpload in C:\xampp\htdocs\up\index.php on line 47
Warning: getimagesize(): Filename cannot be empty in C:\xampp\htdocs\up\index.php on line 47
 Notice: Undefined index: fileToUpload in C:\xampp\htdocs\up\index.php on line 62

So, i tried to also clear the FILES array too by adding 3 lines with the above code.

clear Code-2

    <?php
    session_start();

      if( strcasecmp($_SERVER['REQUEST_METHOD'],"POST") === 0) 
        {
          $_SESSION['postdata'] = $_POST;
          $_SESSION['filedata'] = $_FILES; //new code
          header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
          exit;
        }

      if( isset($_SESSION['postdata'])) 
        {
          $_POST = $_SESSION['postdata'];
          $_FILES = $_SESSION['filedata']; //new

          unset($_SESSION['postdata']);
          unset($_SESSION['filedata']); //new
        }
    ?>

But now its showing only one error:

Warning: getimagesize(C:\xampp\tmp\php1A2F.tmp): failed to open stream: No such file or directory in C:\xampp\htdocs\up\index.php on line 51.

>>> So, here is one question- why is this happening?

Ok, now i tried another way put the above [clear Code-1] inside a php function function remove_post() and call it just after the code of successful uploading- where i called the alert.

This time its working fine. But now the problem is that the alert doesn't appear. So, is it possible to call the function remove_post() when user clicks the ok in alert.

It looks like you are trying to copy from W3Schools web site, which is not the greatest of places. At any rate, in this instance, I think you may want to do all your processing at the top of your page like so:

<?php
// Not sure if you are storing anything in sessions...
session_start();
// Create a root
define("ROOT_DIR",__DIR__);
// Create a function so you can customize it if you want to
function SaveFileToDisk($dir = '/tigeimg/',$allow = array("image/png","image/jpeg","image/gif"))
    {
        // Make directory if not exists
        if(!is_dir($mkdir = ROOT_DIR.$dir)) {
                if(!mkdir($mkdir,0755,true))
                    return 'mkdir';
            }
        // Filter filename
        $name       =   preg_replace("/[^0-9a-zA-Z\.\_\-]/","",$_FILES["fileToUpload"]["name"]);
        // Assign name
        $filename   =   (!empty($name))? $name : false;
        // If empty, record error
        if(!$filename)
            $error[]    =   'nofile';
        // Get mime type
        $mime   =   (!empty($_FILES["fileToUpload"]["tmp_name"]))? getimagesize($_FILES["fileToUpload"]["tmp_name"]) : false;
        // Record if invalid
        if(!$mime)
            $error[]    =   'invalid';
        // Filter out double forward slashes (if user decides to change $dir)
        // and adds too many forward slashes
        $final = str_replace("//","/",ROOT_DIR."/".$dir."/".$filename);
        // If file exists, record error
        if(is_file($final))
            $error[]    =   'exists';
        // If too big record error
        if($filename > 500000)
            $error[]    =   'size';
        // If not in the allowed file types, record error
        if(!in_array($_FILES["fileToUpload"]["type"],$allow))
            $error[]    =   'type';
        // Return array of errors
        if(!empty($error))
            return $error;
        // True or false if no errors are recorded previously
        return (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],$final));
    }

// Just create a simple error returning function
// This is expandable by adding error descriptions stored in database if desired
function ErrorReporting($value = false)
    {
        $msg['invalid'] =   "INVALID File!";
        $msg['type']    =   "The file you are trying to upload is not a valid image type.";
        $msg['exists']  =   "The file you are trying to upload is already uploaded.";
        $msg['size']    =   "The file you are trying to upload is too large.";
        $msg['nofile']  =   "The file you are trying to upload has no name.";

        if($value === true)
            return "Successfully uploaded!";
        elseif(is_array($value)) {
                foreach($value as $error) {
                        $err[]  =   (!empty($msg[$error]))? $msg[$error]:"";
                    }

                if(!empty($err))
                    return implode("",$err);
            }
        else
            return "File failed to upload.";
    }

// If post is submitted
if(isset($_POST["submit"]))
    // Run the uploader function
    $success    =   SaveFileToDisk();

?><!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
<?php
    // if there is an upload, run the js alert
    if(isset($success)) {
?>
function error_alert(errmsg)
    {
        alert(errmsg);
    }

error_alert("<?php echo ErrorReporting($success); ?>");
<?php }
?>
</script>
</head>
<body>

<form action="" method="post" name="myForm" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>

After user clicks OK for alert you can call the php function as

alert('Your alert');
document.write(' <?php remove_post(); ?> ');

Your remove_post() function will get called after user click OK on alert

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM