如何将javascript变量发布到PHP文件以分配给PHP变量?

如何将javascript变量发布到PHP文件以分配给PHP变量?,javascript,php,html,ajax,Javascript,Php,Html,Ajax,我有一个有几个图像的网页。每个图像可以被同一位置上的其他图像替换。每个图像旁边都有一个表单,用于上载新图像。 重要的是,新文件名必须替换为固定名称,例如:cat.jpg变为image1.jpg,dog.jpg变为image5.jpg,具体取决于使用的格式。 我将此html代码用于第一个图像: <div class="w3-padding-8 w3-card-8 w3-center w3-third w3-container "> <div cl

我有一个有几个图像的网页。每个图像可以被同一位置上的其他图像替换。每个图像旁边都有一个表单,用于上载新图像。 重要的是,新文件名必须替换为固定名称,例如:
cat.jpg
变为
image1.jpg
dog.jpg
变为
image5.jpg
,具体取决于使用的格式。 我将此html代码用于第一个图像:

 <div class="w3-padding-8 w3-card-8 w3-center w3-third w3-container ">
                <div class="w3-padding-8 w3-card-8 w3-center w3-container"><img src="images/cat.jpg" class="w3-padding-8 style="width:100%"></div>
                <div class="w3-center w3-container">
                    <form method="POST" action="upload4.php" enctype="multipart/form-data">
                        <input type="file" multiple name="file[]" data-maxfilesize="5000000">
                        <input class="button-primary" type="submit" value="Submit 1">
                    </form>
                </div>
            </div>
如何将
images/image1.jpg
分配给
$sentfile
? 我想我需要AJAX?但是怎么做呢?
我知道Javascript是客户端的,php是服务器端的,但是如何通信…

如果我正确理解了你的问题,你要问的是根据所使用的表单向上传的图像添加一个名称

你可以加上

<input type="hidden" value="here goes the desired name of the image" name="desired name">


然后通过
$\u POST['desired\u name']

获取值。您不需要ajax来实现此功能

首先将输入标记更改为如下所示:

<input type="file" onchange="getNewName_one(this.value)" multiple name="file[]" data-maxfilesize="5000000">

然后在JS中创建一个函数:

<script>
function getNewName_one(str) {
  var break_path = str.split('\\');  // make sure the \\ is actually two inorder for it to work
  var len = break_path.length - 1;  // we need to get the last entry of the loop
  var filename = break_path[len]; // filename contains only the filename now;
  document.cookie = "newImageName_one="+filename;
}
</script>

函数getNewName_one(str){
var break\u path=str.split(“\\”);//确保\\实际上是两个,这样它才能工作
var len=break_path.length-1;//我们需要获取循环的最后一个条目
var filename=break_path[len];//文件名现在只包含文件名;
document.cookie=“newImageName\u one=“+文件名;
}
然后立即更新php

<?php 

$sentfile = $_COOKIE['newImageName_one'];  
?>

如果文件名本身有问题;就像您在输入type=“file”中得到一些wierd名称一样,只需对其进行注释即可。谢谢。

新表格:

<form>
    <input type="file" onchange="changeFile(this.value)" name="file[]" />
</form>

JS:

<script>
    function changeFile(val) {

    var break_path = val.split('\\');
    var len = break_path.length - 1; 
    var filename = break_path[len];

    var ajaxCall = new XMLHttPRequest();
    ajaxCall.onreadystatechange = function(){
          if (ajaxCall.readyState === 4 && ajaxCall.status === 200) {
             var response = ajaxCall.responseText;
          }
      };


      ajaxCall.open("GET", "upload.php?fileName="+filename, true);
      ajaxCall.send();
    }
</script>

函数更改文件(val){
var break\u path=val.split('\\');
var len=中断路径长度-1;
var filename=break_path[len];
var ajaxCall=new-XMLHttPRequest();
ajaxCall.onreadystatechange=函数(){
if(ajaxCall.readyState==4&&ajaxCall.status==200){
var response=ajaxCall.responseText;
}
};
打开(“GET”、“upload.php?fileName=“+fileName,true”);
ajaxCall.send();
}
**您只能使用一个文件upload.php***

然后在upload.php文件中:

<?php

if(isset($_GET['filename'])) {

$sentfile = $_GET['filename'];

}
if (is_array($_FILES['file']['name'])) {
  foreach($_FILES['file']['name'] as $k=>$filename) {
    $uploadfile = $sentfile;
    if (move_uploaded_file($_FILES['file']['tmp_name'][$k], $uploadfile)) {
        // ok
    } else {
        $error_message.= "Error while uploading file ".$filename."<br />";
    }
   }
} elseif(isset($_FILES['file']['name'])) {
$uploadfile = $sentfile;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    // ok
} else {
    $error_message = "Error while uploading file ".$_FILES['file']['name']."<br />";
}
}

if($error_message != '') {
    echo 'Image Uploaded';
} else {
    echo $error_message;
}

?>


“取决于所使用的表格”:不同表格之间的区别是什么?它们有不同的
action
属性值?或者还有什么?可能是@trincot的重复形式都是一样的,但我需要通过发送固定名称来区分它们,可能是在html中,通过一种数据链接,通过post命令将它们发送到javascript文件?@Ankit Singh如何传递值对我来说很有趣,但没有帮助。我是php新手…我会试试这个。。。我必须在php中放置“$\u POST['desired\u name']”吗?如果要获取输入的值,必须从输入中添加具有相应名称的$\u POST变量。好的,另一个问题:值和名称将具有相同的内容?值属性是必须为图像放置所需名称的位置,然后,name属性就是您将通过PHP访问该值的属性。例如:
然后,您将通过
$\u POST['form1']
访问,您将获得“name\u image”。谢谢。当我像你提到的那样插入代码而不做任何更改时,文件以一种奇怪的方式以旧名称上传:在服务器上:C:\fakepath\cat.jpg。我该把这个新名字放在哪里?哇,我还以为是C:\fakepath呢。但是为什么要用老名字,你用了onchange=“”,东西?@backnext编辑。谢谢还有什么事,请告诉我。好的。我使用了你的代码:''但是我认为新的文件名必须插入这里,但是在哪里?现在我在每个表单中都添加了'onchange=“getNewName1(this.value)”,'onchange=“getNewName2(this.value)”,等等。然后为每个表单创建一个新函数,如“function getNewName1(str){document.cookie=“newImageName=“+”images/1.jpg”;}”。这是可行的,但可能会有更短的代码吗?这个Ajax解决方案不适合我。上面写着“上传图像”,但什么也没发生。我不知道怎么了。
<?php

if(isset($_GET['filename'])) {

$sentfile = $_GET['filename'];

}
if (is_array($_FILES['file']['name'])) {
  foreach($_FILES['file']['name'] as $k=>$filename) {
    $uploadfile = $sentfile;
    if (move_uploaded_file($_FILES['file']['tmp_name'][$k], $uploadfile)) {
        // ok
    } else {
        $error_message.= "Error while uploading file ".$filename."<br />";
    }
   }
} elseif(isset($_FILES['file']['name'])) {
$uploadfile = $sentfile;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    // ok
} else {
    $error_message = "Error while uploading file ".$_FILES['file']['name']."<br />";
}
}

if($error_message != '') {
    echo 'Image Uploaded';
} else {
    echo $error_message;
}

?>