【问题标题】:PHP MySQL Set Profile Picture From Pre-Selected ImagesPHP MySQL 从预先选择的图像中设置个人资料图片
【发布时间】:2021-04-06 21:23:44
【问题描述】:

我想制作一个更改用户个人资料图片的功能。我不想上传自定义图像,所以我有我的。我有一个显示图片的模式,当用户点击图片时,它会将用户导航到change-prof.php。用户导航到 php 文件后,没有任何反应。只是一个空白页。

 <a href='change-prof.php?id={$id}'>
    <div class='prof-img-con'>
        <img src='/assets/images/profiles/smile.jpg'>
    </div>
</a>

PHP 文件:

<?php

$db = mysqli_connect("localhost", "root", "", "phplogin");
if(!$db)

{

  die("Connection failed: " . mysqli_connect_error());

}
$id = $_GET['id'];
$qry = mysqli_query($db,"SELECT profile_picture FROM accounts WHERE id='$id'");

$data = mysqli_fetch_array($qry);
if (isset($_POST['suspendok'])) {
    $smile= '/assets/images/profiles/smile.jpg';

    $edit = mysqli_query($db,"UPDATE accounts SET profile_picture='$smile' WHERE id='$id'");
    
    if($edit)
    {
        mysqli_close($db); // Close connection
        header("location: index.php?change=success");
        exit;
    }
    else
    {
        echo mysqli_error();
    }       
}
?>

【问题讨论】:

  • 空白页可能表示 PHP 中存在错误,但您在 PHP 配置中关闭了屏幕错误报告(这通常是您在实时站点而不是开发中执行的操作)。将屏幕上的错误报告和/或错误日志配置到文件中,以便您可以获取底层错误消息。
  • 另外,也可能只是您的页面没有输出!当然,$_POST['suspendok'] 将不存在,因为用户单击的链接会生成 GET,而不是 POST,并且没有提交数据(除了查询字符串上的 id)。所以真的,如果你希望它基于从超链接导航到它采取一些行动,那么依赖 POST 变量根本没有意义。
  • 既然您有预定义的图片,请为每张图片添加元素。使用 Ajax 来注册用户的选择。然后保存选择的图片。使用 Ajax 调用
  • P.S. 警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
  • phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。另请参阅mysqli documentation。参数化查询还将大大降低由于未转义的输入值而导致意外语法错误的风险。

标签: php mysql user-profile profile-picture


【解决方案1】:

你的整个代码都写在 if 块下

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

我没有看到这个属性被发布。尝试在此块中添加 else 条件,您会注意到那里正在打印消息。

因此,您需要发布或删除此值。

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 2011-09-09
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2018-12-27
    • 2018-01-16
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多