2015-11-25 3 views
4

Теперь обновление работает только в том случае, если все текстовые поля заполнены, поэтому пользователь не может просто обновить productName, например. Ошибка не возникает, но если остальные текстовые поля остаются пустыми, база данных обновляется пробелами и 0. Я хочу, чтобы это обновляло любые текстовые поля, получающие ввод, будь то один или все, и оставляйте остальную информацию отдельно, если ничего не вводится.Обновление PHP через текстовые поля

Если productName для этой строки является Samsung, описание «Телефон» wholesalePrice - 179.99, и я просто обновляю только текстовое поле productName. Я все еще хочу, чтобы описание и оптовая цена оставались неизменными. Прямо сейчас, если я просто обновляю productName только тогда, оптовая цена отображается как 0.00, а описание пустое. Я попытался с помощью или заявлений, а не запятые в запросе и все, что текстовое поле я введенные данные в вернулся через 0.

if(isset($_POST['id'])) { 
    try { 
     $query = "UPDATE products SET productName = :productName, description = :description, wholesalePrice = :wholesalePrice, 
    retailPrice = :retailPrice, category = :category, quantityOnHand = :quantityOnHand 
    WHERE productID = :productID"; 
     $statement = $db->prepare($query); 
     $statement->bindValue(':productID', $_POST['id']); 
     $statement->bindValue(':productName', $productName); 
     $statement->bindValue(':description', $description); 
     $statement->bindValue(':wholesalePrice', $wholesalePrice); 
     $statement->bindValue(':retailPrice', $retailPrice); 
     $statement->bindValue(':category', $category); 
     $statement->bindValue(':quantityOnHand', $quantityOnHand); 
     $statement->execute(); 
     $statement->closeCursor(); 

//reload page after data is entered into the table and display a message if successful for 3 seconds before redirect 
     $page = $_SERVER['PHP_SELF']; 
     header('Location: ' . $_SERVER["HTTP_REFERER"]); 
     exit; 
+0

только обновить столбцы, если значение не является пустым [MySQL столбец обновление, только если значение не пусто, где] (http://stackoverflow.com/questions/25857895/mysql-update-column-only-if- value-not-empty-where) – Mazaka

+0

Как это работает с привязками? – Kr4ckl3s

ответ

3

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

$fields = array('productName', 'description', 'wholesalePrice', 'retailPrice', 'category', 'quantityOnHand'); 
$values = array(); 
$binds = array(); 

foreach($fields as $key => $value) { 
    if (isset($_POST[$value])) { 
     $values[] = $value.' = :'.$value; 
     $binds[':'.$value] = $_POST[$value]; 
    } 
} 

if (!empty($values)) { 
    $query = "UPDATE products SET "; 
    $query .= implode(', ', $values); 
    $query .= " WHERE productID = :productID"; 
    $binds[':productID'] = $_POST['id']; 
    $statement = $db->prepare($query); 
    $statement->execute($binds); 
    $statement->closeCursor(); 
} 

EDIT:

Если у вас есть значения, хранящиеся в переменных, то вы можете использовать переменные переменные:

foreach($fields as $key => $value) { 
    if (isset($$value)) { 
     $values[] = $value.' = :'.$value; 
     $binds[':'.$value] = $$value; 
    } 
} 
+0

Я не уверен, как это сработает. Текстовые поля заполняются на другой странице. search.php -> update.php -> updateFunct.php -> update.php Данные получены на search.php, и данные этой конкретной строки передаются по ссылке обновления на страницу update.php. UpdateFunct.php обрабатывает обработку. – Kr4ckl3s

+0

Затем вы можете использовать переменные переменные. Проверьте обновленный ответ. –

0

Вам необходимо пройти все существующие значения для формирования поля так, имеющиеся данные передается в обновление sql, если ничего не меняется. При отправке подтвердите данные, затем выполните обновление.

<textarea name="description">'.$row['description'].'</textarea> 

if(isset($_POST['id'])) { 
    $productname = $_POST['productname']; 
    $description = $_POST['description']; 
    // etc .... 
    try { 
    // sql 
    }catch{ 
    // error 
    } 
} 
+0

Вам нужно указать, ЧТО вы пытаетесь поймать. Вы не можете просто поставить 'catch {}' и ожидать, что он будет работать. http://php.net/manual/en/language.exceptions.php#language.exceptions.catch – tftd

+0

Форма написана на отдельной странице. update.php содержит текстовые поля, а updateFunct.php имеет вышеуказанный код. Как работает страница, пользователь может ввести что-то в поле поиска, например «Samsung», и в базе данных перечислены все сведения обо всех доступных Samsung, а также кнопка обновления и удаления рядом с каждой строкой. При щелчке по обновлению он переходит в форму обновления, на которой половина отображает текущую информацию, а другая половина страницы позволяет вводить данные для обновления. После нажатия кнопки «Отправить» он обновляется и обновляется с новым входом, отображаемым на отключенной половине страницы. – Kr4ckl3s

+0

Заявление о выводе, которое у меня есть, не является проблемой. Он ловит и обрабатывает ошибки. Больше ничего. – Kr4ckl3s

Смежные вопросы