Php 删除和修改数据库中的问题

Php 删除和修改数据库中的问题,php,Php,我正试图: 上传图片 删除旧图片 修改数据库中新图片的文件名 请注意,$foto的值位于lock.php中,它代表图片文件名 lock.php: $ses_sql=mysql_query("select user, name, email2, email, lname, sex, pic1 from miembros where user='$user_check' "); $row=mysql_fetch_array($ses_sql); $login_session=$row['use

我正试图:

  • 上传图片
  • 删除旧图片
  • 修改数据库中新图片的文件名
  • 请注意,
    $foto
    的值位于
    lock.php
    中,它代表图片文件名

    lock.php:

    $ses_sql=mysql_query("select user, name, email2, email, lname, sex, pic1 from miembros    where user='$user_check' ");
    $row=mysql_fetch_array($ses_sql);
    $login_session=$row['user'];
    $foto=$row['pic1'];
    
    以下是我的代码changeprofilepic.php:

    include('lock.php');
    
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    $foto = $_FILES["file"]["name"];
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 2000000)
    && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
    echo "C&oacute;digo de retorno: " . $_FILES["file"]["error"] . "<br>";
    } else {
    echo "<p align='center'><img src='fotoperfil/$foto' width='300'/></p>";  
    echo "<b>Archivo:</b> " . $_FILES["file"]["name"] . "<br>";
    echo "<b>Tipo de Imagen:</b> " . $_FILES["file"]["type"] . "<br>";
    echo "<b>Tama&ntilde;o:</b> " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    if (file_exists("fotoperfil/" . $_FILES["file"]["name"])) {
      echo "<p style='color:red'><b>Error:</b> $foto ya existe! Por favor elija otro nombre de archivo.</p>";
      echo "<p align='center'><button class='bon' onclick='goBack()'>Ir atr&aacute;s</button><input type=button class='bon' onClick='location.href=\"mailto:info@example.org\"' value='Contactar al Administrador'></p>";
    } else {
    
    if(is_file($_SERVER['DOCUMENT_ROOT'] . "fotoperfil/$foto") && $foto != 'nopic.png')      {
       // remove the old file 
    unlink($_SERVER['DOCUMENT_ROOT'] . "fotoperfil/$foto");
    }
    // move the new file *after* the unlink
    move_uploaded_file($_FILES["file"]["tmp_name"],"fotoperfil/" . $_FILES["file"]["name"]);
    // If I understand your comment: update the $foto value with new filename
    $foto = $_FILES["file"]["name"];
    mysql_query("UPDATE miembros SET pic1 = '$foto' WHERE user = '$login_session'"); 
    
    include('lock.php');
    $allowedExts=数组(“gif”、“jpeg”、“jpg”、“png”);
    $temp=explode(“.”,$_文件[“文件”][“名称”]);
    $extension=end($temp);
    $foto=$_文件[“文件”][“名称”];
    如果(($_文件[“文件”][“类型”]=“图像/gif”)
    ||($_文件[“文件”][“类型”]=“图像/jpeg”)
    ||($_文件[“文件”][“类型”]=“图像/jpg”)
    ||($_文件[“文件”][“类型”]=“图像/pjpeg”)
    ||($_文件[“文件”][“类型”]=“图像/x-png”)
    ||($_文件[“文件”][“类型”]=“图像/png”))
    &&($_文件[“文件”][“大小”]<2000000)
    &&in_数组($extension$allowedExts)){
    如果($\u文件[“文件”][“错误”]>0){
    echo“Có;digo de Retrono:”.$\u文件[“文件”][“错误”]。“
    ”; }否则{ 回声“

    ”; echo“Archivo:”.$\u文件[“文件”][“名称”]。
    ”; echo“Tipo de Imagen:.$\u文件[“文件”][“类型”]。
    ”; echo“Tamañ;o:”($_FILES[“file”][“size”]/1024)。“kB
    ”; 如果(文件存在(“fotoperfil/”$\u文件[“文件”][“名称”])){ echo“

    错误:$foto ya existe!支持elija otro nombre de archivo.

    ”; echo“

    红外自动目标识别仪á;s

    ”; }否则{ 如果(是_文件($_服务器['DOCUMENT_ROOT'].“fotoperfil/$foto”)&&&$foto!='nopic.png'){ //删除旧文件 取消链接($_服务器['DOCUMENT_ROOT'].“fotoperfil/$foto”); } //在*取消链接后*移动新文件* 移动上传的文件($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\; //如果我理解你的评论:用新文件名更新$foto值 $foto=$_文件[“文件”][“名称”]; mysql_查询(“更新miembros集pic1='$foto'其中user='$login_session'”);

    问题是代码将删除我刚才上传的同一张图片。我的目标是只删除旧图片。

    您可以在移动新上传的文件之前删除旧文件。您还可以检查是否存在旧文件

    include('lock.php');
    // If I got an old file AND still exists on FS
    if(is_file($_SERVER['DOCUMENT_ROOT'] . "fotoperfil/$foto") && $foto != 'nopic.png') {
      // remove the old file 
      $elim = unlink($_SERVER['DOCUMENT_ROOT'] . "fotoperfil/$foto");
    }
    // move the new file *after* the unlink
    move_uploaded_file($_FILES["file"]["tmp_name"],"fotoperfil/" . $_FILES["file"]["name"]);
    // If I understand your comment: update the $foto value with new filename
    $foto = $_FILES["file"]["name"];
    mysql_query("UPDATE miembros SET pic1 = '$foto' WHERE user = '$login_session'"); 
    

    再次阅读代码。我忘了添加最初在代码中的if!=nopic.png。好吧,分享更大的代码片段可能会更好理解。在任何情况下,你都应该避免删除你的新照片:)我不理解的是:如果在代码开头的$foto值是:cavaliers.gif,在第3行,它仍然作为cavaliers.gi工作f、 但是为什么当它到达第4行时,它读起来就好像第7行的更新已经发生了一样?我已经修改了代码,我正确理解了你的评论吗?我在你以前的代码中遇到了这个错误:警告:取消链接(/home/www/----/fotoperfil/bucks.gif)[function.unlink]:在你的代码中没有这样的文件或目录(假设$foto=='cavaliers.gif'),如果新文件名=='cavaliers.gif'您在上传后删除新文件,如果新文件名是!='cavaliers.gif'您没有将新文件设置到数据库中,在这两种情况下,在我得到一个if-exist文件代码之前,我将更新完整代码$foto=$\u文件[“file”][“name”];@changeprofilepic.php的第6行可能是我现在看到的问题,为什么会发生这种情况。我现在更改变量名称时会通知你。问题出现在第6行,thx,将$foto值更改为picture,因为lock.php的$foto保持不变,thx。