Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Служба Рассылок Subscribe.Ru

_ Здравствуйте! Выпуск номер 39 _
рассылки сайта РНР для всех!

Вы получили этот выпуск рассылки, так как являетесь подписчиком рассылок сайта http://subscribe.ru Рассылка выходит еженедельно, и предлагает Вам авторские материалы по теме программирования на скриптовом языке гипертекстового препроцессора РНР. Кроме того - есть система вопросов и ответов, обмен ссылками и баннерами, раздел Ваши письма и многое другое.
Вам доступен форум рассылки:
Офицальный форум сайта
Все вопросы и ответы из форума
будут публиковаться в рассылке!
Архив рассылки
заказать книги по РНР
(только Беларусь)

Голосование на базе. Часть первая. (not Yet)

автор скрывается под адресом l0g_err@xakep.ru , все вопросы по этой статье к нему. Кстати, присылайте свои материалы и статьи - они обязательно попадут в рассылку. Только не забывайте про себя любимого - укажите кто Вы и как Вас найти (например адрес Вашего сайта, почты и т.д. :-) Лучше всего в формате HTML.


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

Сперва поставим задачку:

  1. Нужно иметь сколько угодно голосований.
  2. Количество вопросов варьируется от 3 до 6. (вполне условные цифры - это понятно)
  3. Каждое голосование должно иметь 3 состояния: Активно, В архиве, Пассивно. Принимать участие пользователь может только в первых двух. Третья категория только для просмотра результатов.
  4. Голосование должно быть редактируемо (Вопрос, варианты ответов).
  5. Защиту прикрутим минимальную - по IP. (это вообще отдельная тема)
    А теперь будем последовательно реализовывать задуманное.Для начала создадим таблицу голосований в нашей базе (Коннект я пропущу. Итак все понятно.:).
    <?
    ...
    baseconnect(); // функция коннекта к базе.

    $query = "CREATE TABLE poll(
    id int(6) not null auto_increment, //Уникальный номер
    name text, // Название голосования
    quest text, // Вопрос
    answ text, //Варианты Ответов
    graph_type INT (2) DEFAULT '0' not null, // Тип вывода статистики (текст или графика)
    active int(2), // Флаг активности
    first_page INT (1) DEFAULT '0' not null, //На первой странице голосование или нет
    anumber text, // Количество голосов по каждому ответу
    total int(6) DEFAULT '0' not null, // Всего проголосовавших
    PRIMARY KEY (id)
    )";
    if (mysql_query($query)):
    echo"Таблица создана";
    else:
    die(mysql_error());
    endif;
    ?>
    Запускать данный скрипт надо только один раз.
    Теперь напишем скрипт, который будет выводить данные по активному голосованию. Назовем его show.php:
    <?
    ...
    baseconnect(); // Коннектимся к базе.

    $sql = "SELECT * FROM poll WHERE first_page=1";
    $res = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($res)>0)
    {
    $poll = mysql_fetch_assoc($res);

    $graph_flag = mysql_result($res,0,'graph_type');

    echo'<tr><td colspan="3">'.$poll["name"].'<Br></td></tr>';
    echo'<tr><td colspan="3">Вопрос</td></tr>';
    echo'<tr><td colspan="3">'.$poll["quest"].'<Br></td></tr>';
    echo'<tr><td colspan="3">Варианты ответов</td></tr>';

    $ans = explode("}{","$poll['answ']"); // В качестве разделителя ответов используется последовательность }{
    $by_answers = explode("}{","$poll['anumber']");
    for ($step=0;$step<$ans_kol;$step++)
    {
    echo'<tr><td>.'$ans[$step].'</td><td>'.$by_answers[$step].'</td><td>&nbsp;</td></tr>'; // Выводим варианты ответов
    }

    echo'<tr><td>Количество проголосовавших</td><td colspan="2">'.$poll['total'].'<Br></td></tr>';

    $graph =array('Просто цифры','Горизонтальные полосы','Вертикальные полосы');
    $state = array( 'Активно','В архиве');
    echo"$graph[$graph_flag]<Br>";

    echo'</table>';
    echo'<table>';
    echo'<tr><td>Остальные активные голосования</td></tr>';

    $sql = "SELECT * FROM poll WHERE active='0' AND first_page='0'"; // Выбираем остальные голосования
    $res = mysql_query($sql) or die(mysql_error());
    $nums = mysql_numrows($res);
    for ($step=0;$step<$nums;$step++)
    {
    $name = mysql_result($res,$step,'name');
    $uin = mysql_result($res,$step,'id');

    echo'<tr><td><a href="shall.php?id='.$uin.'>'.$name.'</a></td></tr>'; // Список остальных голосований
    }
    echo'<tr><td><a href="arch.php">Архив голосований</a></td></tr></table>'; // Ссылка на архив.
    }
    ?>
    С выводом определились. Теперь разберемся со списком остальных голосований. Итак у нас есть два скрипта shall.php и arch.php. Один дает возможность принять участие в других голосованиях, а другой дает доступ к статистике уже прошедших.
    Рассмотрим первый скрипт. В качестве параметра ему передается номер голосования. Это самый простой и очевидный способ. Функцию коннекта я опущу.
    <?
    ...
    $sql = "SELECT * FROM poll WHERE id='$id'"; // Выбираем всю инфу по запрошенному голосованию
    $res = mysql_query($sql) or die(mysql_error());
    $uin = mysql_result($res,0,'id');
    $name = mysql_result($res,0,'name');
    $quest = mysql_result($res,0,'quest');
    $answ = mysql_result($res,0,'answ');
    $ans_kol = mysql_result($res,0,'qkol');
    $graph_flag = mysql_result($res,0,'graph_type');
    $stat = mysql_result($res,0,'anumber');
    $tot = mysql_result($res,0,'total');

    echo'<tr><td class="head_b" colspan="3">'.$name.'<Br></td></tr>';
    echo'<tr><td class="head_s" colspan="3">Вопрос</td></tr>';
    echo'<tr><td class="text" colspan="3">'.$quest.'<Br></td></tr>';
    echo'<tr><td class="head_s" colspan="3">Варианты ответов</td></tr>';

    $ans = explode("}{","$answ");
    $by_answers = explode("}{","$stat");
    for ($step=0;$step<$ans_kol;$step++)
    {

    echo'<tr><td class="text">'.$ans[$step].'</td>';
    echo'<td>'.$by_answers[$step].'</td><td>&nbsp;</td></tr>';

    }

    echo'<tr><td class="head_s">Количество проголосовавших</td><td class="text" colspan="2">'.$tot.'<Br>";?></td></tr>';

    chdir('poll');
    include('sets.php');

    echo'<tr><td><a href="2fp.php?ad=1&id='.$uin.' class="link">Принять участие</a></td></tr>'; // Принять участие
    echo'</table><table><tr><td>Остальные голосования</td></tr>';

    $sql = "SELECT * FROM poll WHERE active='0'";
    $res = mysql_query($sql) or die(mysql_error());
    $nums = mysql_numrows($res);
    for ($step=0;$step<$nums;$step++)
    {
    $name = mysql_result($res,$step,'name');
    $uin = mysql_result($res,$step,'id');
    if ($uin <> $id){

    echo'<tr><td><a href="shall.php?id='.$uin.' class="link">'.$name.'</a></td>'; // Перейти к голосованию
    echo'<td><a href="2fp.php?ad=1&id='.$uin.' class="link">Принять участие</a></td></tr>';//Принять учатие в данном голосовании
    }
    }
    echo'<tr><td><a href="show.php" class="link">На первую страницу</a></td></tr><tr><td><a href="arch.php" class="link">Архив голосований</a></td></tr></table>';
    ?>

    Схема такая:
    show.php - Первая страница раздела голосований. Показывает статистику по активному голосованию и открывает дотуп к остальным голосованиям.
    2fp.php - Вывод формы для принятия учатия в голосовании.
    arch.php - Вывод архива голосований(показ статистики).
    adv.php - Скрипт, добавляющий голос и делающий элементарную проверку.
    shall.php - Вывод всех активных голосований.

    Первый и последний стрипт мы рассмотрели. Рассмотрим остальные три. Начнем с того, что попроще - <b>2fp.php:
    <?
    ...
    switch($ad)
    {
    default:
    $sql = "SELECT * FROM poll WHERE first_page=1"; // Делаем выборку, если нужно голосование с первой страницы
    $res = mysql_query($sql) or die(mysql_error());
    break;

    case '1':
    $sql = "SELECT * FROM poll WHERE id='$id'"; // Делаем выборку из других активных голосований
    $res = mysql_query($sql) or die(mysql_error());
    break;
    }
    $name = mysql_result($res,0,'name'); // Выбираем информацию. Этот блок общий для обеих вриантов
    $quest = mysql_result($res,0,'quest');
    $answ = mysql_result($res,0,'answ');
    $ans_kol = mysql_result($res,0,'qkol');

    echo'<form action="adv.php" method="POST"><table width="100%" border="1"><input type="hidden" name="uin" value=".'$name.'">'; // Скрипт голосования
    echo'<tr><td><h4>'.$name.'</h4></td></tr>';
    echo'<tr><td><b>'.$quest.'</b></td></tr>';

    $answer = explode("}{","$answ"); // Выводим форму. С кнопкой :)))
    for ($step =0;$step <$ans_kol;$step++)
    {

    echo'<tr><td><input type="radio" name="ans" value ="'.$step.'">'.$answer[$step].'</td></tr>';

    }
    echo'<tr><td><input type="submit" value="go"</td></tr><tr><td></td></tr></table></form>';
    ?>
    Надеюсь, что здесь вопросов не возникнет. Как не возникнет их и в скрипте adv.php:
    <?
    ...
    if (ipcheck()) // Проверка IP адреса. Рассмотрим в другой статье
    {
    echo"NOt Allowed!";
    }
    else
    {
    echo"Added<br>";
    $sql = "SELECT * FROM poll WHERE name=$uin"; // Выбираем инфу
    $res = mysql_query($sql) or die(mysql_error());
    $rt = mysql_result($res,0,'anumber');
    $kol = mysql_result($res,0,'qkol');
    $tot = mysql_result($res,0,'total');
    if ($ret='')
    {
    for ($step=0;$step<$kol;$step++)
    {
    if ($step == $ans){$an[$step]=1;}else{$an[$step]=0;} // Заносим голос
    echo"$an[$step]<br>";
    $retr .= $an[$step].'}{';
    }
    }else
    {
    $addt = explode("}{","$rt");
    for ($step=0;$step<$kol;$step++)
    {
    if($step==$ans){
    $adt[$step] = (int) $addt[$step] +1; // Увеличиваем суммарное число проголосовавших
    }else
    {$adt[$step]=(int) $addt[$step];}
    }

    for ($step=0;$step<$kol;$step++)
    {
    $retr .= $adt[$step].'}{'; // Переписываем поле ответов
    }
    }
    $tot++;
    $sql = "UPDATE poll SET anumber='$retr',total='$tot' WHERE name=$uin"; // Пишем результат в базу.
    $res = mysql_query($sql) or die(mysql_error());
    echo"Complete";
    }
    ?>
    И, наконец, скрипт дла просмотра результатов уже прошедших голосований.
    <?
    ...
    echo'<table border="1">';
    if (!isset($id)){
    $sql = "SELECT * FROM poll WHERE active='1'"; // Выбираем голосования из архива.
    }
    else{
    $sql = "SELECT * FROM poll WHERE active='1' AND id='$id'"; // Выбираем конкретное голосование
    }
    $res = mysql_query($sql) or die(mysql_error());

    $name = mysql_result($res,0,'name');
    $id = mysql_result($res,0,'id');
    $quest = mysql_result($res,0,'quest');
    $answ = mysql_result($res,0,'answ');
    $ans_kol = mysql_result($res,0,'qkol');
    $graph_flag = mysql_result($res,0,'graph_type');
    $stat = mysql_result($res,0,'anumber');
    $tot = mysql_result($res,0,'total');

    echo'<tr><td class="head_b" colspan="3">'.$name.'<Br></td></tr>';
    echo'<tr><td class="head_s" colspan="3">Вопрос</td></tr>';
    echo'<tr><td class="text" colspan="3">'.$quest.'<Br></td></tr>';
    echo'<tr><td class="head_s" colspan="3">Варианты ответов</td></tr>';

    $ans = explode("}{","$answ");
    $by_answers = explode("}{","$stat");
    for ($step=0;$step<$ans_kol;$step++) // Отображоаем варианты ответов.
    {
    echo'<tr><td class="text">'.$ans[$step].'</td><td>'.$by_answers[$step].'</td><td>&nbsp;</td></tr>';
    }

    echo'<tr><td class="head_s">Количество проголосовавших</td><td class="text" colspan="2">'.$tot.'<Br></td></tr>';
    echo'</table><table><tr><td colspan="2">Остальные голосования</td></tr>';

    $nums = mysql_numrows($res); // Выводим ссылки на остальные голосования
    for ($step=0;$step<$nums;$step++)
    {
    $name = mysql_result($res,$step,'name');
    $uin = mysql_result($res,$step,'id');
    if ($uin <> $id)
    {
    echo'<tr><td><a href="arch.php?id='.$uin.'" class="link">'.$name.'</a></td></tr>';
    }
    }
    echo'<tr><td><a href="show.php" class="link">На первую страницу</a></td></tr></table>';
    ?>
    В следующий раз я расскажу, как все это управляется, а так же о некоторых методах защиты от накрутки.

Почта рассылки

Увидела вопрос в рассылке:

> 6. Не подскажете, как убрать повторяющиеся пробелы в строке? Может как-то
> через Ereg, только я не знаю как, у меня хорошего описания этой функции
> нету. там есть упоминание о каком-то Pattern, а чего это такое не
> написано.

Показалось, что оптимального ответа не дали. Даю свой вариант ответа:

echo "<pre> This is an example</pre><BR>";
echo eregi_replace("\ {2,}", " ", "<pre> This is an example</pre>");

С уважением,
Елена

Увидела вопрос в рассылке:

> 3. У меня вопрос: сделал массив $array[$word][$i][$j], где $word - ключ
> ассоциативного массива, а
> $i, $j - числовые индексы. Не получается вывести в браузер все элементы
> массива (проходит только
> по [$i][$j], а всё не выводит). Чем я только не пробовал: и foreach, и
> list, и while
> ($bb=each($array)) - ничего не получается! Подскажите, пожалуйста!
> Спасибо!

Показалось, что оптимального ответа не дали. Даю два своих варианта ответа
Для ответов использовался трехмерный массив $t, в котором индексы
первого уровня - строки, индексы второго и третьего уровня - только
числа

$t = array("kuka1" => array(array(1,2), array(3,4)),"kuka2"=>array(array(5,6), array(7,8)) );

Вариант 1:
с точки зрения читабельности кода - проще
с точки зрения скорости - медленнее
рекомендую для изучения, чтобы найти у себя ошибку

foreach ($t as $k=>$v){
foreach ($v as $kk=>$vv){
foreach ($vv as $k3 => $v3) echo "t[".$k."][".$kk."][".$k3."] = ".$v3."<BR>";
}
echo "<HR>";
}

Вариант 2:
с точки зрения скорости - лучший
с точки зрения читабельности кода - ужас :)

foreach ($t as $k=>$v){ /* best for associative arrays */
$size1 = sizeof($v);
for ($i=0; $i < $size1; $i++){
$size2 = sizeof($v[$i]);
for ($j=0; $j < $size2; $j++){
echo "t[".$k."][".$i."][".$j."] = ".$v[$i][$j]."<BR>";
}
}
echo "<HR>";
}
С уважением,
Елена


Вопросы и ответы
задать вопрос

Предлагаю Вам присылать свои вопросы на адрес рассылки. Вопрос должен быть кратким, точным и по теме. Ответы на вопросы по мере знаний будут даваться мной, а если я не смогу дать Вам исчерпывающий ответ - кто-то из подписчиков обязательно поможет. А если Вы знаете ответ на заданный вопрос - не поленитесь ответить. Этим Вы очень поможете кому-то решить свою проблему. Синтаксис и грамматика - авторские.

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

