当前位置: 首页 > 知识库问答 >
问题:

提交表单后更新会话

毕魁
2023-03-14

审议本届会议:

echo '<img src = "'.$_SESSION['userpic'].'" class = "changepic">';

这是一个在数据库中显示用户图像的图像,带有会话变量!然而,在我的网站中,我正在使用上传图像表单更改用户图片,用户图片正在更新,但旧图片将保留,直到我刷新页面…我希望避免刷新页面以解决此问题。。。。

    <form action = "upload.php" id = "bildUppladdning"  method = "post" enctype = "multipart/form-data" target = "hiddenFrame">
    <input type = "file" name = "file" id = "fileToUpload" accept="image/*" style = "display:none" onchange="form.submit()">
    </form>

请注意,我的目标是一个iframe,而不是重定向到我的操作。。。

if(isset($_FILES['file']) ){

move_uploaded_file($_FILES['file']['tmp_name'],'files/'.$_FILES['file']['name']);

session_start();
$username = $_SESSION['user'];
$userpic = 'files/'.$_FILES['file']['name'];
$id = $_SESSION['id'];

include ("connect.php");
$sql = $con->prepare('UPDATE users SET username=?, userpic=? WHERE id = ?');
$sql->bind_param("ssi",$username,$userpic,$id);
$sql->execute(); 
$sql->close();
$con->close();  
$_SESSION['userpic'] = $userpic;
}
else{
$_SESSION['checked'] = '<div class = "check"> NO</div>';}

这是我的上传表格,你可能不需要,但我会把它放在这里...

例如:

$("#fileToUpload").on('submit', function(response)
{
$.ajax({
url: "update.php"
});
return false;
});

使现代化php示例

<?php 
 $_SESSION['userpic'] = $row->userpic;
?>

所以为了简单起见,我想在提交表单时“更新”这个echo img标签,而不刷新或重定向..

你知道我怎么解决这个问题吗?

共有3个答案

罗茂实
2023-03-14

如果您想更改来自会话变量的当前图片,而无需使用页面刷新。您需要通过脚本或jquery方法更改属性。

下面是示例代码

$("#fileToUpload").submit(function(response)
{
    $.ajax({url: "update.php",});
    document.getElementsByClassName("changepic").src= response.fullImagePath;
    return false;
});
龚鸿雪
2023-03-14

实际上...这个问题并不像你想象的那么简单。你想上传一个文件,然后一旦上传完成,触发一个回调。这并不像人们想象的那样简单。

你应该尝试使用这个插件:

https://github.com/blueimp/jQuery-File-Upload

还有一个指向wiki的链接

https://github.com/blueimp/jQuery-File-Upload/wiki

何涵衍
2023-03-14

您需要使用AJAX来实现您想要的。

您的HTML不太有意义,或者您忘记向我们提供更多信息。必须有一种选择文件的方法。无论出于什么原因,HTML代码都隐藏了文件输入按钮。所以我们假设它没有被隐藏:

<input type="file" id="fileToUpload" accept="image/*">

首先,使用jQuery将onchange事件处理程序附加到您的文件输入按钮。在处理程序中,我们将选定的文件存储在FormData对象中,使用AJAX发送文件需要该对象。

$('#fileToUpload').change(function () {
    var file = this.files[0];
    console.log('file', file);

    var formData = new FormData();
    formData.append('file', file);

    $.ajax({
        type: 'post'
        url: "upload.php",
        cache: false,
        contentType: false, // important
        processData: false, // important
        data: formData,     // important
        success: function (res) {
            console.log('response (url)', res);
            $('.changepic').attr('src', res);
        }
    });
});

其次,我们的AJAX请求预期的响应是URL,因此我们还需要更改您的PHP脚本。

// not within the scope of the question, but you need to do additional checks
if (isset($_FILES['file'])){
    $userpic = 'files/'. $_FILES['file']['name'];
    move_uploaded_file($_FILES['file']['tmp_name'], $userpic);

    session_start();
    $username = $_SESSION['user'];
    $id = $_SESSION['id'];

    include "connect.php";
    $sql = $con->prepare('UPDATE users SET username= ?, userpic=? WHERE id = ?');
    $sql->bind_param("ssi", $username, $userpic, $id);
    $sql->execute(); 
    $sql->close();
    $con->close();

    $_SESSION['userpic'] = $userpic;

    // important: output ONLY (and i mean ONLY) the path of your newly uploaded pic
    // the output of your script is the AJAX response that will be returned back in your JavaScript
    echo $userpic;
} else {
    $_SESSION['checked'] = '<div class = "check"> NO</div>';
}

如果出现问题,查看控制台日志,了解问题出在哪里。

 类似资料:
  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

  • 表单提交成功后,页面不会重定向到感谢页面,在控制台上,我得到了错误响应,因为AMP4Email不支持重定向。请让我知道重定向功能何时工作。 我们正在使用 在Php中,我添加了重定向头

  • 问题内容: [编辑]经过大量挖掘,我发现问题出在我如何将CKEditor集成到页面中。如公认的答案所述,在这种情况下,简单而明显的方法 确实 有效。 你好 在按下“提交”按钮之后,但在实际提交之前,我需要更改表单的值。 我尝试挂钩到表单的“ submit”事件,并在那里手动更改文本字段的值,但是看起来实际上并没有更改提交的值。 有任何想法吗? 问题答案: 我对您的说法感到奇怪,即处理程序对您不起作

  • 问题内容: 我创建了一个松弛的对话框/表单来收集用户的一些信息。表单呈现得很好,我可以毫无问题地填写表单,但是单击“提交”后它不会关闭,而是出现错误: 我们在连接时遇到了一些麻烦。再试一次? 如文档中所述,我已经发回200状态OK 。 有什么事吗 我可以看到我的应用的控制台日志。 问题答案: 仅发送200 OK还不够。 它还必须为空,或者包含正确格式的输入验证错误列表,如JSON。如果您的回复包含

  • 问题内容: 我想通过ajax更新表单提交而无需重新加载页面并根据它更新视图。我尝试了不同的方法,但作为Rails的新手失败了。 这是情况。 模态 在查看表单代码。 创建动作 最后我认为我想改变 花了很多时间用AJAX进行更新,但每次都失败。有什么需要帮助的吗?提前致谢。 问题答案: 您的代码不错,但是对于 ajax来说 , 您需要添加到表单中。 此外,在服务器端, 您需要在其中创建一个js.erb

  • 问题内容: 我的问题是,当上一页由表单创建时,后退按钮会使浏览器说“页面已过期”。 例: 第1页:使用搜索条件提交的表单($ _POST请求,该表单指向第2页) page2:接收$ _POST请求并显示结果(带有链接的用户列表,指向page3) 第3页:显示用户个人资料 现在,当访客单击浏览器中的“后退”按钮时,它将显示类似“页面已过期”的信息。 而是应该在没有警告的情况下显示前一页(第2页,带有