Доработка кода (php), прошу помощи :)

Тема в разделе "Актуально, только не в тему", создана пользователем Fanamura, 19.07.2009.

  1. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 108
    Симпатии:
    159
    Пол:
    Мужской
    Есть код:
    Код (CODE):
    1. <?php
    2.     $result3 = mysql_query("SELECT MAX(match_id) FROM jos_joomleague_matches WHERE matchpart1_result IS NULL");
    3.         while ($match = mysql_fetch_array($result3)) {       
    4. $result = mysql_query("SELECT COUNT(*) FROM jos_joomleague_tip_results WHERE tip_home > tip_away AND match_id=$match[0]");
    5.     $result2 = mysql_query("SELECT COUNT(*) FROM jos_joomleague_tip_results WHERE tip_home < tip_away AND match_id=$match[0]");
    6.     while ($rowX = mysql_fetch_array($result, MYSQL_NUM) AND
    7.             $rowY = mysql_fetch_array($result2, MYSQL_NUM)) {
    8.     $tips1=$rowX[0]*100/(($rowX[0]+$rowY[0]));
    9.     $tips2=100-$tips1;
    10. бла бла бла
    11.    }
    12.    }
    13.     mysql_free_result($result,$result2,$result3);
    14. ?>


    Денвер показывает мне 500 ошибку, ну не нравится ему эта штука и все тут (хотя работало раньше)))
    Вот, как переписать запрос чтобы все заработало, где я ошибся?
    Если можно, то можно ли оптимизировать мой код? Ибо в php я ни бум-бум, но модули для себя однако пишу :)))
     
  2.  
  3. Offline

    sergv2005 Пользователь

    Регистрация:
    18.01.2006
    Сообщения:
    424
    Симпатии:
    20
    Пол:
    Мужской
    Fanamura, здесь ошибка не в пхп а в запросах к базе.
    Просто, при ошибке в пхп, ошибку выведет в окне браузера, конечно если вывод ошибок не отключен. А при выводе ошибки сервера, а именно - "500 Internal Server Error" - это - "при обработке запроса на сервере один из его компонентов (например, CGI-программа) выдал аварийный отказ или столкнулся с ошибкой конфи- гурации".

    В самом пхп коде я как таковых ошибок синтаксиса не нащёл, а вот в запросах к базе .... , я пока с базой сам ещё не полностью разобрался, но такой синтаксис как подстановка напрямую функции в место параметра не прокатит, это не просто переменная, которая воспринимается в двойных кавычках как её содержимое. Иными словами, такая запись - "SELECT COUNT(*)", не пройдёт. Попробуй вместо функций просто переменные подставить, типа так:

    Код (PHP):
    1. <?php
    2. ....
    3.  
    4. $count=COUNT(*);
    5. $result = mysql_query("SELECT $count FROM jos_joomleague_tip_results ....
    6.  
    7. ....
    8. ?>

    или так:
    Код (PHP):
    1. <?php
    2. ....
    3.  
    4. $result = mysql_query("SELECT ".COUNT(*)." FROM jos_joomleague_tip_results ....
    5.  
    6. ....
    7. ?>

    То есть отдели функцию от текста, иначе, у тебя просто вместо параметра, непосредственно "COUNT(*)" как текст, а не как то что функция должна передать.
    Это оносится ко всем твоим функциям в запросах типа MAX(match_id) и COUNT(*). Да пожалуй и для простых переменных тоже не помешает, хоть они и обрабатываются нормально, но всё же, такой вариант отделения на мой взгляд надёжней, да и наглядней. Имею ввиду второй приведённый вариант
    Код (PHP):
    1. "Текст ".function()." текст ".$var." текст "


    В остальном, вроде ошибок нет, хотя могу и ошибаться, я тоже ещё не большой спец в пхп, хоть уже и написал пару своих мини смсок.
     
    Последнее редактирование: 20.07.2009
  4. Offline

    sergv2005 Пользователь

    Регистрация:
    18.01.2006
    Сообщения:
    424
    Симпатии:
    20
    Пол:
    Мужской
    И тишина, и только мёртвые с косами стоят. ;)
    Fanamura, шо молчишь як партизан, получилось или нет? ;)
     
  5. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 108
    Симпатии:
    159
    Пол:
    Мужской
    sergv2005, неа(( Причем в чем фишка, на Денвере, что был устанволен на этой же машине все работало, переставил Денвер и... вот :(
     
  6. Offline

    sergv2005 Пользователь

    Регистрация:
    18.01.2006
    Сообщения:
    424
    Симпатии:
    20
    Пол:
    Мужской
    Странно. А как ошибка вываливается, только с этим модулем? Попробуй просто закоментировать приведённые тобой строки, и если не вывалится, то по очереди раскоментируй, пока не вывалится. Как вывалится, так значит в той строке и ошибка, тогда можно будет и смотреть дальше.
     
  7. Fanamura
    Offline

    Fanamura Доброта

    Регистрация:
    12.03.2007
    Сообщения:
    5 108
    Симпатии:
    159
    Пол:
    Мужской
    sergv2005, такс... ошибка здесь:
    Код (CODE):
    1. ........
    2.                            WHERE (( m.matchpart1 = $match->matchpart2 AND
    3.                                  m.matchpart2 = $match->matchpart1) OR
    4.                                  ( m.matchpart1 = $match->matchpart1 AND
    5.                                  m.matchpart2 = $match->matchpart2)) AND
    6.                                  m.match_date < '".date('Y-m-d H:i:s',$thistime)."' ORDER by m.match_date DESC LIMIT 1";

    Пока удалил этот код, работает, вроде ничего не изменилось)
     
    Последнее редактирование: 22.07.2009
  8. Offline

    sergv2005 Пользователь

    Регистрация:
    18.01.2006
    Сообщения:
    424
    Симпатии:
    20
    Пол:
    Мужской
    Что у тебя в переменных $match->matchpart1 и $match->matchpart2 ?..., если текстовые значения, то их надо экранировать в одинарные кавычки. Да и лучше их тоже вынеси как и дату, за двойные кавычки.

    В остальном, вроде всё правильно. :)
     
    Последнее редактирование: 23.07.2009

Поделиться этой страницей

Загрузка...