Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. У меня такой вопрос. Есть две таблицы - клиенты и договоры. После того как добавляешь клиента появляется форма для добавления договора, и, соответственно, в таблице договоров есть поле user_id, которое должно показывать к какому клиенту относятся конкретные договоры. Но у меня при добавлении договора передается id либо первого созданного клиента, либо, наоборот, последнего. Что-то я делаю не так, а что не могу понять. Вот кусочек кода:
$sql = "select user_id from ".$user_prefix."_users";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) {
$uid = $row[user_id];
$uid = trim($uid);
if (!$result = $db->sql_query("INSERT INTO ".$user_prefix."_users_dogovors (dogovor_id, user_id, user_numberdogovor, user_data, user_dataend, user_uslugi, user_uslugione, user_zena, user_sbor, user_uslovia, user_coments) VALUES (NULL, '$uid', '$add_user_numberdogovor', '$add_user_data', '$add_user_dataend', '$add_user_uslugi', '$add_user_uslugione', '$add_user_zena', '$add_user_sbor', '$add_user_uslovia', '$add_user_coments')")) {
return;
}
}
Подскажите что не так.
Неактивен
Приведенный Вами код делает что-то малопонятное наподобие обновления всех договоров.
Как Вы определяете id клиента, к которому будет принадлежать добавляемый договор?
Неактивен
Этот код не обновляет договоры, а именно создает новый, вернее сохраняет, сама форма для добавления у меня отдельно. А вот в определении id компании у меня и проблема, я никак не пойму как правильно его определить и передать в таблицу договоров.
Неактивен
select user_id from ".$user_prefix."_users - проблема вот в этом. Этот запрос всегда
вытаскивает всех пользователей. Соответственно, этот кусок кода добавляет по
договору для каждого клиента.
Вообще, я бы делал немного по-другому (простите, что не в ОО-нотации, но как уж
привык):
Неактивен
Для всех клиентов созается договор если убрать $result в if (!$result = $db->sql_query("INSERT INTO ".$user_prefix."_users_dogovors (...) VALUES (...)")) {
return;
}
а так создается договор для первого созданного клиента...
А что значит
mysql_query ("INSERT INTO agreements (...) VALUES (..., $userid, ...); ?
Неактивен
Я там немножко опечатался (кавычку-скобку забыл), подправил
return я пропустил. Да, тогда Вы добавляете договор действительно для одного произвольного
пользователя из таблицы, а не для всех.
В моем случае - это значит "добавить договор для последнего созданного пользователя".
Неактивен
А для последнего созданного пользователя договор у меня добавлялся если переставить фигурную скобку в выражениии while. Мне нужно немного не то... Мне нужно, чтбы в любое время можно было создать договор, для любого клиента, вне зависимости от того, какой клиент был создан последним/первым.
Неактивен
Ну, для того, чтобы создать договор для определенного пользователя, нужно понять,
что значит "определенный". Если Вам известен user_id этого пользователя, то задача
уже решена. Если Вам известно что-то другое, то нужно найти user_id по этому чему-то
другому (SELECT user_id FROM users WHERE что-то другое). Честно говоря, не пойму,
в чем тогда задача состоит
Неактивен
Как мне правильно передать этот id клиента? Его же сначала надо вытащить из таблицы клиентов, а потом записать в таблицу договоров, вот я и пытаюсь понять что у меня в коде не так. Вроде я так и делаю... Я понимаю, что задаю глупые вопросы, я только начала изучать mysql, но проблему мне эту надо решить в любом случае.
Неактивен
Какие данные у Вас есть о клиенте? Что его идентифицирует? По каким данным Вы
собираетесь конкретному клиенту создавать договор? Это фамилия-имя? Номер
паспорта? Что-то еще?
Реализация вторична, поймите для себя, что Вы хотите сделать.
Неактивен
Его идентифицирует поле user_id, такое же поле есть и в таблице договоров, нужно чтобы значение этих полей в обеих таблицах были одинаковые.
Я пробовала сделать запрос вот так:
$sql = "select user_id from ".$user_prefix."_users where user_id=$user_id";
Но тогда вобще договор не добавляется.
Неактивен
Ага, Вы таки увлеклись реализацией Вы делаете запрос вида
"Скажи мне названия овощей в корзине, если известно, что это огурец".
Достаточно просто использовать знание, что у Вас есть огурец.
Если у Вас уже есть user_id, то его уже не нужно ниоткуда получать
Неактивен
Ну что же мне надо сделать, а?
Неактивен
Ничего не надо делать, у Вас уже есть user_id. Просто добавляете новый договор с ним.
db->sql_query("INSERT INTO ".$user_prefix."_users_dogovors (dogovor_id, user_id, user_numberdogovor, user_data, user_dataend, user_uslugi, user_uslugione, user_zena, user_sbor, user_uslovia, user_coments) VALUES (NULL, '$user_id', '$add_user_numberdogovor', '$add_user_data', '$add_user_dataend', '$add_user_uslugi', '$add_user_uslugione', '$add_user_zena', '$add_user_sbor', '$add_user_uslovia', '$add_user_coments')"))
Неактивен
Тогда в поле user_id таблицы договоров заносится вобще 0...
Неактивен
Это значит лишь то, что $user_id у вас равен 0.
Где-то ранее в коде у вас ошибка (в месте присвоения значения переменной). Откуда берется значение переменной $user_id?
Неактивен