Подтвердить что ты не робот

IMG-каталог не может быть сохранен в db, но просматривается из тех же переменных, которые используются в запросе

Я пытаюсь загрузить изображение на свой сервер, используя следующую форму от Sanwebe. Здесь можно найти. Однако, когда я нажимаю выгрузку, новый большой палец загружается отлично. Однако мое изображение не может быть загружено в базу данных, используя те же самые переменные, из которых просматривается изображение. Как так? Я попытался помещать информацию db только в начале запроса. Вот так:

echo '<div align="center">';
echo '<img src="images/profile-pictures/'.$thumb_prefix . $new_file_name.'" alt="Thumbnail">';
echo '</div>';

$profile_pic_temp = "../images/profile-pictures/" . $thumb_prefix . $new_file_name;
$profile_pic_full_temp = "../images/profile-pictures/" . $new_file_name;
$session_user = $_SESSION['user_confirm'];

require 'database.php';

$profile_pic_db_upload = $db->prepare("UPDATE login SET profile_picture_temp = :profile_pic_temp, profile_picture_full_temp = :profile_pic_full_temp WHERE user_session = :session_user");
$profile_pic_db_upload->bindParam(':session_user', $session_user, PDO::PARAM_STR);
$profile_pic_db_upload->bindParam(':profile_pic_temp', $profile_picture_temp, PDO::PARAM_STR);
$profile_pic_db_upload->bindParam(':profile_pic_full_temp', $profile_picture_full_temp, PDO::PARAM_STR);
$profile_pic_db_upload->execute();
$confirm_upload_db = $profile_pic_db_upload->rowCount();

if($confirm_upload_db != 0){
    $popup_message = "Profile picture has been uploaded.";
    echo $popup_message;
}
else{
    $popup_message = "Profile picture could not be uploaded.";
    echo $popup_message;
}

ИЗМЕНИТЬ ДВА: Теперь запрос выполняется, однако я получаю обратную связь "Изображение профиля не может быть загружено". Почему запрос не работает должным образом?

EDIT FOUR: Я попытался изменить user_session = :session_user на id = 1. Затем я получаю успешную загрузку, однако значение вводится только в profile_picture_temp и устанавливается в 0. Как-то переменная bindParam меняет значение. Почему?

ИЗМЕНИТЬ ТРИ: Теперь я попытался использовать mysqli. Здесь же результаты. Возврат не может быть загружен. Однако не изменяет значение в БД.

$sql = "UPDATE login SET profile_picture_temp = ? AND profile_picture_full_temp = ? WHERE user_session = ?";
$stmt = $mysqli->prepare($sql) or die ("Database error<br>" . $sql . "<br><b>Error message:</b> " . $mysqli->error);
$stmt->bind_param("sss", $profile_picture_temp, $profile_picture_full_temp, $session_user);
$stmt->execute() or die("Something went wrong");
if($stmt->fetch()){
    $popup_message = "Profile picture has been uploaded.";
    echo $popup_message;
}
else{
    $popup_message = "Profile picture could not be uploaded.";
    echo $popup_message;
}
$stmt->free_result();
$stmt->close();
4b9b3361

Ответ 1

Проблема была исправлена ​​с использованием следующего запроса:

$profile_picture_temp = "../images/profile-pictures/" . $thumb_prefix . $new_file_name;
$profile_picture_full_temp = "../images/profile-pictures/" . $new_file_name;
$session_user = $_SESSION['user_confirm'];

$sql = "UPDATE login l SET l.profile_picture_temp = ?, l.profile_picture_full_temp = ? WHERE l.user_session = ?";
$stmt = $mysqli->prepare($sql) or die ("Database error<br>" . $sql . "<br><b>Error message:</b> " . $mysqli->error);
$stmt->bind_param("sss", $profile_picture_temp, $profile_picture_full_temp, $session_user);
$stmt->execute() or die("Something went wrong");

$result = $stmt->affected_rows;
if($result == 1){
    $popup_message = "Profile picture has been uploaded.";
    echo $popup_message;
}
else{
    $popup_message = "Profile picture could not be uploaded.";
echo $popup_message;
}
$stmt->free_result();
$stmt->close();

Я не могу идентифицировать проблему самостоятельно, однако мне удалось исправить ее, добавив UPDATE login l. Используя псевдоним, он каким-то образом зафиксировал его.

Ответ 2

Вы уверены, что эта строка не бросает ошибку PHP...

$confirm_upload_db = $$profile_pic_db_upload->rowCount();
                     ^^

Знаки $$ (два доллара) - это то, как мы ссылаемся на переменную переменную; но $profile_pic_db_upload не содержит имя другой переменной, это ссылка на объект инструкции PDO.

Еще одно примечание. Функция rowCount() возвращает количество строк, на которые ссылается оператор UPDATE; если инструкция UPDATE завершается успешно, но никаких изменений в строке не производится (поскольку значения, назначенные столбцам, совпадают с значениями, которые уже хранятся в столбцах), тогда rowCount() вернет 0.

(Чтобы изменить это поведение, чтобы вернуть число совпадающих строк, вы можете использовать PDO::MYSQL_ATTR_FOUND_ROWS).