在 PHP 和 Mysql 中同时更新图像和文本

Posted

技术标签:

【中文标题】在 PHP 和 Mysql 中同时更新图像和文本【英文标题】:Updating an image and text at the same time in Php and Mysql 【发布时间】:2017-03-27 02:22:18 【问题描述】:

用户可以在我的网页上添加、编辑和删除内容。人们可以编辑他们上传的文本和图像。但是,如果我只编辑文本,图像将不会显示。当我编辑文本而不是图像时,会在图像应该出现的位置显示一个白框。另一方面,如果我只编辑照片而不编辑其他内容,则会出现图像。当我尝试同时编辑图像和文本时,只有文本会更新。我希望用户能够像在个人资料页面上一样编辑他们的文本和图像。编辑文本和图像后,我希望将旧图像从文件夹中删除。如何同时编辑图像和文本?我没有收到任何错误。请帮忙,我是 phpmysql 的新手。感谢您的时间。 这是代码:

<?php
include "connection.php";
$vid="";
$vname="";
$vprice="";


if(isset($_POST["button_add"]))
$product_name = $_POST["product_name"];
$product_price = $_POST["product_price"];
$product_picture = $_FILES["product_picture"]["name"];

    $qry = mysqli_query($con, "INSERT INTO table_product values('','$product_name','$product_price','$product_picture')") or die("Can not query database" );
    if($qry)
        $target_dir = "picture/";
        $target_file = $target_dir . basename($_FILES["product_picture"]["name"]);
       $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
if(move_uploaded_file($_FILES["product_picture"]["tmp_name"],
$target_file))
    echo"file uploaded";

 else
    echo "Upload fail"; 


       

else if(isset($_POST["button_edit"]))
     $product_name = $_POST["product_name"];
     $product_price = $_POST["product_price"];
     $product_id = $_POST["product_id"];

     if(isset($_FILES["product_picture"]["name"]))
$product_picture = $_FILES["product_picture"]["name"];
    $qry = mysqli_query($con,"Update table_product Set product_name='$product_name', product_price='$product_price', product_picture='$product_picture' Where product_id='$product_id'");
        $target_dir = "picture/";
        $target_file = $target_dir . basename($_FILES["product_picture"]["name"]);
       $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    move_uploaded_file($_FILES["product_picture"]["tmp_name"],$target_file);
      
    else
 $qry = "Update table_product Set product_name='$product_name', product_price='$product_price' Where product_id='$product_id'";

$qry_update = mysqli_query($con,$qry);
    

    if(isset($_GET["delete"]))
$qry = mysqli_query($con, "Delete From table_product Where product_id='".$_GET["delete"]."'" );
    if($qry)
        @unlink("picture/".$_GET["picture"]);
    
    
else if(isset($_GET["edit"]))
    $qry = mysqli_query($con,"Select * From table_product Where product_id='".$_GET["edit"]."'");
    while($row=mysqli_fetch_array($qry,MYSQLI_ASSOC))
        $vid=$row["product_id"];
        $vname=$row["product_name"];
        $vprice=$row["product_price"];
    

?>

 <!DOCTYPE html>
<html>
<head>
<title>Product</title>
</head>
<body>
<form action='<?php echo $_SERVER["PHP_SELF"]; ?>' method="post" enctype="multipart/form-data" >
    <table>
        <tr>
            <td>Product ID</td>
            <td><input type="text" name="product_id" value="<?php echo $vid;?>"></td></tr>
        <tr><td>Product Name</td>
        <td><input type="text" name="product_name"  value="<?php echo $vname;?>"></td></tr>
        <tr><td>Product Price</td>
        <td><input type="text" name="product_price"  value="<?php echo $vprice;?>"></td></tr>
        <tr><td>Product Picture</td>
        <td><input type="file" name="product_picture"></td></tr>
        <tr><td colspan="2">
        <input type="submit" name="button_add" value="Add">
        <input type="submit" name="button_edit" value="Edit"></td></tr> </table>
</form>
<table border=1>
    <tr><th>product ID</th><th>product Name</th>
    <th>product price</th><th>product image</th>  <th>Action</th></tr>
    <?php
    $qry =mysqli_query($con, "Select * From table_product");
    while($row=mysqli_fetch_array($qry,MYSQLI_ASSOC))
        echo '<tr><td>'.$row["product_id"].'</td>';
        echo '<td>'.$row["product_name"].'</td>';
        echo '<td>'.$row["product_price"].'</td>';
        echo '<td><img src="picture/'.$row["product_picture"].'" style=width:100px;height:xpx;"/></td>';

        echo '<td><a href="?edit='.$row["product_id"].'">Edit</a>  |<a href="?delete='.$row["product_id"].'&picture='.$row["product_picture"].'">Delete</a></td></tr>';



    



    ?>
</table>
<br><br><br>
</body>
</html>

【问题讨论】:

题外话,建议,因为你是新人。使用 php pdo 而不是 mysqli。将来您不必担心安全问题。 【参考方案1】:

可能我迟到了

基本上为 textimage path 设置了 UPDATE 查询,但由于您不添加图像,它将是 NULL。进行条件查询是个好主意。

检查条件很重要

使用isset($_FILES["product_picture"]["name"]) 给出真实的即使图像字段为空白。

改为尝试

  if(!empty($_FILES["product_picture"]["name"]))
    $product_picture = $_FILES["product_picture"]["name"];
    $target_dir = "picture/";
    $target_file = $target_dir . basename($_FILES["product_picture"]["name"]);
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    move_uploaded_file($_FILES["product_picture"]["tmp_name"],$target_file);
     $sql = "Update table_product Set product_name='$product_name', product_price='$product_price', product_picture='$product_picture' Where product_id='$product_id'";
    else 
     $sql = "Update table_product Set product_name='$product_name', product_price='$product_price' Where product_id='$product_id'"
   
     $qry = mysqli_query($con,$sql);

【讨论】:

【参考方案2】:

发生的情况是,当您仅编辑文本时,调用的查询也会更新图像路径,但由于您不添加图像,因此它将为 NULL。 一种方法是在编辑点击中构建条件查询

if(isset($_FILES["product_picture"]["name"]))

$product_picture = $_FILES["product_picture"]["name"];
$sql = "Update table_product Set product_name='$product_name', product_price='$product_price', product_picture='$product_picture' Where product_id='$product_id'";
target_dir = "picture/";
    $target_file = $target_dir . basename($_FILES["product_picture"]["name"]);
   $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
move_uploaded_file($_FILES["product_picture"]["tmp_name"],$target_file);

else
 $sql = "Update table_product Set product_name='$product_name', product_price='$product_price' Where product_id='$product_id'"


qry = mysqli_query($con,$sql);

【讨论】:

如果在编辑时未选择图像,则图像字段为空白,那我该怎么办???

以上是关于在 PHP 和 Mysql 中同时更新图像和文本的主要内容,如果未能解决你的问题,请参考以下文章

如何同时在命令窗口和文本文档中获取流输出

将按钮中的图像和文本组合为猕猴桃

编辑文本图层 - Photoshop 脚本

PHP 整洁和文本区域

将记录器消息写入文件和文本区域,同时保持 Java 中的默认行为

text 居中Div与图像和文本相邻