SQL при нажатии на кнопку

Статус
В этой теме нельзя размещать новые ответы.

Фанат

oncle terrible
Команда форума
PHP:
if (!empty($_POST['ticketclose'])) {
    $table = $config['mysql_table'];
    $id    = (int)$_POST['ticketclose'];
    $sql   = "UPDATE $table SET closed=1 WHERE id=$id";
    mysql_query($sql) or trigger_error(mysql_error(). " ".$sql);
}
value к button-у не забудь добавить (и проверить, что добавляется)
 

Фанат

oncle terrible
Команда форума
кстати, по поводу комментариев.
сколько их может быть у тикета?
 

Zeluboba

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

Фанат

oncle terrible
Команда форума
короче, больше одного?
почему тогда пишется в $config['mysql_table']? это ведь основная таблица - для тикетов?
а комменты должны писаться в другую.
откуда вообще берётся эта переменная?
 

Zeluboba

Новичок
короче, больше одного?
почему тогда пишется в $config['mysql_table']? это ведь основная таблица - для тикетов?
а комменты должны писаться в другую.
откуда вообще берётся эта переменная?
includ-ом же инклюжу конфиг)
есть и вторая таблица :) для комментариев)
 

Фанат

oncle terrible
Команда форума
Ну вот непонятно, почему ты комментарии не в неё пишешь
ну, в общем, косяков у тебя в этом коде - как у дурака фантиков

PHP:
if(isset($_POST['ticketcomment']))
одновременно проверять на isset и empty нет смысла. empty цже включает в себя isset
PHP:
if (!empty($ticketcomment))
у тебя нет переменной $ticketcomment
PHP:
$sql4
не надо нумеровать свои переменные. Это просто запрос, который следующей строчкой будет исполнен. и какой он по счёту - абсолютно неважно
к тому же конкретно эта переменная вообще не нужна. и названа она неправильно - никаокго SQL она не содержит.
PHP:
 = mysql_query("
никогда нельзя писать запрос прямо в эту функцию. надо передавать в неё переменную. и эту же переменную выводить в случае ошибки, чтобы можно было увидеь её. плюс, по-хорошему, к этой функции вообще нельзя обращаться в коде, а надо написать собственную функцию, берущую на себя рутинную работу по выполнению запросов, и обращаться уже к ней

дальше вообще какой-то ужас, летящий на крыльях ночи

короче
PHP:
if (!empty($_POST['ticketcomment'])) {
    $id   = (int)$_POST['id'];
    $uid  = (int)$_POST['user'];
    $mess = mysql_real_escape_string($_POST['ticketcomment']);
    $sql  = "INSERT INTO comments VALUES (NULL,$id,$uid,'$mess','$config[time]')";
    mysql_query($sql) or trigger_error(mysql_error(). " ".$sql);
}
как-то так.
это тоже говнокод, но хотя бы без ужасных косяков и читаемый.
 

Zeluboba

Новичок
одновременно проверять на isset и empty нет смысла. empty цже включает в себя isset
скопипастил откуда-то, буду знать :3

у тебя нет переменной $ticketcomment
хых, действительно. будет :)


не надо нумеровать свои переменные. Это просто запрос, который следующей строчкой будет исполнен. и какой он по счёту - абсолютно неважно
к тому же конкретно эта переменная вообще не нужна. и названа она неправильно - никаокго SQL она не содержит.
хорошо

никаокго SQL она не содержит.
на следующих строках) разбил на строки, было нечитабельно пока писал его.
 

Zeluboba

Новичок
написал так..

файл handler.php


PHP:
if (!empty($_POST['ticketopen'])) {
	$table = $config['mysql_table'];
	$ticketid    = (int)$_POST['ticketopen'];
	$sql   = "UPDATE $table SET completed=0 WHERE id=$ticketid";
	mysql_query($sql) or trigger_error(mysql_error(). " ".$sql);
}

if (!empty($_POST['ticketclose'])) {
	$table = $config['mysql_table'];
	$ticketid    = (int)$_POST['ticketclose'];
	$sql   = "UPDATE $table SET completed=1 WHERE id=$ticketid";
	mysql_query($sql) or trigger_error(mysql_error(). " ".$sql);
}



if (!empty($_POST['ticketcomment'])) {
	$table = $config['mysql_table2'];
	$ticketid   = (int)$_POST['ticketid'];
	$username  = (int)$config['username']; // в конфиге $config['username'] = $member_id['name'];
	$ticketcomment = mysql_real_escape_string($_POST['ticketcomment']); // а зачем real?
	$sql  = "INSERT INTO $table VALUES (NULL,$ticketid,$username,'$ticketcomment','$config[time]')"; // id | tid | user | message | timestamp // откуда вы знаете содержание моего конфига и таблицы?О_О // $config['time'] = time();
	mysql_query($sql) or trigger_error(mysql_error(). " ".$sql);
}
 

Фанат

oncle terrible
Команда форума
у тебя неправильное понимание конфига.
ну time - это ещё куда ни шло, даже остроумно.
но id пользователя - это уже перебор.
в конфиге должны быть статические вещи.

