Общее образование в PHP

Прохожий_

Новичок
Общее образование в PHP

Привет всем. Я потихоньку ознакамливаюсь с начальными стадиямия написания скриптов на php.
Вот что происходит:

PHP:
<?php
$pages="index page1 page2 page3 page4 page5 page6 page7";
$ar_page= preg_split ("/ /", $pages);
$count = count($ar_page);
echo "<table border=1><tr border=0>";

for ($i=0; $i<$count; $i++){
echo "<td border=0><a href=index.php?\$op=$ar_page[$i]>" . $ar_page[$i] . "<br></td>"; }
echo "<tr></table>";
echo "<br>";

$op= $_GET['$op']; 
if ($op==NULL) $op="index";

if ($op==index || $op==page1 || $op==page2 || $op==page3 || $op==page4 || $op==page5 || 
$op==page6 || $op==page7){
$file="$op.txt";

if (@!fopen($file, r)) {  fopen($file, w);  }
else { echo "<br>File Name: " . $file . "<br>File Content: <br>";
include $file; }
}
else echo "page not found";
?>
Так как не спец, решил для себя написать сайт в одну страницу который будет работать с текст файлами как хранителями информации... (сайт сугубо для тренировки навыков).
Вот сейчас появилось пару вопросов:

1. строка:
PHP:
if ($op==index || $op==page1 || $op==page2 || $op==page3 || $op==page4 || $op==page5 || 
$op==page6 || $op==page7){
Вроде я понимаю что можно использовать аррэй, только не понимаю как :(

2. редактирование текстовых файлов. Ходил по разным сайтам, но так и не понял как осуществить возможность редактирования текстового файла! Все описывают как открыть файл (r,w и т.д.) но саму процедуру редактирования и записи обратно в файл не вижу...

Допустим (фрагмент файла edit.php)
PHP:
$file="$op.txt";
if (@!fopen($file, "r+")) {  echo "file if not here";  }
else { $f= fopen($file, 'r+'); 
      $f=file_get_contents($file);   
echo '
<form id="textarea" name="form1" method="get">
  <label></label>
  <textarea name="textarea" rows="24" cols="72"> ' . $f . '</textarea>
  <input type="submit" value="Submit" name="B1">'; 
  echo '
</form>
Что нужно что бы измененная информация ушла в файл и сохранилась там? Вот тут я в тупике. Уже стал бояться работы с файлами - как подумаю, сразу руки опускаются и кажется что если не могу допереть до такого, то php выучить точно нереально :(

спасибо
 

StUV

Rotaredom
1. [m]in_array[/m]
2. [m]file_exists[/m], [m]fopen[/m], [m]fread[/m], [m]fwrite[/m], [m]fclose[/m]
 

Фанат

oncle terrible
Команда форума
Прохожий_
для того, чтобы делать запись в файл, тебе надо понять, как работает пхп.
поэтому прочти сначала PHP FAQ: Самые основы. Как работает PHP.
а потом добавь к этому скрипту ещё один. который принимает данные из формы изаписывает их в файл.
 

Прохожий_

Новичок
StUV
Спасибо за in_array ! Работает как надо!
А вот с файлами у меня действительно трабла... Я там заблудился конкретно :-\
 

Фанат

oncle terrible
Команда форума
Прохожий_
на первый вопрос ответить очень просто.
У тебя есть массив $ar_page, и тебе действительно нужно использовать его.
и функцию isset()
 

StUV

Rotaredom
Я там заблудился конкретно
ты по-русски можешь написать алгоритм редактирования файла?
если да - напиши его, потом спросишь какой из этапов тебе не ясен в плане реализации на пхп...
 

Фанат

oncle terrible
Команда форума
как раз в алгоритме у него, как я понимаю, у него и проблемы.
 

Прохожий_

Новичок
10. Указать на Файл. ($f= fopen($file, 'r+')
20. Прочитать файл. ($f=file_get_contents($file);)
30. Поместить прочитаный из файла текст в поле редактирования.<textarea> ' . $f . '</textarea>

дальше - тупик
40. Отредактированый текст поместить обрытно в файл.
50. Закрыть файл.

хотя я где-то туплю... :-\
 

Фанат

oncle terrible
Команда форума
чтобы не было тупика - читай ссылку, которую я тебе дал.
 

Прохожий_

Новичок
Фанат
Спасибо - сразу стал читать и еще читаю.

-~{}~ 04.12.06 21:24:

:-\ смог создать два файла:
PHP:
<?php
//EDIT.PHP
$f="file.txt";
$file=fopen($f, "r+");
$file=file_get_contents($f); 
echo '
<form method="get" name="form" action="process.php">
<textarea name="textarea">';
 echo $file;
 echo '
</textarea>
<input type=submit value=submit name=but1>
</form>';
?>
и

PHP:
<?php
//PROCESS.PHP
$f="file.txt";
$textarea= stripslashes($_GET['textarea']);
$file = fopen($f, "w");
fputs($file, $textarea);
fclose ($file);
echo "done";
?>

Все работает... В подобном варианте... 
А вот как использовать с вместе с арреем, в одном файле (edit-submit)- понять не могу...
 

Прохожий_

Новичок
Фанат
Сейчас начну писать - завалят и пошлют подальше по причине "синдрома дауна" :)

Банальное "как" :) Ведь это можно сделать? Как я понимаю, нужно создать "отделение" в файле, допустим "submit-changes" и использовать форм метод как /edit.php&do=submit-changes/

Вроде так :)
 

Фанат

oncle terrible
Команда форума
наоборот.
если человек пишет, то именно ему непонятно, как именно он понимает те или иные вещи - его никогда за это не посылают по причине синдрома дауна. С таким диагнозом отправляют только тех, кто не понимает то, что им говорят открытым текстом.
Ты пока таких способностей не выказывал =)

А тому, кто рассказывает, наоборот - проще помочь, объяснить именно то, что он не понимает.
я понимаю, нужно создать "отделение" в файле, допустим "submit-changes" и использовать форм метод как /edit.php&do=submit-changes/
ну, в общем верно.
 

Прохожий_

Новичок
Продвигаемся :)
Допустим я создам функцию
function submit_file_edit ()
Она будет отвечать за помещение информации в файл.
Вопросы:
1. Каким образом можно использовать эту функцию из строки браузера (пример edit.php&op=submit_file_edit)
2. Если у меня будет отдельный файл, а не функция что отвечает за помещение информации в файл то каким образом передать текущее имя файла что был открыт через fopen и других актульных на текущий момент переменных? (Я имею ввиду что название txt файла выходит из массива по отношению к параметру op=.)
 

