2010-06-02 5 views
3

У меня есть сайт, на котором есть запрос на обновление. Пример.
PHP MySQL Update query

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> myName 
       age --> 13 
       image --> (no values) 
       birthdate --> (no values) 

Я только положить значения в имя и возраста. В image и Дата рождения, я ничего не поставил.
Если я редактировать и обновлять его, и я ничего не поставить в имени и в возрасте, я только положить значения в изображениях и даты рождения. Результат такой. (Это Ouput я хотел)

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> myName 
       age --> 13 
       image --> myImage.jpg 
       birthdate --> Feb. 31, 2010 


Это мой код:

 
<?php 
    //mysql connect... 
    //mysql select database... 
$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate"'$birthdate.."' WHERE id = $id"; 
mysql_query($sql); 
?> 

Я использовал этот код, но выход:

 
Table name -> myTable 
Table Content -> id(AI) 
       name --> (no values) 
       age --> (no values) 
       image --> myImage.jpg 
       birthdate --> Feb. 31, 2010 


Смело спросите, не понимаете ли вы мой вопрос
Спасибо

ответ

4

UPDATE оставляет столбцы такими, какие они есть, если вы не указываете новые значения в своем заявлении UPDATE.

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

<?php 

$columns = array("name", "age", "image", "birthdate"); 
$set = array(); 
foreach ($columns as $col) { 
    if (isset($_GET[$col])) { 
     $set[] = "$col = '" . mysql_real_escape_string($_GET[$col]) . "'"; 
    } 
} 
$sql = "UPDATE myTable " 
if ($set) { 
    $sql .= " SET " . implode(",", $set); 
} 
$sql .= " WHERE id = " . (int) $id; 
+0

Спасибо. Это то, что мне нужно. – Jorge

+0

Возможно, лучше использовать '! Empty ($ _ GET [$ col])' вместо 'isset'. Если форма имеет фиксированные входы (например: входы не добавляются или отключены динамически), то пустые входы будут обрабатываться так, как если бы было предоставлено новое значение. –

+0

@ Justin Johnson: Хорошая точка. Сезон по вкусу. :-) –

1

Просто два отдельных запроса:

// update name and age 
$sql = "UPDATE myTable SET name = '$name', age = '$age' WHERE id = '$id'"; 

// Update image and birthday 
$sql = "UPDATE myTable SET image = '$image', birthdate = '$birthdate' WHERE id = '$id'"; 

Кроме того, вы можете просто положить все переменные внутри строки, так как это двойные кавычки.

1

Если вы не хотите менять поле, не включайте его в запрос обновления.

2

у Вас есть ошибка в вашем code--

$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate"'$birthdate.."' WHERE id = $id" 

следует читать:

$sql = "UPDATE myTable SET name = '".$name."', age = '".$age."', image = '".$image."', birthdate = '".$birthdate."' WHERE id = $id" 

, но это, вероятно, просто опечатка. Вы уверены, что переменные устанавливаются правильно? Попробуйте повторить все вары, чтобы убедиться. Кроме того, убедитесь, что в столбцах нет определения данных по умолчанию.

+0

Избили меня к нему: дата рождения "'$ .. дата рождения"' – RobertPitt

+0

Спасибо. ^^. Я забыл знак равенства. – Jorge

0

Лично я считаю, что п.л., как это не так надежны, особенно когда дело доходит до типажей и т.д.

Я рекомендую вам попробовать и реализовать PDO или что-то.

http://php.net/manual/en/book.pdo.php

Othewise, ошибка birthdate'".$birthdate."' ведьма должна быть birthdate = '".$birthdate."'