Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как написать гостевую книгу на PHP?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Первый вопрос] >> Как написать гостевую книгу на PHP?
Имя
Сообщение << Старые топики   Новые топики >>
Как написать гостевую книгу на PHP? - 2009-10-28 16:16:38.286666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Мне нужно написать гостевую книгу.вот как всё просто.Пока конкретных вопросов нет-просто не понимаю,как это должно работать.
Post #: 1
RE: Помогите с PHP - 2009-10-28 18:45:14.670000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Если обязательно написать самому, то вот тебе в помощь книга:
М.Кузнецов И.Симдянов "PHP Практика создания web-сайтов. 2-е издание".
Там приведено готовое решение с обьяснениями. Будет на что ориентироваться.
Post #: 2
RE: Помогите с PHP - 2009-10-29 09:26:00.726666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Вот что я за ночь накодил:
Файл первый,с формой-
<form method="get" action="файл второй">
<textarea name="msg"…..
<input type="text" name="name"….
кнопки очистить и отправить
</form>

Сохранялка,вынесена в другой файл,где вместо формы написано ваше сообщение добавлено.
Я вынес сохранялку в другой файл,так как иначе можно было добавлять забитое в форму сообщение кнопкой обновить браузера,причем много раз подряд.
<?
if(!$_GET[msg]==""){
$base=fopen('Base.txt','a');
if(is_writable('Base.txt')==false){echo "а вот хуй";}
$date = date("d.m.y - H:i:s");
$stroka=$_GET[name]." ^^".$_GET[msg]." ^^".$date." ^^\n ";
fputs($base,$stroka);
fclose($base);
$_GET[msg]="";}
else
{echo "джаваскриптом сказано,что форма пуста";}
?>

Но проблема никуда не делась-после отправки сообщения снова можно нажимать кнопку обновить,и отправлять его снова и снова.
Вопросы:
1.как очистить $_GET[msg] и $_GET[name]?
2.как альтернатива 1-как заставить посетителя сразу уйти со страницы обработчика?Например,она несколько секунд стоит,а потом автоматически переходит обратно на страницу файла с формой.пытался сделать это с помощью <body onLoad=" и window.open('файл первый') window.close,но почему то ничего не вышло.подозреваю ссебя в криворукости.
3.Базой нужно как-то управлять,хотя бы чистить ее.Как мне это организовать,если отбросить чистку файла base.txt руками?
Post #: 3
RE: Помогите с PHP - 2009-10-29 09:39:42.386666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Спасибо,Spam,за готовый сайт)но мне интересно написать ее самому.
Post #: 4
RE: Помогите с PHP - 2009-10-29 12:44:05.046666   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Darth Padla ты хочешь написать гостевуху, сохраняющую данные в файл? Для начала можешь поразвлекаться, конечно, но это далеко не лучший вариант. Надо использовать базу.

Внимательно просмотри код, что тебе скинул Sрam. Используй его как отправную точку.
Если ничего не поймешь, то книгу в руки и читать, читать, читать…
Post #: 5
RE: Помогите с PHP - 2009-10-30 12:52:50.056666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
$zapros="SELECT * FORM Guestbook";
$rezult=mysql_query($zapros,$link);
$A=mysql_num_fields($rezult);

Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource

Я заемучился ошибку искать,помогите

Первый вопрос остался вопросом.

Кстати,ответ на мой второй вопрос,вдруг кому пригодится:

Вставьте в head:
<meta HTTP-EQUIV= "Refresh" CONTENT="время нахождения на странице в секундах,можно ставить 0; куда по истечению этого времени отправляться">
Post #: 6
RE: Помогите с PHP - 2009-10-30 13:09:54.393333   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Первое, что приходит в голову, это то, что таблица Guestbook не создана.
Post #: 7
RE: Помогите с PHP - 2009-10-30 14:50:38.193333   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Создана и не пуста, название написано правильно.

И еще три вопроса- чем .php отличается от .phtml?
Что такое ассоциативный массив, и в чем его отличие от неассоциативного?
Часто вижу в коде сайта, благородно залитого для меня доблестным Spamом, коему от меня еще одно большое спасибо, такую конструкцию- if(переменная){} или if(!переменная){}.
это равносильно if(переменная!==0 или ""){} и if(переменная==0 или ""){} соответственно?
Если нет, то какая логическая конструкция там используется по умолчанию?  

