webew
Войти » Регистрация
 
PHP

Помогите решить проблему с кодом!

30 сентября 2009, 17:39
Автор: kpachbiu
Есть код PHP:

<?

include("inc/db_connect.php");

$stat = mysql_fetch_array(mysql_query("SELECT *  FROM `players` WHERE `user` = 'ххххх' AND `pass` = 'ххххх' LIMIT 1"));
  mysql_query("SET CHARSET cp1251");

if ($Attack) {
       
                if (empty($login)) $msg = "Укажите логин!";
                else {
                        $chl=mysql_fetch_array(mysql_query("SELECT 'id', 'v_time', 'k_time', 'user', 'room', 'level', 'hp_now', 'battle', 'last_battle', 'vitality', 'travma', 'rank', 'lpv', 'rase_skill' FROM `players` WHERE 'user'='".addslashes($login)."'"));

                        if ($chl['user'] == $stat['user']) $msg="Нападение на самого себя - это уже мазохизм...";
                        elseif ($chl['rank'] !=60) $msg="Персонаж <u>$login</u> не является ботом!";
                        elseif ($stat['travma']>$now) $msg="С травмой в бой нельзя!";
                        elseif ($stat['level']!=$chl['level']) $msg="Выбери равного противника!";
                        elseif ($chl['room']!=2) $msg="Для нападния Вам необходимо находится в одной комнате!";
                        elseif ($stat['hp_now']<(($stat['hp']+$stat['vitality']*5)*0.33)) $msg="Вы слишком ослаблены для боя!";
                        elseif ($chl['hp_now'] <= 5  && $chl['rank']<>60) $msg="Персонаж <u>$login</u> слишком слаб для поединка!";
                        elseif (((time()-$chl['lpv'])<10) && ($chl['battle'] == $chl['last_battle'] || !$chl['battle']) && $chl['rank']==60) $msg="Бот <u>".$chl['user']."</u> еще не восстановил свой уровень жизни!";

                        else {

                                require_once("inc/chat/functions.php");
                                insert_msg("Разъярённый <b><u>$stat[user]</u></b> собрался с силами и напал на Вас!","","","1",$chl['user'],"",$chl['room']);

                        $battime="$now";  
?>

и так далее

Есть HTML форма:
<b>Действия</b><HR color=silver>

<input type=button class=input value='Нападение' style='WIDTH: 120px' onclick=\"javascript:ShowForm('Нападение','trening.php?Attack=$now','','','1','attack','1','0');\">


Почему то когда нападаешь на бота пишут что - Персонаж Стражник не является ботом!
Хотя ранг у него выставлен 60

НЕ могу понять в чем ошибка!?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

kpachbiu



некоторые куски кода не относящиеся к проблеме вырезаны!
30.09.2009, 17:40
Ответить

1234ru

По всей видимости, ранг все-таки не выставлен. Чтобы это узнать наверняка, сразу после $chl = mysql_fetch_array(...) добавьте print_r($chl). Если окажется, что $chl['rank'] действительно равен 60 - будем думать дальше.

Кстати. Вместо addslashes($login) используйте mysql_escape_string($login), а еще лучше - mysql_real_escape_string($login).
То, что не убивает нас, делает нас инвалидами.
30.09.2009, 22:27
Ответить
NO USERPIC

kpachbiu

Да! действительно ранг вообще не выводиться, как и другие элементы массива запросом print_r($chl)

Пусто, вместо значения 60!

Что еще можно попробовать сделать

Вместо Вместо addslashes($login) поставил mysql_real_escape_string($login), чем mysql_real_escape_string($login) лучше:?
30.09.2009, 22:52
Ответить
NO USERPIC

kpachbiu

В базе данных поле rank имеет тип tinyint(2) unsigned !!!
30.09.2009, 22:56
Ответить

1234ru

Если print_r($chl) выводит Array(), значит, у вас в таблице вообще нет строки, соответствующей пользователю с именем $login.
Если же выводятся все нужные элементы, но они пустые, значит, такой пользователь есть, но у него соотв. ячейки не заполнены.

Цитата:
чем mysql_real_escape_string($login) лучше:?
Она специально предназначена для экранирования символов при отправке запроса в БД MySQL, использовать её надежнее.

Вообще код выглядит в некоторых местах так, как будто перепутаны $stat и $chl. Например, $login относится, видимо, к пользователю, от лица которого игра (т.е. который нападает и т.п.). При этом $chl - результат запроса опять же по имени пользователя $login...
То, что не убивает нас, делает нас инвалидами.
30.09.2009, 23:26
Ответить
NO USERPIC

kpachbiu

print_r($chl) вообще никаких значений на экране не выводит!!!

Если написать вместо print_r($chl), echo"($login)";
то будет выведено имя "Стражник", которое я и вписываю в форму "Напасть"
30.09.2009, 23:36
Ответить
NO USERPIC

kpachbiu

Тут дейстительно перепутываются значения игрока и бота!!!!!
Если все elseif () убрать то получается Игрок "имя игрока" напал на Вас! ( т.е. сам на себя) и соответственно ошибки потом!
30.09.2009, 23:40
Ответить

1234ru

Так, я тут вот что усмотрел (сначала не заметил): SELECT 'id', 'v_time', 'k_time', 'user', 'room', 'level', 'hp_now', 'battle', 'last_battle' ... - имена колонок из кавычек нужно убрать.

Цитата:
print_r($chl) вообще никаких значений на экране не выводит!!!

Значит, запрос в базу не доходит. Сделайте
$result = mysql_query('SELECT ... ') OR die(mysql_error());
$chl = mysql_fetch_array($result);


То, что не убивает нас, делает нас инвалидами.
30.09.2009, 23:45
Ответить
NO USERPIC

kpachbiu

Записал так:

if ($Attack) {
       
                if (empty($login)) $msg = "Укажите логин!";
                else {
                        $result=(mysql_query("SELECT id, v_time, k_time, user, room, level, hp_now, battle, last_battle, vitality, travma, rank, lpv, rase_skill FROM `players` WHERE 'user'='".mysql_real_escape_string($login)."'")) OR die(mysql_error());
                         
                       
                       
                        $chl=mysql_fetch_array($result);
                        if ($chl['user'] == $stat['user']) $msg="Нападение на самого себя - это уже мазохизм...";
                        elseif ($chl['rank'] !=60) $msg="Персонаж <u>$login</u> не является ботом!";
                        elseif ($stat['travma']>$now) $msg="С травмой в бой нельзя!";
                        elseif ($stat['level']!=$chl['level']) $msg="Выбери равного противника!";
                        elseif ($chl['room']!=2) $msg="Для нападния Вам необходимо находится в одной комнате!";
                        elseif ($stat['hp_now']<(($stat['hp']+$stat['vitality']*5)*0.33)) $msg="Вы слишком ослаблены для боя!";
                        elseif ($chl['hp_now'] <= 5  && $chl['rank']<>60) $msg="Персонаж <u>$login</u> слишком слаб для поединка!";
                        elseif (((time()-$chl['lpv'])<10) && ($chl['battle'] == $chl['last_battle'] || !$chl['battle']) && $chl['rank']==60) $msg="Бот <u>".$chl['user']."</u> еще не восстановил свой уровень жизни!";

                        else {

                                require_once("inc/chat/functions.php");
                                insert_msg("Разъярённый <b><u>$stat[user]</u></b> собрался с силами и напал на Вас!","","","1",$chl['user'],"",$chl['room']);

                        $battime="$now";


После нажатия "Напасть" высвятилось Unknown column 'last_battle' in 'field list'
30.09.2009, 23:59
Ответить
NO USERPIC

kpachbiu

Действительно в базе не было поля last_battle
Я его добавил и снова надпись "Персонаж Стражник не является ботом"
и print_r($chl);
ничего не выводит!
01.10.2009, 00:19
Ответить

1234ru

Это потому, что у вас в таблице players нет записи, где user = 'Стражник' (поэтому результат такого запроса пустой и mysql_fetch_array() для него возвращает FALSE (пустоту).

Отсюда и все проблемы.
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 10:35
Ответить
NO USERPIC

kpachbiu

У меня в базе данных в таблице players в поле user стоит значение Стражник !!
Я проверял!

Почему еще может такая ошибка случаться?
01.10.2009, 13:09
Ответить

1234ru

Например, потому что не 'Стражник', а 'Стражник ' (пробел лишний).

Или файл со скриптом не в CP1251, а в какой-то другой кодировке
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 15:12
Ответить
NO USERPIC

kpachbiu

Лишних пробелов и прочего точно нет!

Как посмотреть и если нужно преобразовать файл скрипта в CP1251 ????
01.10.2009, 17:20
Ответить

1234ru

1. Установите редактор jEdit (http://jedit.org/)
2. Откройте им файл.
3. В меню выбрать Utilities -> Buffer Options, выставить Character Encoding в Windows-1251, нажать ОК.
4. File -> Reload, Yes

Если после этого русские буквы отображаются нормально, значит, скрипт в 1251, если нет - найдите, в какой он кодировке (может быть, в UTF-8 или KOI8-R), после этого повторите п. 3, выставив 1251, затем сохраните файл (лучше под другим именем, чтоб случайно старый не испортить)
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 19:13
Ответить

1234ru

Кстати. А откуда такая уверенность, что нет лишних пробелов? Как это проверялось?
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 19:14
Ответить
NO USERPIC

kpachbiu

Установил программу! Перекодировал в windows-1251. Текст не изменился!

Я редактирую базу данных через myphpadmin и вижу что там пробелов лишних нету!
01.10.2009, 21:42
Ответить

1234ru

Нужно точно узнать, в какой кодировке строки хранятся в таблице. Что дает запрос

SELECT COLLATION_NAME FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'players' AND COLUMN_NAME = 'user'

?
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 22:12
Ответить
NO USERPIC

kpachbiu

Показывает записи 0 - 0 (1 всего, Запрос занял 0.0254 сек)
SQL-запрос:
SELECT COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'players'
AND COLUMN_NAME = 'user'
LIMIT 0 , 30


COLLATION_NAME
cp1251_general_ci
01.10.2009, 22:25
Ответить
NO USERPIC

kpachbiu

для остальных параметров 'id', 'v_time', 'k_time', 'user', 'room', 'level', 'hp_now', 'battle', 'last_battle', 'vitality', 'travma', 'rank', 'lpv', 'rase_skill' кодировка такая же должна быть?
01.10.2009, 22:29
Ответить

1234ru

Так, отлично. Кодировка в таблице правильная.
Что даёт запрос

SELECT CONCAT('|', user, '|') FROM players WHERE user LIKE '%стражник%'

?
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 22:35
Ответить

1234ru

Не обязательно.
Кроме того, некоторые колонки там - это числа, для них не может быть кодировки в принципе.
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 22:35
Ответить
NO USERPIC

kpachbiu

Показывает записи 0 - 0 (1 всего, Запрос занял 0.0196 сек)
SQL-запрос:
SELECT CONCAT( '|', user, '|' )
FROM players
WHERE user LIKE '%стражник%'
LIMIT 0 , 30


CONCAT('|', user, '|')
|Стражник|
01.10.2009, 22:43
Ответить

1234ru

Так, стоп. Всё это было излишним.

" ... WHERE 'user'= ... "

Кавычки вокргу 'user' убрать (из-за них сравнение идёт не со значениями столбца, а непосредственно со строкой 'user' и терпит неудачу, потому что 'user' != 'Стражник').
То, что не убивает нас, делает нас инвалидами.
01.10.2009, 23:46
Ответить
NO USERPIC

kpachbiu

Вау!!! Всё заработало!!!!!

Очень полезно было с вами пообщатсья спасибо, тепреь я знаю некоторую методику поиска ошибки.
Я много еще буду "экспериментировать" и если еще будут возникать трудности можно я еще буду писать?!
01.10.2009, 23:53
Ответить

1234ru

А что, нельзя что ли?
Можно, куда ж мы от вас денемся.
То, что не убивает нас, делает нас инвалидами.
02.10.2009, 00:00
Ответить
NO USERPIC

kpachbiu

Спасибо большое))

А вы давно занимаетесь программированием?)
02.10.2009, 00:03
Ответить

1234ru

Лично я года три или четыре (точно не помню).
То, что не убивает нас, делает нас инвалидами.
02.10.2009, 00:07
Ответить
NO USERPIC

kpachbiu

Видно, что уже хорошо знаете ньюансы))
02.10.2009, 00:24
Ответить
NO USERPIC

kpachbiu

ПЕРВЫЙ ВОПРОС:

КОД:


<form method="post" enctype="multipart/form-data" action=""><br>
<input type="file" name="filename" class="standbut" size="60,12"><br> <br>
<input type="submit" value="Загрузить&nbsp;значек" class="standbut"><br><br>
</form>
     
<?       
   if($_FILES["filename"]["size"] > 40*3*40)
   {
     echo ("Размер файла превышает 120 Кб");
     exit;
   }
   if(copy($_FILES["filename"]["tmp_name"],
     "C:/WebServers/home/middleages/www/i/klan/".$_FILES["filename"]["name"]))
   {  
     $clansign=$_FILES["filename"]["name"];
     
     echo("&nbsp;Значек&nbsp; <img src='$img_server/i/klan/$clansign'> &nbsp;"  .$_FILES["filename"]["name"]."&nbsp;успешно загружен <br>");
       
   } else
   {
      echo("<BR>");
   }
?>

Этот скрипт работает и загружает значек в выбранную директорию!
Как сделать чтобы вместо "C:/WebServers/home/middleages/www/i/klan/" файл посылался на ФТП хостинга в интернете???

03.10.2009, 02:54
Ответить
NO USERPIC

kpachbiu

ВТОРОЙ ВОПРОС

КОД:

<FORM action="" name="add" method="post">

<INPUT size="25" class="input" name="name"><br>
<INPUT size="25" class="input" name="name_short"><br>
<INPUT size="25" class="input" name="b_clan"><br>
<INPUT size="25" class="input" name="url"><br>
<INPUT size="100,300" class="input" name="about"><br><br>
<INPUT type="submit" class="input" value="Создать клан"><br><br>

</FORM>

<?if ($submit) {        
                           $sql = "INSERT INTO tribes (name,name_short,b_clan,url,about)
                                      VALUES ('$name','$name_short','$b_clan','$url','$about')"
;
                           $result = mysql_query($sql) OR die(mysql_error());
                           print"клан зарегистрирован!";
       
                     }


После нажатия кнопки "Создать клан", запись в БД не создается!
Как привести в рабочее состояние данный код?
03.10.2009, 03:00
Ответить

1234ru

Не надо выкладывать сразу весь код, который есть. Приводите только ту часть, которая вызывает проблемы.
Например, сейчас у вас явно проблемы с конструкцией switch (судя по сообщению об ошибке).

Во-первых, нужно switch закрыть (у вас не хватает фигурной скобки закрывающей).
Когда это сделаете, пытайтесь изолировать switch так, чтобы оставить минимальное количество кода. Когда останется минимум - тогда и выкладывайте.
Кстати, если хотите, чтоб ваш код кто-нибудь читал, его нужно выровнять. В частности, операторы должны с новой строки начинаться, а длинные строки нужно разбивать.

upd: что-то я не понял... когда я последний раз смотрел, у вас про switch было написано. щас уже другое что-то...

В базу данные не добавляются?
А где соединение с базой устанавливается? поищите, есть ли в предшествующем коде mysql_connect()
То, что не убивает нас, делает нас инвалидами.
03.10.2009, 21:15
Ответить
NO USERPIC

kpachbiu

Я от редактировал сообщение, убрал лишнее!!!

Теперь ошибки со switch нету!

include("inc/db_connect.php"); у меня написан в самом начале этого файла!
03.10.2009, 21:26
Ответить

1234ru

Цитата:
После нажатия кнопки "Создать клан", запись в БД не создается!

Ошибка какая-нибудь печатается?
То, что не убивает нас, делает нас инвалидами.
03.10.2009, 21:30
Ответить
NO USERPIC

kpachbiu

Нет ошибка никакая не печатается!
Просто ничего не происходит!
03.10.2009, 21:32
Ответить

1234ru

Нужно указывать не $submit, $name, $url и т.д., а $_POST['submit'], $_POST['name'] и т.д.
(если бы метод формы был get, то вместо $_POST надо было бы писать $_GET)
То, что не убивает нас, делает нас инвалидами.
03.10.2009, 21:49
Ответить
NO USERPIC

kpachbiu

Подправил код:


FORM action="" name="add" method="post">

<INPUT size="25" class="input" name="name"><br>
<INPUT size="25" class="input" name="name_short"><br>
<INPUT size="25" class="input" name="b_clan"><br>
<INPUT size="25" class="input" name="url"><br>
<INPUT size="100,300" class="input" name="about"><br><br>
<INPUT type="submit" class="input" value="Создать клан"><br><br>

</FORM>


<?if ($_POST['submit'])
{$sql = "INSERT INTO tribes (name,name_short,b_clan,url,about)
VALUES ('"
.$_POST['name']."','".$_POST['name_short']."','".$_POST['b_clan']."','".$_POST['url']."','".$_POST['about']."')";

$result = mysql_query($sql) OR die(mysql_error());
 
    print"клан зарегистрирован!";



Опять ничего непроисходит! Никаких ошибок не выводится!!
Не выводится фраза print"клан зарегистрирован!";
03.10.2009, 22:07
Ответить

1234ru

Нужно кнопке дать имя (для простоты пусть имя кнопки будет 'submit', хотя можно и другое):

<INPUT type="submit" name="submit" class="input" value="Создать клан">

if ( isset($_POST['submit']) AND $_POST['submit'])  )
...
То, что не убивает нас, делает нас инвалидами.
03.10.2009, 22:18
Ответить
NO USERPIC

kpachbiu

Супер! заработало!

Теперь в базу добавляется!!!!
Я еще добавлю в код условия!!!
Как сделать так чтобы добавить значения из форм в разные таблицы базы?
03.10.2009, 22:49
Ответить
NO USERPIC

kpachbiu



Добавил условия в код и он стал не работать, когда нажимаю СОЗДАТЬ КЛАН деньги отнимаються, и пишет что
Клан "название которое ввел" уже сущесвует!




<FORM action="" name="add" method="post">  

<INPUT size="25" class="input" name="clan_name"><br>
<INPUT size="25" class="input" name="name_short"><br>
<INPUT size="25" class="input" name="b_clan"><br>
<INPUT size="25" class="input" name="url"><br>
<INPUT size="100,300" class="input" name="about" ><br><br>
     <INPUT type="submit" class="input" value="Создать клан" name="create"><br><br>
  </form>
 
 
  <?if  (isset($_POST['create']) && !empty($_POST['create']) && isset($_POST['clan_name']) && !empty($_POST['clan_name']) && isset($_POST['name_short']) && !empty($_POST['name_short']) && isset($_POST['b_clan']) && !empty($_POST['b_clan']) && isset($_POST['url']) && !empty($_POST['url']) && isset($_POST['about']))
           {
             if ($stat['credits'] >= 2000) // Проверка - хватает ли денег
             {
               mysql_query("UPDATE players set credits=credits-2000 where id=$stat[id]"); //Вычитание -2000 кр.
               echo"Вы заплатили 2000 кр. за регистрацию клана";
               $query_1 = mysql_query("SELECT `id` FROM `players` WHERE `tribe` = '".mysql_real_escape_string($POST['clan_name'])."'");
                    if (!mysql_num_rows($query_1)) // Проверка - есть ли клан с таким же именем
                    {
                     $query_2 = mysql_query ("SELECT `id` FROM `players` WHERE `user` = '".mysql_real_escape_string($POST['b_clan'])."'");
                       if (mysql_num_rows($query_2)) // Проверка - существует ли персонаж с таким именем
                         {
                           $create1 = mysql_query("UPDATE `players` SET `tribe` = '".mysql_real_escape_string($_POST['clan_name'])."', `b_tribe` = '1' WHERE `user` = '".mysql_real_escape_string($_POST['b_clan'])."'"); // Присвоение персонажу звание "глава клана"
                           $create2 = "INSERT INTO `tribes` (`name`,`name_short`,`url`,`about`) VALUES ('".$_POST['name']."','".$_POST['name_short']."','".$_POST['url']."','".$_POST['about']."')";
                           $result = mysql_query($create2) OR die(mysql_error());// Добавление информации о клане
                           print_r($create2);
                           print"<FONT class=\"agree\">Клан \"".$_POST['clan_name']."\" успешно создан! Глава клана - \"".$_POST['b_clan']."\"!</FONT><BR>";
                          } else {print "<FONT class=\"bloked\">Персонаж \"".$_POST['b_clan']."\" не найден!</FONT><BR>"; }
                    } else {print "<FONT class=\"bloked\">Клан \"".$_POST['clan_name']."\" уже сущесвует!</FONT><BR>"; }
                     
              }  else print"<FONT class=\"bloked\">Не хватает денег!</FONT>";
           }
       ?>
 
04.10.2009, 00:04
Ответить
NO USERPIC

kpachbiu

Убрал восклицательный знак тут if (mysql_num_rows($query_1))

Убрал кавычки тут $query_1 = mysql_query("SELECT id FROM `players` WHERE tribe = '".mysql_real_escape_string($POST['clan_name'])."'");

и тут

$query_2 = mysql_query ("SELECT id FROM `players` WHERE user = '".mysql_real_escape_string($POST['b_clan'])."'");

Теперь ошибка "Персонажа (введенное имя) не существует!"
04.10.2009, 00:35
Ответить
NO USERPIC

kpachbiu

Всё заработало!!! Надо было поставить восклицательный знак!
if (!mysql_num_rows($query_1))

Скажите а для чего он нужен тут????
04.10.2009, 00:57
Ответить
NO USERPIC

kpachbiu

ЕЩЕ ВОПРОС


<form method="post" enctype="multipart/form-data" action=""><br>
<input type="file" name="filename" class="standbut" size="60,12"><br> <br>
<input type="submit" value="Загрузить&nbsp;значек" class="standbut"><br><br>
</form>
     
<?        
   if($_FILES["filename"]["size"] > 40*3*40)
   {
     echo ("Размер файла превышает 120 Кб");
     exit;
   }
   if(copy($_FILES["filename"]["tmp_name"],
     "C:/WebServers/home/middleages/www/i/klan/".$_FILES["filename"]["name"]))
   {  
     $clansign=$_FILES["filename"]["name"];
     
     echo("&nbsp;Значек&nbsp; <img src='C:/WebServers/home/middleages/www/i/klan/".$_FILES["filename"]["name"]'> &nbsp;"  .$_FILES["filename"]["name"]."&nbsp;успешно загружен <br>");
       
   } else
   {
      echo("<BR>");
   }
?>


Этот скрипт работает и загружает значек в выбранную директорию!
Как сделать чтобы вместо "C:/WebServers/home/middleages/www/i/klan/" файл посылался на ФТП хостинга в интернете???
Как ограничить размер картинки чтобы не больше 24х14 пикселов загружались?
Или может быть как нибудь сжать их автоматически до 24х14 ???

04.10.2009, 01:03
Ответить

1234ru

Цитата:
Как сделать чтобы вместо "C:/WebServers/home/middleages/www/i/klan/" файл посылался на ФТП хостинга в интернете???

Сразу не могу сказать, т.к. сам никогда не делал. Есть для этого семейство функций:
http://us2.php.net/manual/en/ref.ftp.php
Вас интересовать должны, видимо, ftp_connect() и ftp_fput().

В любом случае перед тем, как посылать файл на другой фтп-сервер, его нужно обработать скриптом (т.е. в выбранную директорию все равно придется складывать, только потом посылать на другой сервер).

Как вариант - посылать форму сразу на другой сервер ([synax=*html]<form action="адрес_скрипта_на_другом_сервере" ...>[/syntax]), но это немного странно, так обычно не делают.
Впрочем, вообще на другом сервере файлы обычно не хранят, т.к. это ненадежно.

Цитата:
Как ограничить размер картинки чтобы не больше 24х14 пикселов загружались?
Или может быть как нибудь сжать их автоматически до 24х14 ???


Простйешее решение - <img width="24px" height="14px" ...>. Так картинка любого размера будет ресайзиться до 24х14.
Если хотите запретить загрузку картинок большего размера в принципе, то нужно использовать функцию getimagesize():

$imageinfo = getimagesize($_FILES['filename']);
$width = $imageinfo[0]; // нулевой элемент массива содержит ширину изображения
$height = $imageinfo[1]; // следующий элемент - длину
if ($width > 24 OR $height > 14) {
    // изображение слишком большое ...
}
else {
    // изображение нормальное
}

В таком духе примерно.
То, что не убивает нас, делает нас инвалидами.
05.10.2009, 06:35
Ответить
NO USERPIC

kpachbiu

<?php
if (isset($_POST['start_upload']) && $_FILES['filename']['name'] != "") {  
        $local_file = $_FILES['filename']['tmp_name'];
        $destination_file = "/img/i/klan".basename($_FILES['filename']['name']);  
    // Глобальные переменные соединения
    $ftp_server = "xxxxx";      // Адрес FTP сервера (исключить ftp://)
    $ftp_user_name = "xxxx";     // Имя пользователя
    $ftp_user_pass = "xxxxxx";      // Пароль

    // Соединение с FTP сервером
    $conn_id = ftp_connect($ftp_server);
    // Вход на FTP сервер
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
   
    // Проверка статуса соединения
    if ((!$conn_id) || (!$login_result)) {
        echo "Невозможно установить соединение с FTP!<br>Попробуйте позже<br />";
        echo "Соединение с $ftp_server прервано $ftp_user_name";
        exit;
    } else {
        echo "Соединение с $ftp_server установлено! for user $ftp_user_name <br />";
    }
     // Загрузка файла на FTP сервер
    $upload = ftp_put($conn_id, $destination_file, $local_file, FTP_BINARY);  
   
    // Проверка статуса загрузки файла
    if (!$upload) {
        echo "<FONT class=\"agree\">Ошибка загрузки файла".$_FILES['filename']['name'].">/font>>";
    } else {
        echo "<FONT class=\"agree\">&nbsp;Значек&nbsp; .$_FILES['filename']['name']."&nbsp;успешно загружен <br></FONT>";
    }
    // Закрытие FTP соединения
    ftp_close($conn_id);
}
?>


Когда загружаю картинку появляется ошибка:
Warning: ftp_login() expects parameter 1 to be resource, boolean given in /home/f/host/WWW/administ.php on line 166

05.10.2009, 23:57
Ответить
NO USERPIC

kpachbiu

Сервер, логин и пароль 100% правильные!

Кстати, вот форма ввода HTML

 <form method="post" enctype="multipart/form-data" action=""><br>
      <input type="file" name="filename" class="standbut" size="60,12"><br> <br>
      <input type="submit" name="start_upload" value="Загрузить&nbsp;значек" class="standbut"><br><br>
      </form>
05.10.2009, 23:59
Ответить

1234ru

Цитата:
Когда загружаю картинку появляется ошибка:
Warning: ftp_login() expects parameter 1 to be resource, boolean given in /home/f/host/WWW/administ.php on line 166
Это значит, что при работе функции ftp_connect() возникают какие-то проблемы, и она возвращает FALSE.
Это может быть потому, что неправильн указан адрес ftp-сервера или он не принимает ftp-соединения (убедиться в том, что сервер все-таки их принимает, можно, например, соединившись с сервером вручную через какой-нибудь клиент)
То, что не убивает нас, делает нас инвалидами.
06.10.2009, 00:10
Ответить
NO USERPIC

kpachbiu

Я вручную с ним через ftp клиент соединяюсь!
Файлы через клиент передаются отлично!
06.10.2009, 00:14
Ответить
NO USERPIC

rgbeast

Возможно хостер закрыл внешний коннект по ftp. Попробуйте соединиться с данным сервером по ftp из командной строки с сервера хостинга.
06.10.2009, 10:53
Ответить
NO USERPIC

kpachbiu

Новая проблема:

Вот такая ошибка появляется:
Warning: Missing argument 2 for show_player(), called in Z:\home\middleages\www\inc\forum\topics.php on line 72 and defined in Z:\home\middleages\www\inc\inf\player.php on line 2

Я уже много что перепробовал с кодом, не получилось, поэтмоу тут пишу!
Как её исправить и что это такое?
10.10.2009, 13:06
Ответить
NO USERPIC

rgbeast

Что написано в строчке 72 и как определена функция show_player()?
10.10.2009, 13:27
Ответить
NO USERPIC

kpachbiu



Файл topics.php
Строчка 2:

include "inc/inf/player.php";

Строчка 72:

$user=$topics['poster'];
show_player($user);


Файл player.php
Cтрочка 2 и далее:

function show_player($login,$imgpath) {

$psel = mysql_query("SELECT user, tribe, level, battle, side, vip FROM `players` WHERE `user` = '$login' ");
$pl = mysql_fetch_array($psel);
   $login=$pl["user"];
   $klan=$pl["tribe"];
   $level=$pl["level"];
   $battle=$pl["battle"];
   $side=$pl["side"];
   $vip=$pl["vip"];
10.10.2009, 13:35
Ответить
NO USERPIC

rgbeast

У функции show_player() два аргумента $login и $imagepath, а вы вызываете ее с одним аргументом.

Нужно вызывать с двумя аргументами
show_player($user, $imagepath);
а переменную $imagepath чему-нибудь присвоить перед этим (это вам виднее что она означает)
10.10.2009, 13:52
Ответить
NO USERPIC

kpachbiu

rgbeast Спасибо огромное! Всё сделал!
11.10.2009, 19:40
Ответить
NO USERPIC

kpachbiu

$img_server="/img";
$now = time();

$link=mysql_connect("78.108.**.**","u5***","3*****");
mysql_select_db("b56636",$link) or die ("Ошибка соединения с БД!");
mysql_query("SET CHARSET cp1251");

extract($_POST);
extract($_GET);
extract($_COOKIE);


Пишет Ошибка соединения с БД!

Я уже все перепробовал!!!
как сделать чтобы работало?
19.10.2009, 23:27
Ответить
NO USERPIC

kpachbiu

Проблема решена! Спасибо!
20.10.2009, 00:07
Ответить
NO USERPIC

kpachbiu

Помогите составить регулярное выражение!

Дело в том что в строку $login подставляются значения в разных кодировках (например: Клон_admin, Клон_Энигма, admin, Энигма).
используется функция preg_match.
Задача исключить строки в которых начало строки - "Клон_", сделать нечувствительным к регистру.

Вот код:
preg_match("#^Клон_#iu#", $_GET['login'])


Почему то - распознает значения Клон_Энигма, КЛОН_Энигма, а значения Клон_admin, КЛОН_admin НЕ распознает!

Помогите пожалуйста!!!
01.01.2010, 18:00
Ответить

1234ru

Похоже, Вы лишнюю решётку случайно добавили (у Вас третья решётка в шаблоне - лишняя), после чего перестало работать. Энигмы Вы тестировали до этого момента, а админов - после, вот и решили, что не работает.
Другого объяснения я не вижу.

Кстати. Если есть задача сделать регистронезависимое сравнение только для части "клон_", а для оставшейся - оставить регистрозависимое сравнение, то можно использовать шаблон #(?i:КЛОН_)admin#u:

echo preg_match('#(?i:клон_)admin#u', 'КлОн_admin'); // совпадёт
echo preg_match('#(?i:клон_)admin#u', 'КлОн_ADmin'); // не совпадёт


upd: хотя я щас подумал, что это тут ни к чему
То, что не убивает нас, делает нас инвалидами.
05.01.2010, 01:47
Ответить
NO USERPIC

kpachbiu

Спасибо Большое за помощь!!

Но почему то не фильтрует переменные с "Клон_" !!!!
Есть переменная(строка) - $_GET['login'], нужно сделать регистронезависимый поиск фразы "Клон_"
Причем после может быть "Клон_русский ник" и может быть "Клон_english nick"


if (preg_match("#(?i:клон_)#u", $_GET['login']))


Должен давать true - если найдена регистронезависимая фраза "Клон_".
false - Если фраза не найдена.
09.01.2010, 18:36
Ответить
NO USERPIC

kpachbiu

Я нашел решение!

Вот мой фильтр:
if (!mb_eregi("^Клон_", $_GET['login'])) {
поиск персонажа }


Оказывается надо библиотеку mb было использовать!
09.01.2010, 18:36
Ответить

1234ru

Вообще с обработкой регулярными выражениями нелатинских символов есть небольшая неразбериха (см. моё предыдущее сообщение).

Однако для вашего случая мне тут в голову пришло еще и вот что:
if ( mb_stripos( $_GET['login'], 'клон' )) === 0)

Это, в основном, к тому, что если есть возможность использовать обычные строковые функции вместо регулярных, то лучше так и делать; ну и еще у Вас это работать должно, по идее.
Обратите внимание на оператор === - сравнение с учетом типа (оператор == числовой ноль от FALSE не отличит, и совпадение с начала строки будет выглядеть так же, как вообще отсутствие совпадения)

Хотя если работает - можете так и оставить. Вариант с рег. выражением более нагляден.
То, что не убивает нас, делает нас инвалидами.
11.01.2010, 03:27
Ответить
NO USERPIC

kpachbiu

Подскажите пожалуйста!
Имеется запрос к базе:

$r=mysql_fetch_array(mysql_query("SELECT `id`, `inf` FROM `objects` WHERE user='".$stat['user']."' AND tip='19' AND komis='0' AND sclad='0' AND bank='0'"));


Структура таблицы objects:
id info
9459 krisa|Шкура крысы|5.00|0|0|0|0|1
9463 krisa|Шкура крысы|5.00|0|0|0|0|1
1104950 vetki2|Ветки|14.00|0|0|0|0|1

При попытке вывести массив:
foreach ($r as $item)
  {
  echo"".$item."<br>";
  }


Он выдает:
9459
9459
krisa|Шкура крысы|5.00|0|0|0|0|1
krisa|Шкура крысы|5.00|0|0|0|0|1

т.е. один и тот же элемент 2 раза! А их там 3 и все разные!!!

Цель вообще вывести количество определеного ресурса
Шкура крысы: х шт.
Ветки: х шт.

п.с. Видов ресурсов много более 30! Вот я и хотел не делать 30 запросов на подсчет каждого вида ресурса, а выбрать все и потом уже брать данные из массива!
Может быть вы можете более реальный способ предложить!
22.01.2010, 21:46
Ответить
NO USERPIC

rgbeast

Замените mysql_fetch_array() на mysql_fetch_assoc(), так как по умолчанию эта функция включает каждую строку дважды.

Посчитать можно средствами базы
SELECT inf, count(*) FROM objects GROUP BY inf
23.01.2010, 05:24
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: