[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как найти причину?
TOK
Вот два файла, первый с говнокодом, второй - переработанный первый, но с нормальным вроде кодом.
Первый работает, а второй выдаёт ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\test2.ru\www\raschot.php on line 70
Как найти причину?

2-й (нормальный но с ошибкой)
PHP
<?php
session_start
();
include_once(
"include/connectdb.php");
include(
'include/user_register/uni-auth.php');

      if (
USER_LOGGED){

        
//проврека в цикле полей формы на корректность заполнения
        
$keys = array(
        array(
'key'=>'namekomand','note'=>'Ваша команда'),
        array(
'key'=>'2Gk','note'=>'id 1-го игрока'),
        array(
'key'=>'2Ld','note'=>'id 2-го игрока'),
        array(
'key'=>'2Cd1','note'=>'id 3-го игрока'),
        array(
'key'=>'2Cd2','note'=>'id 4-го игрока'),
        array(
'key'=>'2Rd','note'=>'id 5-го игрока'),
        array(
'key'=>'2Lm','note'=>'id 6-го игрока'),
        array(
'key'=>'2Cm1','note'=>'id 7-го игрока'),
        array(
'key'=>'2Cm2','note'=>'id 8-го игрока'),
        array(
'key'=>'2Rm','note'=>'id 9-го игрока'),
        array(
'key'=>'2Cf1','note'=>'id 10-го игрока'),
        array(
'key'=>'2Cf2','note'=>'id 11-го игрока'));

        
$keys2 = array(
        array(
'key'=>'2S1','note'=>'id 12-го игрока'),
        array(
'key'=>'2S2','note'=>'id 13-го игрока'),
        array(
'key'=>'2S3','note'=>'id 14-го игрока'),
        array(
'key'=>'2S4','note'=>'id 15-го игрока'),
        array(
'key'=>'2S5','note'=>'id 16-го игрока'));

        
$checktrue;

        foreach (
$keys as $key){
            if (empty(
$_POST [$key['key']]) || preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/"$_POST [$key['key']])) {
                echo 
'<h2 align="center">Параметр «'.$key['note'].'» пуст или <u>задан неверно</u>!</h2>';
            
$check false;
            break;
            }
            }

        if (
$check){
              
//ссыгранность расчитывается только для 11-ти игроков, поэтому:
              
foreach ($keys2 as $key2){
                    if (!empty(
$_POST [$key2['key']])) {
                        echo 
'<h2 align="center">Вы ввели свыше 11-ти игроков!</h2>';
                    
$check false;
                    break;
                    }
              }

              if (
$check){
                    
//хотя для числовых значений конвертация не нужна
                      
foreach ($_POST as $key => $value) {
                            
$value mysql_real_escape_string(iconv("UTF-8""WINDOWS-1251"$value));
                            
$_POST[$key] = $value;
                    }

                
$NameKomand substr ($_POST ['namekomand'],0,20);

                
//определяем уникальное имя для таблицы с матчами: имя пользователя + имя его команды
                
$USER_TABLE_KOMAND $UserName.$NameKomand;

                
//формула расчёта сыгранности сотава
                
$i=0;
                
$result "SELECT *
                           FROM `$USER_TABLE_KOMAND`
                           ORDER BY `id`
                           DESC LIMIT 20"
;
                
mysql_query ($result) or die (mysql_error());
              

//следующая строка - 70 линия                     
                      
while ($row mysql_fetch_array($result)) {
                        
$res array_intersect($row$_POST);
                        
$res2 count($res)/2;
                        if (
$res2==11)
                            {
$i+=1;}
                                else if (
$res2==10)
                                    {
$i+=0.75;}
                                    else if (
$res2==9)
                                        {
$i+=0.5;}
                                        else if (
$res2==8)
                                               {
$i+=0.25;}
                                            else if (
$res2==7)
                                                {
$i+=0.1;}
                                                else if (
$res2<4)
                                                break;
                    }
                
$i=$i*11;
                
round($i);
                echo 
'Ваша сыгранность:';
                echo 
$i;
              }
        }
    }




Спустя 25 минут, 32 секунды (18.10.2009 - 22:47) kirik написал(а):
Дай угадаю.. На строке 70 этого скрипта выполняется функция mysql_fetch_array(), в которую приходит не верное подключение к БД (или вообще не приходит).

Спустя 1 минута, 39 секунд (18.10.2009 - 22:49) sergeiss написал(а):
У тебя $result - это текстовая строка, содержащая запрос. А результат запроса ты никуда не присваиваешь...
Поэтому вот этот код
PHP
$result "SELECT *
                           FROM `$USER_TABLE_KOMAND`
                           ORDER BY `id`
                           DESC LIMIT 20"
;
                
mysql_query ($result) or die (mysql_error());

надо заменить на что-то подобное следующему коду
PHP
$sql "SELECT *
                           FROM `$USER_TABLE_KOMAND`
                           ORDER BY `id`
                           DESC LIMIT 20"
;

                
$result=mysql_query ($sql) or die (mysql_error());

И далее уже можно будет использовать $result так, как ты это делаешь.

Спустя 11 часов, 32 минуты, 48 секунд (19.10.2009 - 10:21) twin написал(а):
Уточнение:
Цитата
У тебя $result - это текстовая строка, содержащая указатель на результат запроса.

Спустя 39 минут, 33 секунды (19.10.2009 - 11:01) sergeiss написал(а):
twin - нет, неверное уточнение smile.gif Посмотри внимательнее.
У автора было именно так, что $result содержит сам текст запроса, и уже потом он пытается использовать эту переменную как результат запроса smile.gif В том и проблема у него. Это и надо устранять.

Спустя 1 час, 51 минута, 37 секунд (19.10.2009 - 12:53) TOK написал(а):
Благадарю за помощь!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.