Фанат

oncle terrible
Команда форума
1. Каким образом можно использовать эту функцию из строки браузера (пример edit.php&op=submit_file_edit)
с помощью оператора if
Если у меня будет отдельный файл, а не функция что отвечает за помещение информации в файл то каким образом передать текущее имя файла что был открыт через fopen и других актульных на текущий момент переменных?
А, типа, если это будет функция, а не файл, то ничего передавать не нужно будет?

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

Скорее всего, ты задал свои вопросы не подумав. И не попробовав. попробуй сделать то, что задумал. И в процессе - поразмыслить.
И ссылку ещё пару раз почитай.
 

Прохожий_

Новичок
с помощью оператора if
ага, понятно :) Спасибо. Например:

PHP:
$op=$_GET['op'];
if ($op=="submitfileedit")
{ 
$textarea= stripslashes($_GET['textarea']);
$file = fopen($f, "w");
fputs($file, $textarea);
//fclose ($file);
echo "done";
die;
}
//Остальной скрипт
Я понимаю что $textarea будет передано, НО я НЕ могу найти нормальный способ передать имя файла $f. Да, есть вариант сделать так:
PHP:
<input name=file type=hidden value=' . $f . ' >';
echo $f . '</input>
Переменная $f тоже будет передана и ее можно $GET['file']

Но это какжется мне глупым вариантом... Т.е. должен же быть умный способ передачи данных.. а это как микроскопом по орехам :)

А, типа, если это будет функция, а не файл, то ничего передавать не нужно будет?
Нужно, но ответ на этот вопрос будет актуальным для обоих вариантов.

Оба твоих вопроса говорят о том, что ты либо не прочитал, либо вообще не понял, что там написано.
Читал и понял- ну может быть и не все...

Первый вопрос вообще не понятно, зачем тебе нужен.
Как я писал выше - общее образование. Усвоив этот вариант я больше к этому возвращаться не стану, а пойду дальше. И в посте номер 1 я написал "решил для себя написать сайт в одну страницу". Ничего сложного, для практики, для усвоения информации.

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

________________________________________________________________________________

Вот вариант который получился у меня:

INDEX.PHP

PHP:
<?php
echo "This is INDEX page, go to <a href=edit.php>EDIT PAGE</a><br><br>";

$pages="index page1 page2 page3 page4 page5 page6 page7";
$ar_page= preg_split ("/ /", $pages);
$count = count($ar_page);
echo "<table border=1><tr border=0>";

for ($i=0; $i<$count; $i++){
echo "<td border=0><a href=index.php?\$op=$ar_page[$i]>" . $ar_page[$i] . "<br></td>"; }
echo "<tr></table>";
echo "<br>";

$op= $_GET['$op']; 
if ($op==NULL) $op="index";

if (in_array($op, $ar_page)){
//$op==index || $op==page1 || $op==page2 || $op==page3 || $op==page4 || $op==page5 || $op==page6 || $op==page7){
$file="$op.txt";
if (@!fopen($file, r)) {  fopen($file, w); echo "page created"; }
else {
$f= fopen($file, "r");
$f= file_get_contents($file);  
echo '<br>File Name: ' . $file . '<br>File Content: ' . $f . '<br>';
 }
}
else echo "page not found";
?>
EDIT.PHP
PHP:
<?php 
$op=$_GET['op'];
if ($op=="submitfileedit")
{ 
$textarea= stripslashes($_GET['textarea']);
$f=$_GET['file'];
$file = fopen($f, "w");
fputs($file, $textarea);
fclose ($file);
echo "done";
die;
}

echo "This is EDIT page, go to <a href=index.php>INDEX PAGE</a><br><br>";

$pages="index page1 page2 page3 page4 page5 page6 page7";
$ar_page= preg_split ("/ /", $pages);
$count = count($ar_page);
echo "<table border=1><tr border=0>";
for ($i=0; $i<$count; $i++){
echo "<td border=0><a href=edit.php?\$op=$ar_page[$i]>" . $ar_page[$i] . "<br></td>"; }
echo "<tr></table>";
echo "<br>";

echo '
<form id="textarea1" name="form1" method="GET" action="edit.php">
  <label></label>
  <textarea name="textarea" rows="24" cols="72">';
  
$op= $_GET['$op']; 
if ($op==NULL) $op="index";
$f="$op.txt";
if (@!fopen($f, "r+")) {  echo "file if not here";  }
else { $file= fopen($f, 'r+'); 
      $file=file_get_contents($f);  
      echo $file ;
	echo ' </textarea><br>
	<input name=file type=hidden value=' . $f . ' >';
	echo $f . '</input>
  <input type="Submit" value="submitfileedit" name="op">';
  echo '
</form>

<br>File Name: ' . $f . '<br>File Content: ' . $file . '<br>';
 }
?>
Все КАК БЫ делает свое дело, но я хотел бы узнать что было сделано криво :) (например передача данных при редактировании файлов).
Я не понимаю как можно создать array и использовать его в разных файлах, так как к примеру, оба файла edit и index используют много схожего кода, а это не хорошо...
 

Фанат

oncle terrible
Команда форума
Но это какжется мне глупым вариантом... Т.е. должен же быть умный способ передачи данных..
обоснуй. глупость варианта и необходимость наличия "умного".
И как ты себе его примерно представляешь?

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

Прохожий_

Новичок
обоснуй. глупость варианта и необходимость наличия "умного".
И как ты себе его примерно представляешь?
:) На мой взгляд, привинчивать данные к форме через скрытые поля это как то не профессионально... Ощущаю неправильность ситуации... Разве нет более рационального метода ответственного за аттачмент переменных к форме? А если нужно передать сто переменных, так что, нужно на каждую делать хайдэн инпут? Вот это мне и кажется не рациональным...

не понял, какая связь между массивами и общим кодом.
PHP:
$pages="index page1 page2 page3 page4 page5 page6 page7"; 
$ar_page= preg_split ("/ /", $pages); 
$count = count($ar_page); 
echo "<table border=1><tr border=0>"; 

for ($i=0; $i<$count; $i++){ 
echo "<td border=0><a href=index.php?\$op=$ar_page[$i]>" . $ar_page[$i] . "<br></td>"; } 
echo "<tr></table>"; 
echo "<br>";
Оба файла имеют один и тот же код. Т.е. в моем понимании было бы умнее использовать один и тот же фрагмент кода в обоих файлах. Только пока не понимаю как это сделать.
 

Фанат

oncle terrible
Команда форума
Разве нет более рационального метода ответственного за аттачмент переменных к форме?
не понял.
Тебя интересует вопрос, есть ли в языке HTML тип поля, передающий сто переменных за раз?
спецификация HTML находится на сайте www.w3.org
там ты можешь удовлетворить своё любопытство.
А если нужно передать сто
Зачем? Кому придёт в голову передавать сто переменных через форму?
Оба файла имеют один и тот же код.
про код я понял. Я не понял, при чём тут array.

использовать один и тот же код два раза можно, поместив его в отдельный файл и включив его оператором include

А вообще, совсем не обязательно забивать имена файлов в строку, а потом её разбивать. по-моему, логичнее сразу записать их в массив.
А ещё логичнее - вообще ничего в скрипте не писать. И не править скрипт при добавлении каждого файла. по-моему, гораздо проще читать список файлов с диска.

-~{}~ 11.12.06 21:00:

по коду
if (@!fopen($file, r)) { fopen($file, w); echo "page created"; }
else {
$f= fopen($file, "r");
$f= file_get_contents($file);
echo '<br>File Name: ' . $file . '<br>File Content: ' . $f . '<br>';
}
}
else echo "page not found";
этот кусок вызывает у меня много вопросов.
к примеру, осмысленность первой строчки.
равно как и третьей.
совершенно непонятно, зачем тебе значок доллара в имени переменной.

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

опять непонятно, к чему магические манипуляции с fopen.
зачем вывод того же файла под формой - тоже неясно
 

Vladson

Сильнобухер
$ar_page = preg_split("/ /", $pages);
Если это не просто пример а реальный код то в данном конкретном случае проще использовать
$ar_page = explode(' ', $pages);
 
Сверху