Ругается на:
while ($line = mysql_fetch_array($result, MYSQL_BOTH) {



}
Таким матом:Parse error: syntax error, unexpected '{'
Причем фигурных скобок,кроме этих двух,ни в коде,ни в комментариях нет вообще,и когда там было вот так:
while ($line = mysql_fetch_assoc($result)) {



}
Всё работало.
Post #: 8
RE: Помогите с PHP - 2009-10-30 15:05:21.393333   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
К регистру названия таблиц не чувствительна. Чтобы найти ошибку в работе с базой попробуй проделать все запросы скрипта из консоли.

quote:

чем .php отличается от .phtml?

Грубо говоря, ничем. Ты можешь так настроить сервер, что даже .jpg будет рассматриваться как скрипт.

quote:

Что такое ассоциативный массив, и в чем его отличие от неассоциативного?

Неассоциативный массив - массив храняший ряд значений, к которым можно обратиться по номеру.
Ассоциативный массив - массив хранящий связки ключь=>значение. К любому значению можно обратиться по ключу.

quote:

if(переменная){} или if(!переменная){}.
это равносильно if(переменная!==0 или ""){} и if(переменная==0 или ""){} соответственно?

Правильно, но не совсем. Более верно:
if(переменная){} ————> if(переменная!=false){}
if(!переменная){} ————> if(переменная==false){}
Post #: 9
RE: Помогите с PHP - 2009-10-30 15:29:29.396666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Нашел ошибку в SQL- запросе- в нем написано FORM вместо FROM. Это ведь баг называется?

Значит,в неассоциативном массиве ключом является номер,так?

Переменных много разных.
Тип NULL всегда false
Для численных false <=> 0
Для строковых        <=>  ""
Для массивов - отсутсвие элементов(все элементы==false)
Так?

Также имеется тип данных object, в который я совсем не въехал.
Является ли resourсe строковой переменной?
Post #: 10
RE: Помогите с PHP - 2009-10-30 15:40:28.270000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
quote:

while ($line = mysql_fetch_array($result, MYSQL_BOTH) {

}


Ты забыл одну круглую скобку:
while ($line = mysql_fetch_array($result, MYSQL_BOTH)){

}

quote:

Переменных много разных.
Тип NULL всегда false
Для численных false &lt;=&gt; 0
Для строковых &lt;=&gt; ""
Для массивов - отсутсвие элементов(все элементы==false)
Так?


NULL - это значение обозначающее отсутствие значения, т.е. пустота.
false - это значение логического типа, обозначающее ложь
Если сравнивать значения баз учета типа то:
NULL==false==0==""
Но если мы сраним с учетом типа то:
NULL===false //вернет false
false===0 //вернет false
0==="" //вернет false

object - объект. Что это поймешь, когда дойдешь до объектно-ориентированного программировавния.
Post #: 11
RE: Помогите с PHP - 2009-10-30 15:55:05.170000   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Спасибо.


А что насчет массивов?Например,как работает условие у того самого while ($line = mysql_fetch_array($result, MYSQL_BOTH)){}?
Post #: 12
RE: Помогите с PHP - 2009-10-30 16:10:56.990000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Функция mysql_fetch_array() принимает в качестве аргумента дескриптор результирующей таблицы, возвращает первую строку этой таблицы в виде массива и переводит указатель на следующую строку (значит, что при втором вызове функция вернет вторую строку). Когда достигнут конец таблицы возвращается не массив а просто логическое false.
Post #: 13
RE: Помогите с PHP - 2009-10-30 16:14:30.796666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Спасибо.вот здесь ты мне по крупному глаза раскрыл.
Post #: 14
RE: Помогите с PHP - 2009-10-30 17:31:48.106666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Как мне сделать так,чтобы в базе данных поля упорядочивались по одному из столбцов,содержащему номера?
при добавлении поля я в этот столбец ничего не записываю,у него стоит параметр auto_increment
Post #: 15
RE: Помогите с PHP - 2009-10-30 18:02:11.653333   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Перепутал поля и ряды.
На:
CREATE TABLE `files` (
`id_file` INT NOT NULL AUTO_INCREMENT ,
`FileUrl` TEXT NOT NULL ,
`NameFile` TEXT NOT NULL ,
`Comment` TEXT NOT NULL ,
`hide` INT NOT NULL )
Ругается:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key


Попробовал прикрутить Primary key:
CREATE TABLE `files` (
`id_file` UNSIGNED TINYINT NOT NULL AUTO_INCREMENT ,
`FileUrl` TEXT NOT NULL ,
`NameFile` TEXT NOT NULL ,
`Comment` TEXT NOT NULL ,
`hide` ENUM( 'hide', 'show' ) DEFAULT 'show' NOT NULL ,
PRIMARY KEY ( 'id_file' ) ,
);
Говорит:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''id_file'),
)' at line 7
Post #: 16
RE: Помогите с PHP - 2009-10-30 18:34:19.680000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Если объявил столбец как AUTO_INCREMENT, надо, чтобы он был индексным.
CREATE TABLE `files` ( `id_file` INT NOT NULL PRIMARY KEY AUTO_INCREMENT , `FileUrl` TEXT NOT NULL , `NameFile` TEXT NOT NULL , `Comment` TEXT NOT NULL , `hide` INT NOT NULL )
Упорядочить данные можно при выводе:
SELECT * FROM files ORDER BY id_file;
Post #: 17
RE: Помогите с PHP - 2009-10-30 18:38:38.150000   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Как удалять свои посты?

А как упорядочить по убыванию?
Post #: 18
RE: Помогите с PHP - 2009-10-30 19:05:21.950000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Удалять свои посты нельзя, можно просто стереть все содержание при редактировании.

Сортировка по убыванию:
SELECT * FROM files ORDER BY id_file DESC;


quote:

Попробовал прикрутить Primary key:
CREATE TABLE `files` ( `id_foto` TINYINT NOT NULL AUTO_INCREMENT ,
`FileUrl` TEXT NOT NULL ,
`NameFile` TEXT NOT NULL ,
`Comment` TEXT NOT NULL ,
`hide` ENUM( 'hide', 'show' ) DEFAULT 'show' NOT NULL ,
PRIMARY KEY ( 'id_foto' ) ,
)
Говорит:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''id_foto'),
)' at line 7