что это ещё за mysql_table2? Откуда желание запихать все имена таблиц в конфиг, да ещё и с идиотскими именами?
почему нельзя написать прямо в запросе?

"real" затем, же, зачем и (int), про который ты почему-то не спрашиваешь.
Затем, что у SQL запросов есть свой синтаксис. Который надо соблюдать. К примеру, число должно иметь правильный формат.
В этом смысле, кстати, time, по-хорошему, надо бы тоже форматировать (причём в int, насколько я понимаю).

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

содержание твоего конфига и таблицы я знаю из запроса, который ты сам же написал парой сообщений сверху. включай соображалку уже.
Я обратить твоё внимание на тот факт, что первые два if-а подозрительно похожи между собой, и спросить, как их можно объединить в один. Но теперь думаю, что задачка будет слишком сложная.
 

Фанат

oncle terrible
Команда форума
Повторяю, никакого SQL твоя старая переменная $sql4 не содержит.
можешь сделать echo $sql4; и убедиться.

Разбивать на строки надо тоже с умом. Делая по одному слову на строчку, ты наоборот - ухудшаешь читабельность.
 

Zeluboba

Новичок
Повторяю, никакого SQL твоя старая переменная $sql4 не содержит.
можешь сделать echo $sql4; и убедиться.

Разбивать на строки надо тоже с умом. Делая по одному слову на строчку, ты наоборот - ухудшаешь читабельность.
в плане было вернуть все на одну строку после написания этого самого sql4.

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

но id пользователя - это уже перебор.
в конфиге должны быть статические вещи.
придираетесь?) предлагаете перенести ту строку в главный код?ха

про int я сам уже понял...


Я обратить твоё внимание на тот факт, что первые два if-а подозрительно похожи между собой, и спросить, как их можно объединить в один. Но теперь думаю, что задачка будет слишком сложная.
а тут я чего-то не понял :/ зачем объединять?
 

Фанат

oncle terrible
Команда форума
объединять надо, чтобы было меньше кода и чтобы возможные правки не приходилось дублировать.
вообще, суть программирования - в борьбе с повторениями.
для программиста два одинаковых куска кода должны быть как бельмо на глазу, а руки чесаться сделать из них один.

чтобы в случае чего можно было изменить сразу в конфиге
в случае чего? какой случай тебе приходит в голову? а почему только имя таблицы, а не имена полей, скажем?
я могу понять, если основная таблица приложения/сущности прописывается в конфиге. но дополнительные-то там зачем?
и почему такое идиотское имя - mysql_table2? Когда придёт пора изменять - ты точно вспомнишь, что оно означает?

придираетесь?) предлагаете перенести ту строку в главный код?ха
я предлагаю вообще её не писать. $config['username'] - бессмысленная переменная.

повторяю: конфиг - это конфигурация, настройки. статические параметры приложения.
айди же юзера не имеет отношения к конфиругации, эта переменная все время разная.
что за дурацкая мания писать в конфиг вообще всё, до чего ручки дотянутся?
не надо доводить вещи до абсурда. ты ещё каждый sql запрос в конфиг пропиши (вот тут-то тебе твои номерочки и пригодятся, ага).

но если sqlзапросы ещё можно понять - они статические, то писать в конфиг заведомо меняющуюся переменную - это уже совсем смешно.
не смешивай сущности. id текущего юзера к конфигурации приложения не имеет никакого отношения. и время, кстати, тоже.

если ты хочешь завести какую-нибудь переменную с текущими параметрами скрипта - заведи. Но не называй её конфигурацией, и не смешивай в ней в одну кучу статические настройки и переменные параметры. и называй переменные осмысленно.

непонятно, кстати, почему в таблицу пишется имя юзера, а не его id.
 

Zeluboba

Новичок
непонятно, кстати, почему в таблицу пишется имя юзера, а не его id.
эта вся хрень присобачена будет мб к DLE, оттуда и берется ник юзера. ник юзера пишется в таблицу с комментариями.почему не id - даже отвечать не буду, хм.
 

Фанат

oncle terrible
Команда форума
как это нет?
привязка всегда должна идти по id - это аксиома.
и это о других вариантах "говорить нет смысла"
 

WMix

герр M:)ller
Партнер клуба
так не хочется прерывать вашу милую беседу. но всеже ник - уникальное поле, с точки зрения базы данных оно может быть ключем.
привязка всегда должна идти по id - это аксиома.
по уникальному ключу, яб сказал...
вот почему я выбираю уникальный ключик всегда id не знаю - возможно предрассудок, но хотел бы услышать мнение фаната!
 

Фанат

oncle terrible
Команда форума
ник - ни разу не уникальное поле, хотя и может быть ключОм.
 

Zeluboba

Новичок
так не хочется прерывать вашу милую беседу. но всеже ник - уникальное поле, с точки зрения базы данных оно может быть ключем.
по уникальному ключу, яб сказал...
вот почему я выбираю уникальный ключик всегда id не знаю - возможно предрассудок, но хотел бы услышать мнение фаната!
если бы делал все сам - я бы сделал отдельную таблицу ID | username, а в таблицу с комментариями и тикетами писал бы id юзера :)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху