есть такая фунция:
public function update($data, $table, $where)
{
foreach($data as $colum=>$val)
{
$sql="UPDATE $table SET $colum=$val WHERE $where";
$resul=mysql_query($sql) or die(mysql_error());
}
return true;
}
есть такой запрос (имя таблицы и условие указанно верно)
update(array("views_on_life"=>"пофигист"), 'users_anket_data', "user_id=".$usr->id);
на что база данных вадает ответ
Unknown column 'пофигист' in 'field list'
почему он берет "пофигист", как название ячейки, а не значение?
пс. если место букв писать цифры все проходит
Спустя 2 минуты, 44 секунды (29.01.2010 - 19:07) DedMorozzz написал(а):
возьми колонку в кавычки `` , а не '' и не "", а значения в такие ''
Спустя 23 минуты, 44 секунды (29.01.2010 - 19:31) Dmitriy_R написал(а):
поправьте меня если делаю что то не так
update( array(`views_on_life`=> 'пофигист'), 'users_anket_data', "user_id=".$usr->id);
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=пофигист WHERE user_id=1' at line 1
Спустя 23 минуты, 23 секунды (29.01.2010 - 19:54) Dmitriy_R написал(а):
DedMorozzz, спасибо что подсказал куда надо копать, запрос надо писать такой:
update( array("views_on_life"=> "'пофигист'"), 'users_anket_data', "user_id=".$usr->id);
Спустя 51 секунда (29.01.2010 - 19:55) Ice написал(а):
Цитата (Dmitriy_R @ 29.01.2010 - 20:31) |
поправьте меня если делаю что то не так
|
В самом запросе кавычки, в самооом)))
Хотя... хотя... если всё так круто, я бы вообще хранимую процедуру создал в базе и вызывал бы ее - налицо чистота кода и безопасность + чёткая иерархия того, кто чем занимается...
Спустя 3 минуты, 7 секунд (29.01.2010 - 19:58) ИНСИ написал(а):
Dmitriy_R я сделал вот так:
у меня нормально вывелись индексы. И твой код по идее должен работать
$arr = array(3,8,15,25,16,11,10,5,7,30);
foreach($arr as $list => $val) echo $list;
у меня нормально вывелись индексы. И твой код по идее должен работать
Спустя 25 минут, 31 секунда (29.01.2010 - 20:24) ИНСИ написал(а):
попробуй так:
public function updateData($table, $data, $where)
{
foreach($data as $list => $val)
{
$result = mysql_query("UPDATE `{$table}` SET `{$list}` = '{$val}' WHERE {$where}") or die(mysql_error());
}
return true;
}
updateData(array('views_on_life' => 'пофигист'), 'users_anket_data', 'user_id='.$usr->id);
Спустя 4 минуты, 45 секунд (29.01.2010 - 20:28) Dmitriy_R написал(а):
welbox2 огромное спасибо! все работает!
Спустя 4 минуты, 51 секунда (29.01.2010 - 20:33) ИНСИ написал(а):
Dmitriy_R
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 14 минут, 20 секунд (29.01.2010 - 20:48) Dmitriy_R написал(а):
Может кому пригодится (а скорее для себя что бы не забыть )выложу полный скрипт:
создаем массив с полями анкеты
перебираем значения названий колонок таблицы по порядку, проверяется,
есть ли значение $_POST и и если значения $_POST отличается
от значения ранее загруженных данных $ank_data[''.$dtp[$ii], то содается массив где колонка имеет имени нужного поля, а значение
берется из $_POST
массив передается в функцию updateData
и собственно апдейдится нужная таблица
Спасибо всем кто помог и принимал участие в обсуждении!
создаем массив с полями анкеты
$dtp = array("sex","marital_status","birth","views_on_life","political_views",
"city","phone","icq","skape","favorite_music","favorite_movies","my_hobbies","my_favorite_phrase","school","secondary","special_education",
"higher_education","cafe","cinema","shop","gym");
перебираем значения названий колонок таблицы по порядку, проверяется,
есть ли значение $_POST и и если значения $_POST отличается
от значения ранее загруженных данных $ank_data[''.$dtp[$ii], то содается массив где колонка имеет имени нужного поля, а значение
берется из $_POST
for ($ii=0;$ii<=20;$ii++)
{
if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].'']) $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];
}
массив передается в функцию updateData
$db->updateData( $data, 'users_anket_data', "user_id=".$usr->id);
и собственно апдейдится нужная таблица
public function updateData($table, $data, $where)
{
foreach($data as $list => $val)
{
$result = mysql_query("UPDATE `{$table}` SET `{$list}` = '{$val}' WHERE {$where}") or die(mysql_error());
}
return true;
}
Спасибо всем кто помог и принимал участие в обсуждении!
Спустя 9 минут, 41 секунда (29.01.2010 - 20:57) ИНСИ написал(а):
Dmitriy_R, вот это очень странно
очень ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].'']) $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];
Спустя 51 секунда (29.01.2010 - 20:58) arlamar написал(а):
получается, что бы изменить 5 полей в таблице ты выполнишь 5 запросов?))
исправь вот так:
исправь вот так:
public function updateData($table, $data, $where)
{
$updates = array();
foreach($data as $list => $val)
{
$updates[] = "`$list` = '$val'";
}
$set = implode(', ', $updates);
mysql_query("UPDATE `$table` SET $set WHERE $where") or die(mysql_error());
return true;
}
Спустя 8 минут, 9 секунд (29.01.2010 - 21:06) Dmitriy_R написал(а):
welbox2, а чем странность? arlamar, спасибо!
Спустя 2 минуты, 52 секунды (29.01.2010 - 21:09) Kuliev написал(а):
Цитата (Dmitriy_R @ 29.01.2010 - 23:06) |
welbox2, а чем странность? arlamar, спасибо! |
if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].'']) $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];
Зачем ' понаставил (в смысле конкатенация здесь не нужна) да и в ней используют " ковычки