【问题标题】:Uploading Image Location to DB and Image File to Directory using PDO?使用 PDO 将图像位置上传到数据库并将图像文件上传到目录?
【发布时间】:2014-09-28 04:19:14
【问题描述】:

我能否就这个示例代码获得一些帮助,尝试在将链接位置存储在数据库中的同时将图像添加到文件目录,但使用 PDO 而不是旧方法。

它基于我在网上找到的一个示例,该示例带有 dbconnect.php、save.php、addstudent.php 和其他一些不需要此查询的示例。

    <form method="post" name="frmStudent" action="save.php">
    <input type="hidden" name="pid" value="<?php echo $ppid; ?>"/>
        <table>
            <tr><td>First Name</td><td>:</td><td><input type="text" name="fname" required="required" value="<?php echo $pfname; ?>"/></td></tr>
            <tr><td>Last Name</td><td>:</td><td><input type="text" name="lname" required="required" value="<?php echo $plname; ?>"/></td></tr>
            <tr><td>Contact No.</td><td>:</td><td><input type="tel" name="contact" required="required" value="<?php echo $pcontact; ?>"/></td></tr>
            <tr><td>Email</td><td>:</td><td><input type="email" name="email" required="required" value="<?php echo $pemail; ?>"/></td></tr>
             <tr><td>Image</td><td>:</td><td><input type="file" name="email" required="required" value="<?php echo $pimg_url; ?>"/></td></tr>
            <tr><td></td><td></td><td><input type="submit" class="myButton" value="Save"/></td></tr>
        </table>
    </form>

这是保存到数据库的代码

<?php   
error_reporting(0);
    include ("dbconnection.php");
    $fname=$_POST['fname'];
    $lname=$_POST['lname'];
    $contact=$_POST['contact'];
    $email=$_POST['email'];
    $img_url=$_POST['img_url'];
    $id=$_POST['pid'];
    if($id==null){
            $sql="INSERT INTO student(fname,lname,contact,email,img_url)values(:fname,:lname,:contact,:email,:img_url)";
            $qry=$db->prepare($sql);
            $qry->execute(array(':fname'=>$fname,':lname'=>$lname,':contact'=>$contact,':email'=>$email,':img_url'=>$img_url));
    }else{
            $sql="UPDATE student SET fname=?, lname=?, contact=?, email=?, img_url=? where id=?";
            $qry=$db->prepare($sql);
            $qry->execute(array($fname,$lname,$contact,$email,$img_url,$id));   
    }
    echo "<script language='javascript' type='text/javascript'>alert('Successfully Saved!')</script>";
    echo "<script language='javascript' type='text/javascript'>window.open('index.php','_self')</script>";
?>

任何关于如何做到这一点的见解将不胜感激,谢谢。

【问题讨论】:

  • 你需要通过基本抽象来清理你的代码
  • 是的,用那一堆代码很容易破坏你的系统
  • 您认为信息太多?
  • 不,没那么多,但代码中充满了不好的做法,包括:1)打开SQL注入2)open_base_dir相关补丁问题3)缺少抽象
  • 抱歉,我知道您在这方面很精通,但是在我讨论第 1、2 和 3 点之前,您能否以某种方式强调它们?我的学习风格更注重视觉而非文字。

标签: php mysql pdo image-uploading


【解决方案1】:

对于无法获得 Meda 答案的人,只需将 enctype="multipart/form-data" 添加到 &lt;form&gt; 元素即可。

【讨论】:

    【解决方案2】:

    首先修复图像的HTML 输入

    <tr>
        <td>Image</td><td>:</td>
        <td><input type="file" name="image" required="required" value=""/></td>
    </tr>
    

    然后扩展您的PHP 代码:

    <?php   
    error_reporting(0);
    include ("dbconnection.php");
    
    if(is_uploaded_file($_FILES['image']['tmp_name'])){ 
        $folder = "upload/"; 
        $file = basename( $_FILES['image']['name']); 
        $full_path = $folder.$file; 
        if(move_uploaded_file($_FILES['image']['tmp_name'], $full_path)) { 
            echo "succesful upload, we have an image!";
            $fname=$_POST['fname'];
            $lname=$_POST['lname'];
            $contact=$_POST['contact'];
            $email=$_POST['email'];
            $img_url= $full_path;
            $id=$_POST['pid'];
            if($id==null){
                $sql="INSERT INTO student(fname,lname,contact,email,img_url)values(:fname,:lname,:contact,:email,:img_url)";
                $qry=$db->prepare($sql);
                $success = $qry->execute(array(':fname'=>$fname,':lname'=>$lname,':contact'=>$contact,':email'=>$email,':img_url'=>$full_path));
            }else{
                $sql="UPDATE student SET fname=?, lname=?, contact=?, email=?, img_url=? where id=?";
                $qry=$db->prepare($sql);
                $success = $qry->execute(array($fname,$lname,$contact,$email,$full_path,$id));   
            }
    
            if($success){
                echo "<script language='javascript' type='text/javascript'>alert('Successfully Saved!')</script>";
                echo "<script language='javascript' type='text/javascript'>window.open('index.php','_self')</script>";
            }else{
                echo 'db transaction failed';
            }
        } else { 
           echo "upload received! but process failed";
        } 
    }else{ 
        echo "upload failure ! Nothing was uploaded";
    } 
    ?>
    

    【讨论】:

    • 非常感谢 Meda,这是朝着正确方向迈出的一步,但与往常一样,还有其他事情。哈哈!文件上传后,我得到“上传成功,我们有图像!”但我也得到“数据库事务失败”,有趣的是,它确实保存到数据库中,创建了一条新记录。但是当我尝试更新同一条记录时,它不会更新图像字段内容,而是创建另一个新记录。打算调整一些东西,看看能不能得到想要的效果。再次感谢,如果您有更多提示/代码,那就太好了!
    • @kodenavi 你是什么意思
    • 嗯?好的,让我更好地简化问题。 - 文件上传工作并将图像文件放在目录中 - 提交表单后,我得到“成功上传,我们有图像!”并且“数据库事务失败”-这是不正确的,因为它确实完成了数据库事务-但是我使用相同的表单来根据 ID 更新表单案例我想更新同一条记录,而不是更新它会创建新记录.
    • @kodenavi 是 pid null 吗?至于数据库错误,您可以根据需要删除此检查
    • 您好,在拔了几次头发之后,我的问题似乎更多了。此当前代码非常依赖文件上传,如果我不上传文件,我将无法添加或更新记录。如何使上传成为可选?
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2019-07-31
    • 2019-08-02
    • 2016-08-28
    • 2020-12-10
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多