Обновление / вставка Mysql для существующих пользователей

#php #mysql

#php #mysql

Вопрос:

У меня есть форма, которая используется для получения двух входных данных: user_avatar и user_backgroundpicture. Я хочу обновить (если существующий пользователь) или вставить (при регистрации в первый раз) их из одной формы.

Вот мой код:

 <?php
ini_set("display_errors",1);
if(isset($_POST))
{
require '../_inc/db.php';
$Destination = '../Backgroundimages';
if(!isset($_FILES['BackgroundImageFile']) || !is_uploaded_file($_FILES['BackgroundImageFile']['tmp_name']))
{
    //die('Something went wrong with Upload!');
    $BackgroundNewImageName= 'background4.jpg';

    move_uploaded_file($_FILES['BackgroundImageFile']['tmp_name'], "$Destination/$BackgroundNewImageName");
}
else{
$RandomNum   = rand(0, 9999999999);

$ImageName      = str_replace(' ','-',strtolower($_FILES['BackgroundImageFile']['name']));
$ImageType      = $_FILES['BackgroundImageFile']['type']; //"image/png", image/jpeg etc.

$ImageExt = substr($ImageName, strrpos($ImageName, '.'));
$ImageExt = str_replace('.','',$ImageExt);

$ImageName      = preg_replace("/.[^.s]{3,4}$/", "", $ImageName);

//Create new image name (with random number added).
$BackgroundNewImageName = $ImageName.'-'.$RandomNum.'.'.$ImageExt;

move_uploaded_file($_FILES['BackgroundImageFile']['tmp_name'], "$Destination/$BackgroundNewImageName");

}



   require 'authenticationforupload.php';



      $sql1="UPDATE user SET user_backgroundpicture='$BackgroundNewImageName' WHERE user_username = '$user_username'";


$sql2="INSERT INTO user (user_backgroundpicture) VALUES ('$BackgroundNewImageName') WHERE user_username = '$user_username'";

$result = mysql_query("SELECT * FROM user WHERE user_username = '$user_username'");
if( mysql_num_rows($result) > 0) {
mysql_query($sql1)or die(mysql_error());
header('location:../input.php?profile=updated');
}
else{
mysql_query($sql2)or die(mysql_error());
header('location:../input.php?profile=notupdated');

}  








    $Destination = '../uploads';
if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name']))
{
    //die('Something went wrong with Upload!');
    $NewImageName= 'default.png';

    move_uploaded_file($_FILES['ImageFile']['tmp_name'], "$Destination/$NewImageName");
}
else{
$RandomNum   = rand(0, 9999999999);

$ImageName      = str_replace(' ','-',strtolower($_FILES['ImageFile']['name']));
$ImageType      = $_FILES['ImageFile']['type']; //"image/png", image/jpeg etc.

$ImageExt = substr($ImageName, strrpos($ImageName, '.'));
$ImageExt = str_replace('.','',$ImageExt);

$ImageName      = preg_replace("/.[^.s]{3,4}$/", "", $ImageName);

//Create new image name (with random number added).
$NewImageName = $ImageName.'-'.$RandomNum.'.'.$ImageExt;

move_uploaded_file($_FILES['ImageFile']['tmp_name'], "$Destination/$NewImageName");


}



       $sql5="UPDATE user SET user_avatar='$NewImageName' WHERE user_username = '$user_username'";


$sql6="INSERT INTO user (user_avatar) VALUES ('$NewImageName') WHERE user_username = '$user_username'";

$result = mysql_query("SELECT * FROM user WHERE user_username = '$user_username'");
if( mysql_num_rows($result) > 0) {
mysql_query($sql5)or die(mysql_error());
header('location:../input.php?profile=updated');
}
else{
mysql_query($sql6)or die(mysql_error());
header('location:../input.php?profile=notupdated');

}  
 ?>
 

Форма работает нормально, когда загружаются как user_avatar, так и user_backgroundpicture. Если какой-либо один из них загружен, а другой оставлен как есть, действие sql просто закрывает запись, для которой ввод не задан.

Я хочу, чтобы, если задан один ввод, только этот ввод должен быть вставлен в базу данных. Другой следует оставить как есть.

Ответ №1:

Вы можете попробовать это:

 /** Updates the database only if the file field isn't empty. **/
    if( mysql_num_rows($result) > 0) {
        if(!empty($_FILES['BackgroundImageFile'])){ // ALTERNATIVES: ($_FILES['BackgroundImageFile']['name']=='') or ($_FILES["BackgroundImageFile"]["error"] == 4)
            mysql_query($sql1)or die(mysql_error());
            header('location:../input.php?profile=updated');
        }
    } else {
 

ПОДСКАЗКИ:

  • Воздержитесь от использования mysql_* функций.
  • Попробуйте переписать свой код, чтобы сделать его менее хаотичным.

Комментарии:

1. Тем не менее, это не работает! Работает только в том случае, если заданы как user_avatar, так и user_backgroundpicture. Если задан только один ввод, другой просто становится пустым.

2. Вы внесли предложенные изменения в оба экземпляра, верно? Рядом mysql_query($sql5) также?

3. if( mysql_num_rows($result) > 0) { if(!empty($_FILES['BackgroundImageFile'])){ // ALTERNATIVES: ($_FILES['BackgroundImageFile']['name']=='') or ($_FILES["BackgroundImageFile"]["error"] == 4) mysql_query($sql1)or die(mysql_error()); header('location:../input.php?profile=updated'); } } else { mysql_query($sql2)or die(mysql_error()); header('location:../input.php?profile=notupdated'); }

4. if( mysql_num_rows($result) > 0) { if(!empty($_FILES['ImageFile'])){ // ALTERNATIVES: ($_FILES['BackgroundImageFile']['name']=='') or ($_FILES["BackgroundImageFile"]["error"] == 4) mysql_query($sql5)or die(mysql_error()); header('location:../input.php?profile=updated'); } } else { mysql_query($sql6)or die(mysql_error()); header('location:../input.php?profile=notupdated'); }

5. Вы пробовали какие-либо альтернативы? ALTERNATIVES: ($_FILES['BackgroundImageFile']['name']=='') or ($_FILES["BackgroundImageFile"]["error"] == 4) ? Я также не уверен насчет многих header() присутствующих. В том виде, в каком ваш код находится сейчас, сценарий будет иметь конфликты.