задать вопрос

Вопросы: 

  1. Мне нужно написать RegEx выражение для отлова неверного логина, вот что должно быть (т.е. только эти символы разрешается использовать в логине, если введены другие - выдать "неверный логин"):
    A-Z a-z А-Я а-я _ ! ? - ~ Тоесть все буквы русского и английского алфавита в любом регистре и _ ! ? - ~
    И никакие другие (даже пробел нельзя). В логине не больше 15 символов.Кто поможет?
    ответить
  2. Как на PHP или на Java сделать так, чтобы я мог смотреть, с какого сайта(URL) человек попал на мою страницу?
    ответить
  3. На своем сайте я организовал сбор статистики посещений различных страниц сайта. Было бы интересно
    отследить, где в Cети лежат ссылки на мой ресурс. PHP осваиваю недавно, чувствую, что задача невыполнима его средствами. Но... Чем черт не шутит...
    ответить
  4. Как на ПХП сделать так, чтобы в браузер по очереди выдавались две, или более, разные строки include()? Для поочередного показа банеров.
    ответить
  5. Как сделать скрипт, который бы показывал сколько людей сейчас на сайте. Как можно удалить из массива несколько строк, которые находятся в середине массива. Подскажите какой хостер лучше WALLST.RU или hut.ru или может есть какой-нибудь лучше. Обязательна поддержка пхп.
    ответить
  6. Я занимаюсь програмированием на ПХП и MySQL (саморазвитие), но раньше у меня была система Win
    NT, а сейчас у меня Windows 2000 Prof. Я видел в Инете Апачи под винду, но там они под NT и 9х.
    Есть ли какой-то апач под Windows 2000 Prof или можно использовать тот, что для NT ?
    ответить
  7. Как установить поиск по страницам сайта например с помощью поисковиков Апорт, Яндекс, Лайкос, и т.д.
    ответить
  8. Можно ли закачивать файлы по той схеме как работают программы Go!Zilla и RegetDeluxe только по другому не сервер-клиент а клиент-сервер
    ответить
  9. Помогите!!! Установил я себе Apache.Но сайт почему-то не работает только по IP, т.е я дал своему компу имя takonet.co.il ввожу в браузере http://takonet.co.il работает, но только с моего компьютера, а с других не хочет.И вообще работает ли у каго-то сервер под win98 или нужен NT/Unix и какие у них преимущества?
    Нужет совет помогите пожайлуста!
    ответить
  10. Подскажите а как влияет тип браузера клиента на отображение определенной хтмл-странички
    ответить
  11. Пожалуйста прокомментируйте следующие функции
    $fp = fopen("http://www.php.net/", "r");
    $fp = fopen("ftp://user:password@example.com/", "w");
    ответить
  12. подскажите а как отобразить колличество человек находящихся на сайте в это время, мне нужно разместить счетчик на каждой странице и должен он работать так чтобы зарегистрировать посещение одного человека только раз за все его время обращения с многочисленными страницами на сайте на текущее время, а также скажем если он через минут 15 зашел снова на мой сайт - не считать это посещением С уважением Евгений
    ответить
  13. Вопрос такой Имею базу данных на MySQL и через PHP ее использую. Делая поиск по базе (там
    есть поле Name - названия товаров на кириллице) в Select использую функцию UCase(name) ... но на кириллице она отрабатывает не корректно - некоторые буквы переводит на верхний регистр а некоторые нет ... отсюда не находятся по базе данные при поиске без учета регистра (при поиске с учетом регистра
    все проходит ) Как избавиться от этого или использовать другую функцию ... может кто сталкивался с этим ? при проверке использую конструкцию Select .... From ... Where instr(UCASE(name),UCASE($str_find)
    Заранее благодарен Денис postmaster@parfum.ru
    ответить
  14. Не подскажете, где ошибка в этом скрипте? Так как у меня на домашнем сервере (Apache+Perl+PHP) работает нормально, но на сервере выдает ошибку : Parse error: parse error, expecting ';'' counter.php on line 36

    <?php
    // Our log file;
    $counter = "./data/counter.txt";

    // Date logging;
    $today = getdate();
    $month = $today ['month'];
    $mday = $today ['mday'];
    $year = $today ['year'];
    $current_date = $mday . $month . $year;

    // Log visit;
    $fp = fopen($counter, "a");
    $line = $REMOTE_ADDR . "|" . $mday . $month .
    $year . "\n";
    $size = strlen($line);
    fputs($fp, $line, $size);
    fclose($fp);

    // Read log file into array;
    $contents = file($counter);

    // Total hits;
    $total_hits = sizeof($contents);

    // Total hosts;
    $total_hosts = array();
    for ($i=0;$i<sizeof($contents);$i++) {
    $entry = explode("|", $contents[$i]);
    array_push($total_hosts, $entry[0]);
    }

    $total_hosts_size = sizeof(array_unique($total_hosts));

    // Daily hits;
    $daily_hits = array();
    for ($i=0;$i<size of($contents);$i++) {
    $entry = explode("|", $contents[$i]);
    if ($current_date == chop($entry[1])) {
    array_push($daily_hits, $entry[0]);
    }
    }
    $daily_hits_size = sizeof($daily_hits);

    // Daily hosts;
    $daily_hosts = array();
    for ($i=0;$i<sizeof($contents);$i++) {
    $entry = explode("|", $contents[$i]);
    if ($current_date == chop($entry[1])) {
    array_push($daily_hosts, $entry[0]);
    }
    }
    $daily_hosts_size = sizeof(array_unique($daily_hosts));

    // Let's display everything;
    echo "Total hits: " . $total_hits . "<br>Total
    hosts: " . $total_hosts_size . "<br>Daily hits: " .
    $daily_hits_size . "<br>Daily hosts: " .
    $daily_hosts_size;
    ?>
    Заранее большое спасибо.
    ответить
  15. Что-то я не могу найти инфу об установки php и apache в Window XP. Помогите, please. :-)()) Сергей sergey_sheblucin@chat.ru
    ответить




    Ответы на заданные вопросы:
  1. Как установить значение в куки другого пути, например, находишься в http://tosya.hut.ru/gb/  , а нужно установить значение для http://tosya.hut.ru/photo/   ?
    Ответ:

    куки, насколько я понимаю, устанавливаются для всего домена, а не для каждой директории внутри него
  2. Можно ли сделать скрипт комментариев к статьям (около 100 ) но без использования баз чтобы комментарии хранились в текстовых файлах с тем же именем, что и статья. нужно что б скрипт комментария подключался инклудом в конец строки, а не статья вставлялась в скрипт.
    Ответ:


  3. Как из файла считать в массив с 0-10 строку, 11 строку вывести на экран, а дальше с 12 по 20?
    Ответ:

    Просто. Считать сначала весь файл в массив, а потом делай что надо.

    $array = file($filename); //запихивает файл в массив построчно echo $array[11]; puhlik

    если категорически не приветствуется присутствие 11-й строки в получаемом массиве - то есть 2 способа:
    1) считать весь файл в массив с помощью функции file и в результирующем массиве удалить 11-ю строку, предварительно вывев ее на экран
    $arr = file($filename);
    echo $arr[11];
    $arr = array_merge ( array_slice ($arr, 0, 11), array_slice($arr, 12 ) );
    2) считывать файл в массив построчно и при считывании 11-й строки не записывать ее в массив, а вывести на экран
    $tt = fopen ($filename, "r");
    $len = filesize($filename);
    $arr = array();
    $i = 0;
    $equal = false;
    while( !feof($tt) ){
    if ($equal && $i == 11) $i++;
    if ($i == 11 && (!$equal) ){
    echo "11th line : <BR>".fgets($tt, $len)."<BR>";
    $equal = true;
    continue;
    }
    $arr[$i] = fgets($tt, $len);
    echo "<HR>".$arr[$i]; //control output
    $i++;
    }


  4. Проблема такова. Вот скрипт:

    $news = new news();
    $news->display_formainpage(5);
    unset($news);

    А вот сам класс:

    class news {
    var $news_id;
    var $link;
    var $db;
    var $news_array;
    function news () {
    include("./tpl/mysql.inc");
    $this->link = @mysql_connect($mysql_server, $mysql_login, $mysql_pass)
    or die("Can't connect to MySQL Server");
    $this->db = @mysql_select_db($mysql_db, $link)
    or die("Can't connect to database");
    }
    function display_formainpage ($amount) {
    echo $amount;
    //$this->get_news($amount);
    //$this->display();
    }

    Если вторая строка основного скрипта закомментирована, то все пучком. Но если я ее раскомментирую, то Апач 1.3.6 выдает недопустимую операцию. Система W2K. Где грабли? С уважение, Левченко Николай
    Ответ:

    В скрипте ошибка в этой строке:
    $this->db = @mysql_select_db($mysql_db, $link)
    $link определена как переменная класса, следовательно, к ней надо обращаться $this->link. Скорей всего проблема не из-за этого, однако ошибку исправить стоит.
  5. Очень нужен скриптик. Но если у вас ещё есть капелька сострадания к человеку, который пока прочитал только 20 страниц книги по пхп (Си заставляют учить) напишите как можно сделать такое: Что-то типа банерной системы, но с ссылками. То есть надо чтоб скрипт выводил случайную ссылку и считал сколько раз показалась ссылка и сколько раз перешли по этой ссылке, а ссылки должны
    храниться в TXT -файле Клянусь! Когда выучу пхп тоже буду кому нить помогать
    Ответ:

    Cоздадим файл, в котором будем хранить всю информацию - data.txt. Файл содержит записи вида:

    URL1|LINK1|SHOW1|CLICK1
    URL2|LINK2|SHOW2|CLICK2 , например
    http://www.mail.ru|Бесплатная почта!!|0|0...
    Где
    URL - ссылка, куда будет переходить пользователь по клику;
    LINK - имя ссылки, которая будет выводится на экран;
    SHOW - показы ссылки, пишем изначально 0;
    CLICK - клики по ссылке, пишем тоже 0.
    Далее:
    Два файла: один файл будет отвечать за показ ссылки - banner.php,
    другой - за учет кликов по ссылке, назовем его click.php.
    Итак, файл banner.php:
    <?
    $array_ref = file('data.txt');
    srand((double)microtime()*1000000);
    $pos = rand(0,(sizeof($array_ref)-1));
    $data_ref = explode('|',$array_ref[$pos]);
    echo "<a href=click.php?banner=$pos
    target=_blank>$data_ref[1]</a>";
    $data_ref[2]++; // количество показов
    $array_ref[$pos]= join('|',$data_ref);
    $fp= fopen ('data.txt',"w");
    flock($fp,3);
    fwrite ($fp, join('',$array_ref));
    fclose ($fp);
    ?>
    Файл click.php :
    <?
    $array_ref = file ('data.txt');
    /*В переменной $banner - у нас уже переданный из html-файла номер ccылки,
    по которой кликнули.
    */
    $data_ref=explode ("|", $array_ref[$banner]);
    $data_ref[3]=$data_ref[3]+1;
    $array_ref[$banner]=join('|',$data_ref)."\n";
    $fp= fopen ('data.txt',"w");
    flock($fp,3);
    fwrite ($fp, join('',$array_ref));
    fclose ($fp);
    // Отправляем пользователя по адресу,
    // хранящемуся в переменной $data_ref[0];
    @header("Location: http://$data_ref[0]");
    ?>
    С уважением Elena
  6. Хотелось бы узнать как работать с матрицами в пхп: у меня есть матрицы двух типов: 6х6 и n на n (где n оговаривается заранее).
    Вообщем у меня маленький опыт программирования (немного на C) - тк я попытался провернуть это по привычке - не вышло. хотелось бы узнать как формировать матрицы, что описывать (если нужно) и как их распечатывать (что бы это все таки была   матрица, а не строка =) ) Заранее благодарен Савельев Филипп
    Ответ:

    Матриц в РНР нет как определенного объекта... можно определить свой класс для двумерного неассоциативного массива размером n на n (где n передается параметром в конструктор), в котором и определить все необходимые действия с матрицами, а именно: способ заполнения матрицы
    и способ ее вывода на экран...
  7. Есть проблемка:
    Fatal error: Call to undefined function: mysql_connect() in mysql.php on line 14
    получается что php не понимает функции mysql? Администратор утверждает, что устанавливал поддержку mysql при установке php и mysql как таковой работает ... В чём может быть проблема? (OS Linux, PHP4)
    Ответ:

    Врет админ

задать вопрос


Обмен ссылками и баннерами

Предлагаю Вам стать участниками баннерообмена. Ваши ссылки и описания Ваших сайтов вы можете присылать по адресу рассылки - virtualphp@tut.by Все ссылки обязательно появятся в этой рассылке. Если есть желание разместить свой баннер 88*31 на сайте рассылки http://virtual.bresttelecom.by/php/ , укажите это дополнительно, и пришлите код своего баннера. В любом случае, Вам надо будет разместить у себя код баннера сайта рассылки, и только на главной страничке Вашего сайта.

Взять код моего баннера (на выбор) можно по адресу: http://virtual.bresttelecom.by/php/index.phtml?php/banner.html или воспользоваться этим:

<a href="http://virtual.bresttelecom.by/php/"><IMG SRC="http://virtual.bresttelecom.by/baner/8831.phtml"
alt="Виртуальный Брест" width="88" height="31" border="0"></a>

Наши друзья

Правила у меня стандартные - описания Ваших сайтов будут периодически (в зависимости от их количества) размещаться в рассылке. И конечно - будет отдельная страничка на сайте, на которой будут представлены все друзья сайта.

Опять прошли чистки, удалены все, на чьих главных страничках нет моего баннера. Жаль, что так много. Если кто-то удален по ошибке - напишите.

