Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Веб-программирование > PHP
Перезагрузить страницу Очередные непонятки...
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию Очередные непонятки... - 17.08.2004, 22:06

Код:
<?php

$to = $_GET['to'];

if (preg_match("/[0-9]/", $to))
    {
    $set_touser = $_GET['to'];
    $to = "";
    }
else    {
    $set_touser = "";
    $to = $_GET['to'];
    }

echo "set_touser = ".$set_touser;
echo "
";
echo "to = ".$to;

?>
В предыдущем варианте все прекрасно работает. Я пытаюсь сделать скрипт, который бы мог распознавать поступающие данные, тоесть елси это цифры, то он выводит их в одну переменную, а если буквы, то другую...
Проблема в том, что в этом варианте учтен только один символ...
Я сделал вот так:

Код:
...

if (preg_match("/[0-9]+/", $to))

...
Соответственно все теперь прекрасно работает, как я и хотел, но мне не понятно, почему при вот таком варианте:

Код:
...

if (preg_match("/[0-9]{1-6}/", $to))

...
Рег. выражение не работает... Оно всегда выдает вариант else, где любым полученным значением заполняется $to...
Вот, просто интересно стало...
Ответить с цитированием
  (#2 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 17.08.2004, 22:12

И ещё, так как я уверен, что эту тему будет читать SiMM ,
не помнишь название функции для создания новой папки?
Ответить с цитированием
  (#3 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 17.08.2004, 23:46

Код:
<?
$filename ="file.php";
$dir = "/files/admin/";
$outdir = "datas/plugins/admin/";

$plugin_body = "Текст:";

if (!file_exists("$outdir/$filename"))
{
    mkdir($outdir, 0755);
}
else
{
$plugin_body .= "Error";
return;
}
?>
Нашел функцию создания директории...
Не пойму, почему не создается папка на локальном сервере...
П.С. Файл и папка заведомо не существуют.
П.П.С. Если папку создать, то файл свободно копируется...
Копирование файла опустил (убрал)...
Ответить с цитированием
  (#4 (permalink)) Старый
feedbee feedbee вне форума
Member
 
Сообщений: 323
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.02.2004
По умолчанию 18.08.2004, 11:11

Зучай синтаксис PCRE:
preg_match("/[0-9]{1[b],6});
Ответить с цитированием
  (#5 (permalink)) Старый
feedbee feedbee вне форума
Member
 
Сообщений: 323
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.02.2004
По умолчанию 18.08.2004, 11:17

Возможно ф-ция mkdir() не берет относительных путей?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SiMM SiMM вне форума
Member
 
Сообщений: 1,961
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.08.2003
По умолчанию 18.08.2004, 11:35

Цитата:
Originally posted by Monah IRH
[b]Нашел функцию создания директории...
Не пойму, почему не создается папка на локальном сервере...
Так не бывает (просто берёт и не создаёт) - читай сообщения об ошибке и изучай FAQ: debug - тогда, надеюсь, в следующий раз ты или сам справишься с проблемой, либо задашь вопрос так, как и надо его задавать - с указанием ошибок.
Ответить с цитированием
  (#7 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 18.08.2004, 12:22

Вот так просто брала и не создавалась. Я понял из-за чего - из-за того, что неправильно давал условие... Нужно ведь проверять не наличие файла, а наличие папки...
Сделал так:

Код:
$filename ="file.php";
$dir = "/files/admin/";
$outdir = "datas/plugins/admin/";

$plugin_body = "Текст:";

if (!file_exists("$outdir"))
    {
  mkdir($outdir, 0777);
    }
Все работает

Возникла ещё одна проблемка:

Код:
function ldu_mysql_query($query, $desc='?')
    {
    global $sys, $cfg;
    $sys['qcount']++;
    $xtime = microtime();
    $result = mysql_query($query) or die("MySQL error : ".mysql_error());
    $ytime = microtime();
    $xtime = explode(" ",$xtime);
    $ytime = explode(" ",$ytime);
    $sys['tcount'] = $sys['tcount'] + $ytime[1] + $ytime[0] - $xtime[1] - $xtime[0];
    if ($cfg['devmode'])
  {
  $sys['devmode']['queries'][] = array ($sys['qcount'], $ytime[1] + $ytime[0] - $xtime[1] - $xtime[0], $desc);
  $sys['devmode']['timeline'][] = $xtime[1] + $xtime[0] - $sys['starttime'];
  }

    return($result);
    }

$sql = ldu_mysql_query("CREATE TABLE sss_moderation (mod_id int(11) NOT NULL auto_increment, mod_authorid int(11) default NULL, mod_state tinyint(1) NOT NULL default '0', mod_type varchar(32) NOT NULL default '', mod_url varchar(255) NOT NULL default '', mod_reason varchar(255) NOT NULL default '', mod_text text NOT NULL, mod_admintext text NOT NULL, mod_date int(11) NOT NULL default '0', mod_updated int(11) NOT NULL default '0', mod_updaterid int(11) NOT NULL default '0', PRIMARY KEY  (mod_id)) TYPE=MyISAM;");
База данных sss_moderation не создается... Ещё нужно учесть то, что если она уже существует, то выдается ошибка: MySQL table ".sss_moderation" already exist (Ну или что-то подобное... Писал по памяти... )
Ответить с цитированием
  (#8 (permalink)) Старый
SiMM SiMM вне форума
Member
 
Сообщений: 1,961
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.08.2003
По умолчанию 18.08.2004, 13:23

Цитата:
Originally posted by Monah IRH
[b]База данных sss_moderation не создается...
У меня запрос работает - ищи грабли в другом месте, а чтобы было легче их искать прочти наконец FAQ: debug
Цитата:
Ещё нужно учесть то, что если она уже существует...
CREATE TABLE IF NOT EXISTS sss_moderation ... (не совсем уверен в правильности запроса)
или в два запроса
DROP TABLE IF EXISTS sss_moderation
CREATE TABLE sss_moderation ...
в зависимости от задачи
Ответить с цитированием
  (#9 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 18.08.2004, 20:08

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

Код:
$sql1 = ldu_mysql_query("CREATE TABLE sss_moderation (mod_id int(11) NOT NULL auto_increment, mod_authorid int(11) default NULL, mod_state tinyint(1) NOT NULL default '0', mod_type varchar(32) NOT NULL default '', mod_url varchar(255) NOT NULL default '', mod_reason varchar(255) NOT NULL default '', mod_text text NOT NULL, mod_admintext text NOT NULL, mod_date int(11) NOT NULL default '0', mod_updated int(11) NOT NULL default '0', mod_updaterid int(11) NOT NULL default '0', PRIMARY KEY  (mod_id)) TYPE=MyISAM;");

$un_sql1 = ldu_mysql_query("DROP TABLE sss_moderation;");
Вот такой прокол... Пришлось разделять по действиям:

Код:
if ($a == "install") {
$sql1 = ldu_mysql_query("CREATE TABLE sss_moderation (mod_id int(11) NOT NULL auto_increment, mod_authorid int(11) default NULL, mod_state tinyint(1) NOT NULL default '0', mod_type varchar(32) NOT NULL default '', mod_url varchar(255) NOT NULL default '', mod_reason varchar(255) NOT NULL default '', mod_text text NOT NULL, mod_admintext text NOT NULL, mod_date int(11) NOT NULL default '0', mod_updated int(11) NOT NULL default '0', mod_updaterid int(11) NOT NULL default '0', PRIMARY KEY  (mod_id)) TYPE=MyISAM;");
}
elseif ($a == "uninstall") {
$un_sql1 = ldu_mysql_query("DROP TABLE sss_moderation;");
}
Теперь все работает

Спасибо за помощь!

Насчет debug... Если в скрипте нет ошибок, то и нечего выводить на экран...
Ответить с цитированием
  (#10 (permalink)) Старый
SiMM SiMM вне форума
Member
 
Сообщений: 1,961
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.08.2003
По умолчанию 18.08.2004, 21:25

Цитата:
Originally posted by Monah IRH
[b]Насчет debug... Если в скрипте нет ошибок, то и нечего выводить на экран...
Если скрипт не работает - то в нём есть ошибки - иначе бы он работал
Если понимать твою фразу "нет ошибок" как ошибки не выводятся - то этому могут быть следующие причины - отключен вывод ошибок на экран/в логи, либо же используемые функции не выводят на экран кода ошибки и её (как в случае с mysql) наличие и код нужно получать иначе (mysql_error). Обо всём этом в FAQ: debug и написано, поэтому пренебрегать его значением не стоит - стоит внимательно перечитывать
Ответить с цитированием
  (#11 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 18.08.2004, 22:27

Цитата:
Но бывает так, что программа не вызывает ошибок, но все равно не работает, или работает не так, как надо.
Тут уже виноват или алгоритм или какие-то внешние факторы.
Однако и тут можно найти место, где происходит ошибка.
Но только при одном условии.
что ты четко представляешь, что делает твоя программа, каждая функция, каждая строка в ней. Потому, что если ты представляешь, то можешь предсказать, какие значения должны иметь переменные на каждом этапе выполнения.
А дальше все ОЧЕНЬ просто!
Во-первых, надо разделить программу на логические блоки.
Допустим, скрипт выводит форму, получает ее, и записывает данные в базу. ТРИ шага! И в любом из них может быть ошибка, приводящая к тому, что данные в базу не записываются.
Надо проконтролировать на каждом из участков - все ли переменные имеют то значение, которое ожидается.
Программа ведь работает с переменными.
Как проверить?
Всего лишь написать в паре мест echo (для строк и чисел) и print_r() (для массивов) и выясняешь - обана! А переменная-то пустая!
И уже можешь пойти на форум не с вопросом "у меня вот код на 100 строк, где ошибка?", а "я написал функцию, но почему-то, когда обращаюсь в ней к переменным, они все пустые". или "из формы не передаются переменные".
Между этими двумя способами задания вопросов - пропасть.
Первый не может тебе помочь никак. Ты, собственно, и сам не знаешь, что у тебя за проблема. А при втором ты уже знаешь проблему, и, если сам не справился с ее решением, то можешь задать на форуме конкретный вопрос.
Единственная часть, которая действительно показалась мне нужной в такой ситуации
Ответить с цитированием
  (#12 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 21.08.2004, 17:13

Код:
<?php
$fmsql = ldu_mysql_query("SELECT * FROM forum_moderators WHERE fm_section_id='".$sectionid."' ORDER by fm_moderator_name", "Forums/sections");

$fmbody .= "Модераторы: ";

while ($fmrow = mysql_fetch_array($fmsql))
    {
    $fmbody .= $fmrow['fm_user_name']."";
    }

echo $fmbody;
?>
Вот делаю список модераторов через MySQL.
Не понял как можно осуществить такую функцию:

Значит так... Идет запрос в БД (функция написанная выше), после этого возвращаются значения подходящие условию, но как поставить условие, что если возращается пустое значение не выдается ничего?

Знаю, что нужно сделать что-то подобное:

Цитата:
if (??? != 0) //Ну или (??? > 0)
{ $fmbody .= "Модераторы: ";

while ($fmrow = mysql_fetch_array($fmsql))
{
$fmbody .= $fmrow['fm_user_name']."";
}
}
else { $fmbody = ""; }
П.С. Переменная $sectionid заведомо дана.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
SiMM SiMM вне форума
Member
 
Сообщений: 1,961
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.08.2003
По умолчанию 21.08.2004, 17:35

Не вижу смысла цитировать документацию по mysql_query.
PS: если вы используете обращение к элементам выборки только по имени поля, имеет смысл использовать mysql_fetch_assoc, а не mysql_fetch_array - последняя функция, как и mysql_fetch_row, на мой взгляд, вообще бесполезная и даже вредная.
Ответить с цитированием
  (#14 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 21.08.2004, 18:06

Я идеи не понял... Сначала я думал использовать COUNT, но а если таблицы в БД будут, только модераторы будут для других разделов? Тогда условие их не пропустит... Я не понял как возвращать результат в числовом эквиваленте...
Ответить с цитированием
  (#15 (permalink)) Старый
Monah IRH Monah IRH вне форума
Member
 
Сообщений: 404
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2003
По умолчанию 21.08.2004, 18:09

Или использовать такое?

Код:
...
mysql_num_rows($result) == 0
...
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с вложениями 2ramses О сайте и форуме 4 09.02.2012 10:03
Непонятки с дровами Лавр Любые вопросы от новичков 7 10.11.2011 20:32
Непонятки phyhoz163 Охлаждение и разгон 2 07.09.2011 14:48
Очередные ферзи. 4upuk Prolog 22 20.04.2011 20:48
непонятки с USB black_a Любые вопросы от новичков 1 17.12.2010 07:33
Непонятки.... ir_ir Любые вопросы от новичков 1 22.09.2010 03:10
непонятки с Fly B600. dark Ремонт 10 20.11.2008 12:31
ATI FirePro: очередные "профессионалы" от AMD VipeR Процессоры 18 29.09.2008 22:55
Непонятки с компом Sanek_77 Техническая поддержка 17 25.09.2007 14:34
Непонятки с AMD Turion 64 x2 rjav Ноутбуки 1 22.04.2007 23:55
Непонятки с iconv Maddoctor PHP 2 25.10.2006 20:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов