Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как укоротить код

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как укоротить код
PHucker
Отправлено: 19 Мая, 2014 - 05:58:47
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Здравствуйте! У меня есть такой код:
$name = $_GET["name"];
if ($name == 1) {
$connect = mysql_connect("***********", "report_user", "*********");
$select = mysql_select_db("smartvend", $connect);
$result = mysql_query("SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
FROM
amr_fields fields, amr_read_history history
WHERE
fields.ID=history.FieldName AND ExecDate>= SUBDATE(CURRENT_DATE, INTERVAL 1 DAY)
",$connect);

while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}
}
else {



$connect = mysql_connect("************", "report_user", "****");
$select = mysql_select_db("smartvend", $connect);
$result = mysql_query("SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
FROM
amr_fields fields, amr_read_history history
WHERE
fields.ID=history.FieldName AND ExecDate>= '(CURDATE()'
",$connect);

while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}
}



$name = $_GET["name"];
if ($name == 2) {
$connect = mysql_connect("*******", "report_user", "**********");
$select = mysql_select_db("smartvend", $connect);
$result = mysql_query("SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
FROM
amr_fields fields, amr_read_history history
WHERE
fields.ID=history.FieldName AND ExecDate>= SUBDATE(CURRENT_DATE, INTERVAL 2 DAY)
",$connect);

while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}
}
else {



$connect = mysql_connect("********", "report_user", "**********");
$select = mysql_select_db("smartvend", $connect);
$result = mysql_query("SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
FROM
amr_fields fields, amr_read_history history
WHERE
fields.ID=history.FieldName AND ExecDate>= '(CURDATE()'
",$connect);

while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}
}

и так до 30ти. из-за этого у меня он тормозит. Как укоротить его? Намекните. Я новичок в этом деле.
 
 Top
Flash_PR
Отправлено: 19 Мая, 2014 - 08:57:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Все что повторяется
Например
инклудим

$connect = mysql_connect("********", "report_user", "**********");
$select = mysql_select_db("smartvend", $connect)

Это в функцию наверное можно вынести
while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
PHucker
Отправлено: 19 Мая, 2014 - 10:12:08
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




function forwhile() {while ($data = mysql_fetch_row($result))
{
echo"<tr>";
echo"<td>{$data[0]}</td>";
echo"<td>{$data[1]}</td>";
echo"<td>{$data[2]}</td>";
echo"<td>{$data[3]}</td>";
echo"<td>{$data[4]}</td>";
echo"<td>{$data[5]}</td>";
echo"</tr>";
}
};

я правильно написал?
 
 Top
Flash_PR
Отправлено: 19 Мая, 2014 - 10:39:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




PHucker пишет:
я правильно написал?

Думаю, что нет.
Тебе в функцию надо в качестве аргумента передать результат запроса к базе, входной параметр.
И лучше что бы функция возвращала значение (return) ту же таблицу в виде строки, а не использовала echo, т.е не строила таблицу в теле функции.


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
avtor.fox
Отправлено: 19 Мая, 2014 - 11:32:44
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)





вы такие забавные Смущение
 
 Top
PHucker
Отправлено: 19 Мая, 2014 - 11:54:18
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




покажите пример пожалуйста.
 
 Top
Flash_PR
Отправлено: 19 Мая, 2014 - 12:03:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




avtor.fox пишет:
вы такие забавные Смущение


А нечего подсматривать в нашу песочницу... Язычок


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
PHucker
Отправлено: 19 Мая, 2014 - 12:16:54
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Цитата:
А нечего подсматривать в нашу песочницу... Язычок
Радость

(Отредактировано автором: 19 Мая, 2014 - 12:23:22)

 
 Top
Flash_PR
Отправлено: 19 Мая, 2014 - 12:34:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Код не проверял. Требуются еще проверки на то что пришло из формы.
PHP:
скопировать код в буфер обмена
  1.  
  2. $connect = mysql_connect("***********", "report_user", "*********")  or die("Ошибка соединения!");
  3. mysql_select_db("smartvend", $connect);
  4.  
  5.  
  6. if (isset($_GET["name"]))
  7. {
  8.   $name = $_GET["name"];
  9.   $query ="SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
  10.  FROM
  11.  amr_fields fields, amr_read_history history
  12.  WHERE
  13.  fields.ID=history.FieldName AND ExecDate>= SUBDATE(CURRENT_DATE, INTERVAL $name DAY)";
  14. }
  15. else
  16. {
  17.   $query = "SELECT history.MeterNum, fields.ID, history.FieldName, fields.Description, history.ExecDate, history.FieldValue
  18.  FROM
  19.  amr_fields fields, amr_read_history history
  20.  WHERE
  21.  fields.ID=history.FieldName AND ExecDate>= CURDATE()";
  22. }
  23.  
  24. $sql = mysql_query($query) or die(mysql_error());
  25.  
  26. while ($data = mysql_fetch_row($sql))
  27. {
  28.   echo"<tr>";
  29.   echo"<td>{$data[0]}</td>";  
  30.   echo"<td>{$data[1]}</td>";
  31.   echo"<td>{$data[2]}</td>";
  32.   echo"<td>{$data[3]}</td>";
  33.   echo"<td>{$data[4]}</td>";
  34.   echo"<td>{$data[5]}</td>";
  35.   echo"</tr>";
  36. }
  37.  

(Отредактировано автором: 19 Мая, 2014 - 12:39:33)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
PHucker
Отправлено: 19 Мая, 2014 - 13:52:46
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




понимаете, у меня есть форма:
<form action="<?=$_SERVER["PHP_SELF"]?>" method="get">
Введите дни(от 1 до 30):
<input type="text" name="name"><br>
<input type = "submit" value = "Считать">
</form>

и когда вводят дни от 1 до 30 ти, выводятся соответствующие данные. В вашем коде я не понял где if ($name == 16 (или 18 или 25)). у вас берет только name. поэтому мне приходится каждому значению писать отдельный скрипт. в итоге у меня получилось где-то 1400 строк. и надо придумать хитрый ход и укоротить, что я не могу придумать. как-то надо else и while укоротить. какие есть варианты? SOS!!! Огорчение
 
 Top
Flash_PR
Отправлено: 19 Мая, 2014 - 14:04:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Как я понял, SQL запрос у Вас один и тот же, зачем писать их 30 шт. А если будет миллион?

SUBDATE(CURRENT_DATE, INTERVAL 2 DAY) число выделенное жирным у Вас равно значению пришедшее из формы, т.е. $name.

и тогда меняем на CURRENT_DATE, INTERVAL $name DAY

Вот вы получаете значение из формы и используйте это значение в SQL запросе, подставляя его, только проверяя его тщательно, пользователям верить нельзя.

(Отредактировано автором: 19 Мая, 2014 - 14:22:11)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
PHucker
Отправлено: 20 Мая, 2014 - 05:38:36
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Братюнь, спасибо! Улыбка Хотел нажать на кнопку спасибо, надостатачно соообщений Недовольство, огорчение. Все слишком хорошо работает Улыбка Спасибо еще раз

(Отредактировано автором: 20 Мая, 2014 - 06:55:01)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB