Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамический запрос к базе данных!!! Не могу создать запрос... 
:(
    Опции темы
Tangash
Дата 14.11.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



Задача!!!

Существует база данных пользователей
- имя
- адрес
- телефон
- сайт
- e-mail

Существует форма изменения данных пользователей
- имя
- адрес
- телефон
- сайт
- e-mail

Не получается создать динамический запрос на изменение данных пользователя, не зависимо от того какие поля он вводит...

PM MAIL   Вверх
skyboy
Дата 14.11.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



что значит "не получается"? код привести сложно? (подсказываю: HTML-код формы и код PHP-обработчика) Тогда и посмотрим...
PM MAIL   Вверх
Tangash
Дата 14.11.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



Вот код запроса...

$query ="UPDATE `USERS` SET 1";
   if (!empty($newname)) $query .= " , `name` = '".$newname."'";
   if (!empty($newaddress)) $query .= " , `address` = '".$newaddress."'";
   if (!empty($newtel)) $query .= " , `tel` = '".$newtel."'";
   if (!empty($newsite)) $query .= " , `site` = '".$newsite."'";
   if (!empty($newemail)) $query .= " , `email` = '".$newemail."'";
   if (!empty($newpass)) $query .= " , `pass` = '".$newpass."'";
   $query .= " WHERE `id` = '".$id."'";
//выполняем запрос
$r=mysql_query($query);

$newname, $newaddress... это переменные уже поученные из формы...

но этот запрос не работает... не могу ошибку найти...
PM MAIL   Вверх
skyboy
Дата 14.11.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



пункт 1. оформляй код при помощи кнопки "Код" справа выше поля ввода сообщения: и нам проще читать(кто помочь пытается) и сам можешь найти очепятки благодаря подсветке синтаксиса.
пункт 2. что выдает mysql_error?
PM MAIL   Вверх
Tangash
Дата 14.11.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



mysql ничего не выдает, ошибки нет, только обновление записи не происходит, вот вчем проблема...

Добавлено @ 10:56 
Код

$query ="UPDATE `USERS` SET 1";
   if (!empty($newname)) $query .= " , `name` = '".$newname."'";
   if (!empty($newaddress)) $query .= " , `address` = '".$newaddress."'";
   if (!empty($newtel)) $query .= " , `tel` = '".$newtel."'";
   if (!empty($newsite)) $query .= " , `site` = '".$newsite."'";
   if (!empty($newemail)) $query .= " , `email` = '".$newemail."'";
   if (!empty($newpass)) $query .= " , `pass` = '".$newpass."'";
   $query .= " WHERE `id` = '".$id."'";
//выполняем запрос
$r=mysql_query($query);


$newname, $newaddress... это переменные уже поученные из формы...

PM MAIL   Вверх
skyboy
Дата 14.11.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



вообще, конструкция вида UPDATE ... SET 1, вызывает ошибку. Если хочешь сделать, как собирался(добавлять строки с запятой впереди) прописывай поле, которое никак не будет изменяться. Например, так:
Код

UPDATE `users` SET `id`=`id` .....


Добавлено @ 10:58 
Цитата(Tangash @  14.11.2006,  09:55 Найти цитируемый пост)
mysql ничего не выдает

у меня выдало. странный у тебя какой-то MySQL
PM MAIL   Вверх
Tangash
Дата 14.11.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



непонятно... всмысле не меняющееся поле? мне нужно чтобы изменились только те поля которые внес пользователь...
PM MAIL   Вверх
skyboy
Дата 14.11.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Код

UPDATE `users` SET 1

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

Добавлено @ 11:15 
вставь после формирования запроса echo $query, скопируй выданный запрос и брось сюда. а еще лучше - воспользуйся доступом к своей БД и запусти этот запрос в том же phpMyAdmin, или в любом другом средстве связи с базой. и скажи, произошло обновление или нет.
PM MAIL   Вверх
Tangash
Дата 14.11.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



а запятая в запросе выдаст ошибку???
например

Код

$query ="UPDATE `USERS` SET , `name` = '".$newname."' WHERE id='".$id."'";


PM MAIL   Вверх
skyboy
Дата 14.11.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



а сам-то как думаешь?

Добавлено @ 11:33 
конечно, выдаст. почему бы не сделать так:
Код

$query ="UPDATE `USERS` SET id=id, `name` = '".$newname."' WHERE id='".$id."'";

или так:
Код

$flag= true;
$query ="UPDATE `USERS` SET ";
   if (!empty($newname)) 
   {
     $query .= ($flag?', ':'')." `name` = '".$newname."'";
     $flag= false;
   }
   if (!empty($newaddress)) 
   {
     $query .= ($flag?', ':'')." `address` = '".$newaddress."'";
     $flag= false;
   }
........

PM MAIL   Вверх
Tangash
Дата 14.11.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



Не работает твой код!!! Он работает если только введено первое значение, а без него ни как...
PM MAIL   Вверх
skyboy
Дата 15.11.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



да я же и справшиваю: есть у тебя неизменяемые поля или нет? вот и вставил бы, чтоб даже в случае "ничего не пришло" запрос был бы корректным. А вообще - сделал бы себе флаг: если хоть что-то пришло - выполняешь запрос, если ничего нет - совсем не обрабатываешь $_GET  и запрос, соотвественно, не формируешь..
.
PM MAIL   Вверх
skyboy
Дата 15.11.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



хм. два решения. первое: добавлять к запросу всегда с передидущей запятой, а потом - её удалить:
Код

$query= 'UPDATE `users` SET ';
$queryAdd= '';
if (!empty($newname)) $queryAdd .= " , `name` = '".$newname."'";
if (!empty($newaddress)) $queryAdd .= " , `address` = '".$newaddress."'";
if (!empty($newtel)) $queryAdd .= " , `tel` = '".$newtel."'";
if (!empty($newsite)) $queryAdd .= " , `site` = '".$newsite."'";
if (!empty($newemail)) $queryAdd .= " , `email` = '".$newemail."'";
if (!empty($newpass)) $queryAdd .= " , `pass` = '".$newpass."'";
if($queryAdd != '') только если надо будет что-то обновлять
{
 $queryAdd[0]= ''; // удалили первую запятую
 $query= $query.$queryAdd." WHERE `id` = '".$id."'";
 mysql_query($query);
}

второе решение: использование массива для определения списка обновления:
Код

$query= 'UPDATE `users` SET ';
$queryAdd= array();
if (!empty($newname)) $queryAdd[]= "`name` = '".$newname."'";
if (!empty($newaddress)) $queryAdd[]= "`address` = '".$newaddress."'";
if (!empty($newtel)) $queryAdd[]= "`tel` = '".$newtel."'";
if (!empty($newsite)) $queryAdd[]= "`site` = '".$newsite."'";
if (!empty($newemail)) $queryAdd[]= "`email` = '".$newemail."'";
if (!empty($newpass)) $queryAdd[]= "`pass` = '".$newpass."'";
if(count($queryAdd) != 0) только если надо будет что-то обновлять
{
 $query= $query.implode(', ',$queryAdd)." WHERE `id` = '".$id."'"; // лишних запятых не будет ;)
 mysql_query($query);
}


PM MAIL   Вверх
afork
Дата 16.11.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



товарищи вы куда то не туда забрели , по моему все кратно проще .... 

Код

<?php
    $query="update `users` set ";
    if (!isset($_GET['name']))
    {
        $query.="1";
    }
    else 
    {
        //validation 
        if (!empty($newname)) $query .= " , `name` = '".$newname."'";
        if (!empty($newaddress)) $query .= " , `address` = '".$newaddress."'";
        if (!empty($newtel)) $query .= " , `tel` = '".$newtel."'";
        if (!empty($newsite)) $query .= " , `site` = '".$newsite."'";
        if (!empty($newemail)) $query .= " , `email` = '".$newemail."'";
        if (!empty($newpass)) $query .= " , `pass` = '".$newpass."'";
        $query .= " WHERE `id` = '".$id."'";
    }
    $result=mysql_query($query);
 ?>

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1182 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.