http://virtual.bresttelecom.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://price.bresttelecom.by - сайт прайсов фирм города Бреста. Поиск, подсчет, реклама и т.д.
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!
WebCraft - всё для вебмастеров, увеличение вашего трафика на 200 посетителей в день.

http://sos.dax.ru - Проект "SOS:Помощь пользователю". На сайте вы найдете множество статей, советов по компьютеру. Всегда свежий софт. А также вы сможете задать вопрос и получить на него моментальный ответ. Если вам нужна помощь - мы поможем вам!
http://www.uvd.tula.ru - сайт криминальной милиции УВД Тульской области. Здесь будет все, что касается милиции, права и жизни города Тулы.
http://myvote.hut.ru - MyVote - голосование на Вашем сайте.Сервис для всех вебмастеров, которые хотят сделать свой сайт более интерактивным. Позволяет организовать опрос мненияпользователей на любом сервере.
http://www.sura.ru/maxwell Математика, Алгоритмы, Программирование. На сайте можно найти описания различных алгоритмов и методов, относящихся к различным математическим (и не только) дисциплинам.
http://babylon1.narod.ru - это разделы посвящённые созданию и раскрутке сайта, созданию эффективного баннера, интересным эффектам на java-скриптах, php-скриптах и cgi-скриптах. А также здесь Вы найдёте программы для ускорения интернета, памяти, компьютера, системы, Windows и многое другое интересное и полезное, что Вас, надеюсь, заинтересует.


Сайты в тему

Предлагаю Вам коллекцию сайтов, где Вы сможете отыскать различную информацию по поводу РНР. Если у Вас есть предложения по поводу расширения этого списка - я с удовольствием добавлю сюда еще один полезный ресурс. Присылайте свои ссылки и описания.

  • http://www.php.net/ - официальный сайт РНР. Масса информации, но только для тех, кто дружит с английским.
  • http://www.php-encoder.f2s.com - защита РНР скриптов UPDATED.
  • http://phpclub.net - Архив бесплатных PHP-приложений (вкл. E-commerce), форумы, чаты, рассылки, книги, обучение, хостинг.
  • http://www.devshed.com/Server_Side/PHP/ интересные статьи по PHP и не только.
  • http://ancient.dax.ru На сайте много готовых решений на PHP: форумы, чаты, гостевые книги и многое другое. Кроме того сам сайт реализован на php.
  • http://detail.phpclub.net/ - как обычно, о РНР.
  • http://firststeps.narod.ru/html/php/php.html
  • http://detail.phpclub.net/
  • http://phpclub.unet.ru
  • http://open.appideas.com/   сборник скриптов
  • http://programmingpub.com/scripts.html   скрипты на perl,php,python,tcl
  • http://px.sklar.com   php сборник скриптов
  • http://phplib.netuse.de   Здесь можно найти самую матёрую библиотеку на php(не отдельные скрипты, а цельное пособие по разработке), только не спешите подписываться на рассылки (авторы думают что все в мире должны знать немецкий
  • http://php.resourceindex.com/   коллекция скриптов
  • http://phpwizard.net   Tobias Ratschiller ничего не говорит?
  • http://www.umnik.f2s.com/ содержит информацию для вебмастера (по всем актуальным языкам веб-программирования), установка домашнего сервера Apache (разных версий)+MySQL+PHP+Perl. Также можно подписаться на рассылки
    "Вопросы и ответы по ОС" и "Будь достойным вебмастера". Имеются множество советов по компьютеру...
  • www.phpbuilder.com Здесь есть все! Форум, статьи, мануал, скрипты, да и вообще очень много профессионалов, тусующихся на сайте.
  • http://phpclasses.upperdesign.com/ Там находится масса классов на php, имеется рассылка на английском
    языке, регистрация бесплатная.
  • http://www.sourceforge.com - Вот IMHO очень полезный сайт. И не только для PHP-программистов, но и для всех остальных. Там десятки тысяч готовых примеров.

