MySQL Обновление некоторых полей базы данных без перезаписи полей не изменено

Хорошо, этот меня заводит. У меня есть файловый загрузчик, который загружает файлы .jpg на сервер. Затем я хочу загрузить имя файла .jpg в мою базу данных. Поэтому, когда загружается страница, я могу добавить имя файла из базы данных, и изображения будут отображаться на странице. Это прекрасно работает, но мне также нужно иметь возможность обновлять файлы и имена файлов в базе данных. Если пользователь меняет все файлы и имена файлов, все в порядке. Но если пользователь хочет изменить только один или два файла (ов) и имя файла (ов), оператор обновления MySql заканчивается тем, что некоторые из переменных пустые, тем самым эффективно удаляя существующие имена файлов в записи, вместо того, чтобы оставлять их в покое. Как обычно, я искал stackoverflow и google, прежде чем обращаться за помощью, и я не нашел ничего, что действительно уместно. Вот применимый код.

<?php session_start(); $id = $_SESSION['id']; //This is the directory where images will be saved $target = "imgs/"; // "http://www.surfcup.com/travel_site/images/ "; $targetlogo = $target . basename( $_FILES['imageLogo']['name']); $targetpic1 = $target . basename( $_FILES['image1']['name']); $targetpic2 = $target . basename( $_FILES['image2']['name']); $targetpic3 = $target . basename( $_FILES['image3']['name']); $targetpic4 = $target . basename( $_FILES['image4']['name']); $targetpic5 = $target . basename( $_FILES['image5']['name']); //This gets all the other information from the form $logo=($_FILES['imageLogo']['name']); $pic1=($_FILES['image1']['name']); $pic2=($_FILES['image2']['name']); $pic3=($_FILES['image3']['name']); $pic4=($_FILES['image4']['name']); $pic5=($_FILES['image5']['name']); // Connects to Database mysql_connect("localhost", "surfcup_HotAdmin","password") or die ('I cannot connect to the database because: ' .mysql_error()); mysql_select_db("surfcup_hotels") or die('I cannot connect to the database because: .mysql_error()); $query="UPDATE Hotels SET hotel.imageLogo = '".$logo."', hotel.image1 = '".$pic1."', hotel.image2 = '".$pic1."', hotel.image3 ='".$pic1."', hotel.image4 = '".$pic1."', hotel.image5 = '".$pic1."' WHERE Hotels.id='".$id."'"; mysql_query($query) or die ('Error Updating Hotel '.mysql_error()); //stuff to upload the files below ?> 

Я думаю, мне нужно либо проверить, являются ли переменные нулевыми, либо как-то не загружать их, либо запретить базе данных принимать нулевые записи. Позднее было бы заставить пользователя добавлять 6 файлов, когда он создает запись. Что, если у них было всего 5 или 3? Кажется, я не могу понять, как бы проверить, являются ли переменные нулевыми и загружать только те имена файлов, которые указаны в инструкции UPLOAD. Еще раз спасибо, за вашу помощь. Дейв

Вы можете попробовать это. В основном он проверяет, пусто ли значение. Если это не так, то добавляет значение в массив. В конце мы введем массив в строку, которую мы добавим в ваш запрос. В этом примере я сделал несколько снимков, но вы должны понять это. В моем коде должно работать запрет на синтаксические ошибки.

Хотя я скажу, что это не лучший способ сделать это. Вы можете определенно улучшить это и сделать его более безопасным и эффективным.

 $uploaded_images = array(); if(!empty($logo)){ $uploaded_images[] = "hotel.imageLogo = '".$logo."'"; } if(!empty($pic1)){ $uploaded_images[] = "hotel.image1 = '".$pic1."'"; } if(!empty($pic2)){ $uploaded_images[] = "hotel.image2 = '".$pic2."'"; } $values_to_set = implode(', ', $uploaded_images); $query= "UPDATE Hotels SET " . $values_to_set . " WHERE Hotels.id='" . $id . "'"; 

Я думаю, что лучший способ сделать это – построить свой запрос динамически. Например:

 $images = array(); $images[] = ($_FILES['imageLogo']['name']); $images[] = ($_FILES['image1']['name']); $images[] = ($_FILES['image2']['name']); $images[] = ($_FILES['image3']['name']); $images[] = ($_FILES['image4']['name']); $images[] = ($_FILES['image5']['name']); // Looping index to determine which hotel image it is $index = 0; // Start building query $query = "UPDATE Hotels SET hotel.imageLogo = '".$images[0]."'"; // Loop through images and check if empty string foreach($images as $image) { if(!empty($image) && $index != 0) { // Image name found, add to query $query .= " hotel.image".$index." = '".$image."',"; } // First hotel image iteration needs to be 1 $index++; } // Finish query $query .= " WHERE Hotels.id='".$id."'";