Делай так:
CREATE TABLE `files` ( `id_foto` TINYINT NOT NULL AUTO_INCREMENT , `FileUrl` TEXT NOT NULL , `NameFile` TEXT NOT NULL , `Comment` TEXT NOT NULL , `hide` ENUM( 'hide', 'show' ) DEFAULT 'show' NOT NULL , PRIMARY KEY (id_foto) ) Лишняя запятая в конце была и при объявлении индекса не надо брать имя столбца в кавычки.
Post #: 19
RE: Помогите с PHP - 2009-10-30 19:14:04.276666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Перечитал тред, выковырял вопросы,оставшиеся вопросами:
1. Как очистить $_GET[msg] и $_GET[name]?
2. Как сделать так,чтоб при закрытии вкладки открывалось еще одно окно?
Такая конструкция не работает,и ошибок не выдает:
&lt;body onUnLoad="window.open("index.html", "", "")"&gt;
Post #: 20
RE: Помогите с PHP - 2009-10-30 20:13:18.993333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
1.$_GET[msg] = $_GET[name] = null; unset($_GET[msg], $_GET[name]); 2. Если onunload не пашет, тогда скорее всего такой трюк в современных браузерах более не актуален.
Post #: 21
RE: Помогите с PHP - 2009-10-31 22:44:02.870000   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Гостевая написана.теперь нужна фотогалерея)
Post #: 22
RE: Помогите с PHP - 2009-11-01 02:20:51.486666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Вот код формы:
&lt;form&nbsp; action=action.php method="POST"&gt;
&lt;input class=input type=text name=name&gt;
&lt;input class=input type=text name=comment&gt;
&lt;input class=input&nbsp; type=file name=image&gt;
&lt;input type=checkbox name=hide&gt;

action.php
одна из первых строк кода-
empty($_POST['image']) - выдает true.WTF?
Post #: 23
RE: Помогите с PHP - 2009-11-01 02:27:10.490000   
][aKER_теоретик

Сообщений: 1192
Оценки: 0
Присоединился: 2009-03-30 09:17:08.123333
Уважаемый товарищ падла, Вам тут целиком сайт написать?
Post #: 24
RE: Помогите с PHP - 2009-11-01 02:29:35.363333   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Нет,спасибо,мне уже написали-четвертый пост)
мне объяснить как оно работает.точнее почему мой практически идентичный вариант не работает.
Post #: 25
RE: Помогите с PHP - 2009-11-01 02:31:14.580000   
][aKER_теоретик

Сообщений: 1192
Оценки: 0
Присоединился: 2009-03-30 09:17:08.123333
Есть много готовых скриптов фотогалереи на php в интернете. Я только что написал в гугле "фотогалерея php" и получил массу полезных ссылок. Можно скачать эти скрипты и построчно разобраться как они работают.
Post #: 26
RE: Помогите с PHP - 2009-11-17 00:01:13.676666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
у меня в таблицу не помещается больше 127 элементов(
до 127 полет нормальный,а потом- Duplicate entry '127' for key 1
Post #: 27
RE: Помогите с PHP - 2009-11-17 10:09:08.046666   
Darth Padla

Сообщений: 33
Оценки: 0
Присоединился: 2009-10-28 16:02:48.713333
Все,въехал. key 1 был tinyint
Post #: 28
Страниц:  [1]
Все форумы >> [Первый вопрос] >> Как написать гостевую книгу на PHP?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.