Где можно посмотреть

А и правда. РНР, да РНР! А где посмотреть как все это работает и оценить, стоит или нет заниматься этим... Правильное решение будет таким. Посетите сайты, указанные ниже, и посмотрите как они работают. Кстати, если хотите продемонстрировать всем свой проект или то, чего Вы достигли изучая РНР, присылайте ссылку и описание, и все это будет размещено здесь. Только не забудьте поставить у себя наш баннер, и обязательно на главной страничке.

http://virtual.bresttelecom.by - Виртуальный Брест. На РНР работают чат, форум, гостевая, объявления, статистика посещений, обмен компакт дисков, анекдоты.
http://www.uvd.tula.ru - сайт УВД Тульской области.
http://www.andrey.nnov.ru "Сайт Андрея Зайчикова" - Поможет начинающим программистам стать профессионалами. Алгоритмы, статьи, книги, faq и многое другое.
www.puhlik.f2s.com - Система позволяет провести опрос (голосование) любой целевой аудитории (посетители сайта, участники форума и т.д.). Полностью написана на PHP4 с использование MySQL.
http://anek.hut.ru - WWW Каталог. Весь сайт написан на PHP + MySQL


Подпишитесь на рассылки!

Рассылки Subscribe.Ru
Программируем на PHP - вопросы и ответы
Новости сайта Виртуальный Брест
Оптимизация и настройка компьютера
SOS:Помощь пользователю Интернета
Вэб-строительство Профессионалам
Кроссворды от К.Ермакова
JavaScript и PHP
:-) ШуТкИ - ШутКамИ (-:
Dummpy Daily eTips
Аббревиатуры и термины в компьютерном мире
Тяжелая музыка от А до Я

Здесь будет публиковаться список рассылок, рекомендуемых к подписке. Если у Вас есть рассылка - предлагаю Вам обменяться подобной формочкой для подписчиков. Достаточно прислать мне код рассылки и ее название.


автор рассылки Андрей Кухарчик / http://virtual.bresttelecom.by/php



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное