← Декабрь 2001 → | ||||||
2
|
||||||
---|---|---|---|---|---|---|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
16
|
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
За последние 60 дней ни разу не выходила
Сайт рассылки:
http://programmazhizni.ru
Открыта:
04-03-2001
Адрес
автора: inet.webbuild.php3programm-owner@subscribe.ru
Статистика
0 за неделю
Программируем на PHP - вопросы и ответы.
_ Здравствуйте! Выпуск номер 39
_
рассылки сайта РНР для всех!
Вы получили этот выпуск рассылки, так как являетесь подписчиком рассылок сайта http://subscribe.ru Рассылка выходит еженедельно, и предлагает Вам авторские материалы по теме программирования на скриптовом языке гипертекстового препроцессора РНР. Кроме того - есть система вопросов и ответов, обмен ссылками и баннерами, раздел Ваши письма и многое другое.
Вам доступен форум рассылки:
Офицальный форум сайта
Все вопросы и ответы из форума
будут публиковаться в рассылке!
Архив рассылки
заказать книги по РНР (только Беларусь)
Голосование на базе. Часть первая. (not Yet)
автор скрывается под адресом l0g_err@xakep.ru , все вопросы по этой статье к нему. Кстати, присылайте свои материалы и статьи - они обязательно попадут в рассылку. Только не забывайте про себя любимого - укажите кто Вы и как Вас найти (например адрес Вашего сайта, почты и т.д. :-) Лучше всего в формате HTML.
"А зачем на базе?" - спросите Вы и будете
абсолютно правы. В принципе незачем. Просто делая
как-то систему управления, я столкнулся с
необходимостью дать абсолютно некомпетентному в
кодинге человеку рули от здорового сайта. Я
человек ленвиый, и представив, сколько места на
винте будет занимать архив голосований, и как мне
надо форматировать текстовые файлы, чтобы
собирать ту статистику, которую хотел заказчик,
решил пойти изващенным, но более универсальным
путем.
Сперва поставим задачку:
- Нужно иметь сколько угодно голосований.
- Количество вопросов варьируется от 3 до 6. (вполне условные цифры - это понятно)
- Каждое голосование должно иметь 3 состояния: Активно, В архиве, Пассивно. Принимать участие пользователь может только в первых двух. Третья категория только для просмотра результатов.
- Голосование должно быть редактируемо (Вопрос, варианты ответов).
- Защиту прикрутим минимальную - по 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> </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> </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> </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>";
}
С уважением,
Елена
Вопросы и ответы
задать
вопрос
Предлагаю Вам присылать свои вопросы на адрес рассылки. Вопрос должен быть кратким, точным и по теме. Ответы на вопросы по мере знаний будут даваться мной, а если я не смогу дать Вам исчерпывающий ответ - кто-то из подписчиков обязательно поможет. А если Вы знаете ответ на заданный вопрос - не поленитесь ответить. Этим Вы очень поможете кому-то решить свою проблему. Синтаксис и грамматика - авторские.
Внимание! - вопросы, на которые никто не ответил не будут переноситься в следующий выпуск. Если вы так и не нашли ответ, попробуйте поточнее сформулировать свою проблему и изложить ее еще раз. Если Вы хотите, что бы авторство ответа указывалось в самом ответе, указывайте ссылку на себя в тексте ответа, тогда она пойдет в рассылку.
Вопросы:
- Мне нужно написать RegEx выражение для отлова
неверного логина, вот что должно быть (т.е. только
эти символы разрешается использовать в логине,
если введены другие - выдать "неверный
логин"):
A-Z a-z А-Я а-я _ ! ? - ~ Тоесть все буквы русского и английского алфавита в любом регистре и _ ! ? - ~
И никакие другие (даже пробел нельзя). В логине не больше 15 символов.Кто поможет?
ответить - Как на PHP или на Java сделать так, чтобы я мог
смотреть, с какого сайта(URL) человек попал на мою
страницу?
ответить - На своем сайте я организовал сбор статистики
посещений различных страниц сайта. Было бы
интересно
отследить, где в Cети лежат ссылки на мой ресурс. PHP осваиваю недавно, чувствую, что задача невыполнима его средствами. Но... Чем черт не шутит...
ответить - Как на ПХП сделать так, чтобы в браузер по
очереди выдавались две, или более, разные строки
include()? Для поочередного показа банеров.
ответить - Как сделать скрипт, который бы показывал
сколько людей сейчас на сайте. Как можно удалить
из массива несколько строк, которые находятся в
середине массива. Подскажите какой хостер лучше
WALLST.RU или hut.ru или может есть какой-нибудь лучше.
Обязательна поддержка пхп.
ответить - Я занимаюсь програмированием на ПХП и MySQL
(саморазвитие), но раньше у меня была система Win
NT, а сейчас у меня Windows 2000 Prof. Я видел в Инете Апачи под винду, но там они под NT и 9х.
Есть ли какой-то апач под Windows 2000 Prof или можно использовать тот, что для NT ?
ответить - Как установить поиск по страницам сайта
например с помощью поисковиков Апорт, Яндекс,
Лайкос, и т.д.
ответить - Можно ли закачивать файлы по той схеме как
работают программы Go!Zilla и RegetDeluxe только по
другому не сервер-клиент а клиент-сервер
ответить - Помогите!!! Установил я себе Apache.Но сайт
почему-то не работает только по IP, т.е я дал своему
компу имя takonet.co.il ввожу в браузере http://takonet.co.il
работает, но только с моего компьютера, а с других
не хочет.И вообще работает ли у каго-то сервер под
win98 или нужен NT/Unix и какие у них преимущества?
Нужет совет помогите пожайлуста!
ответить - Подскажите а как влияет тип браузера клиента на
отображение определенной хтмл-странички
ответить - Пожалуйста прокомментируйте следующие функции
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w");
ответить - подскажите а как отобразить колличество
человек находящихся на сайте в это время, мне
нужно разместить счетчик на каждой странице и
должен он работать так чтобы зарегистрировать
посещение одного человека только раз за все его
время обращения с многочисленными страницами на
сайте на текущее время, а также скажем если он
через минут 15 зашел снова на мой сайт - не считать
это посещением С уважением Евгений
ответить - Вопрос такой Имею базу данных на MySQL и через PHP ее
использую. Делая поиск по базе (там
есть поле Name - названия товаров на кириллице) в Select использую функцию UCase(name) ... но на кириллице она отрабатывает не корректно - некоторые буквы переводит на верхний регистр а некоторые нет ... отсюда не находятся по базе данные при поиске без учета регистра (при поиске с учетом регистра
все проходит ) Как избавиться от этого или использовать другую функцию ... может кто сталкивался с этим ? при проверке использую конструкцию Select .... From ... Where instr(UCASE(name),UCASE($str_find)
Заранее благодарен Денис postmaster@parfum.ru
ответить - Не подскажете, где ошибка в этом скрипте? Так как
у меня на домашнем сервере (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;
?>
Заранее большое спасибо.
ответить - Что-то я не могу найти инфу об установки php и apache
в Window XP. Помогите, please. :-)()) Сергей sergey_sheblucin@chat.ru
ответить
Ответы на заданные вопросы:
- Как установить значение в куки
другого пути, например, находишься в http://tosya.hut.ru/gb/ , а нужно
установить значение для http://tosya.hut.ru/photo/
?
Ответ:
куки, насколько я понимаю, устанавливаются для всего домена, а не для каждой директории внутри него
- Можно ли сделать скрипт
комментариев к статьям (около 100 ) но без
использования баз чтобы комментарии хранились в
текстовых файлах с тем же именем, что и статья.
нужно что б скрипт комментария подключался
инклудом в конец строки, а не статья вставлялась
в скрипт.
Ответ:
- Как из файла считать в массив с
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++;
}
- Проблема такова. Вот скрипт:
$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. Скорей всего проблема не из-за этого, однако ошибку исправить стоит.
- Очень нужен скриптик. Но если у
вас ещё есть капелька сострадания к человеку,
который пока прочитал только 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 и n на n (где n оговаривается заранее).
Вообщем у меня маленький опыт программирования (немного на C) - тк я попытался провернуть это по привычке - не вышло. хотелось бы узнать как формировать матрицы, что описывать (если нужно) и как их распечатывать (что бы это все таки была матрица, а не строка =) ) Заранее благодарен Савельев Филипп
Ответ:
Матриц в РНР нет как определенного объекта... можно определить свой класс для двумерного неассоциативного массива размером n на n (где n передается параметром в конструктор), в котором и определить все необходимые действия с матрицами, а именно: способ заполнения матрицы
и способ ее вывода на экран...
- Есть проблемка:
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
Подпишитесь на рассылки!
|
автор рассылки Андрей Кухарчик / http://virtual.bresttelecom.by/php
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||