Изменение записи по ID-номеру в определенной строке.

Yuriy_S

-=PHP-Club=-
где там? имя формы у меня $name, и где вы выдите такое?
Лучше помогите разобраться со скриптом.
 

breake

Guest
Вот я цитирую Ваш код:
PHP:
if($p_id==$id){  
echo"<form action='test.php' method='post'><input type='text' name='name1' value='$name'><...";
Так вот у переменной имя (name) равно name1, не путайте с полем value! Именно она и передается. Поэтому замените в вашем скрипте, где пишите в файл, проверку с if($name!="") на if($name1!="").
А по поводу $file и $filename: замените в Вашем скрипте все $filename на $file.
 

Yuriy_S

-=PHP-Club=-
хех, так на прошлой странице приведен ещё один код, исправленный, в нем то все ок!
Вопрос то обстоит не с этим, у меня все переменные нормальные, когда я запускаю скрипт, то все выводится в формы, И! когда я редактирую какую либо форму (неважно какую по счету) ТО именно этаа форма с изменениями записывается, а все остальные удаляются. Вот в чем вопрос, как мне сделать что бы все записывалось и ничего не удалялось?
 

breake

Guest
Сейчас поможем... Сейчас чего-нибудь напишу...
 

breake

Guest
Вот такой вариант. (Я пытался максимально придерживаться Вашего кода):

PHP:
INCLUDE("conf.inc.php"); 
echo $style; 
echo "<title>$title</title>"; 
echo $ip; 
echo "<body topmargin=0 leftmargin=0>";

$file="news.txt"; 
$data=file($file) or die("Ошибка октрытия файла!"); 

for($i=0;$i<=count($data);$i++){  
  list($id,$name_r,$email_r,$messg_r,$remess_r)=explode("|", $data[$i]); 
//в каждой форме поставьте вместо method=post method=get и посмотрите в адресе, что передается Вашему скрипту
//обратите внимание на <input type=hidden ...>
  echo "<form method=\"get\" action=\"edit.php\"><input type=\"hidden\" name=\"i\" value=\"$i\"><input type=\"text\" name=\"name1\" value=\"$name_r\" size=\"50\"><input type=\"text\" name =\"email1\" value=\"$email_r\" size=\"50\"><textarea name=\"rep\" rows=\"7\" cols=\"50\">$messg_r</textarea><input type=\"submit\" value=\"ok\"></form>";
}
 
//после форм : 
//вне цикла for
//опять здесь у Вас были не те имена, которые передаются вам из формы
if (isset($i))
{
  if (isset($name1) && !empty($name1))
  {
    $rep=eregi_replace("\n","<br>",$rep); 
    $preid=count($data); 
    $newid=$preid + 1; 

    $arr = file($file);  
    $f=fopen($file, 'w');  

    $arr[$i] = "$newid|$name1|$email1|$rep\n";  
    fwrite($f, implode('',$arr));  
    fclose($f); 
  }
  else
  {
    echo "Не указано имя!";
  }
}
else
{
  echo "Не выбрана запись для редактирования!";
}
Вот такой вариант. Он конечно же не оптимизирован, но вроде бы работать будет :)
 

Yuriy_S

-=PHP-Club=-
а вот предыдущий не работал :(( ТАк же все записи удалял и только одну добавлял! И!! Ещё, когда жмешь кнопку обновить то вообще ввсе удаляется :(
 

breake

Guest
В предыдущем сообщении там первой строчкой чего-то странное получилось, должно было быть так:
"Вот такой вариант. (Я пытался максимально придерживаться Вашего кода):
...
Вот такой вариант. Он конечно же не оптимизирован, но вроде бы работать будет"

Почему-то я не смог отредактировать его :((

А вообще посмотрите, что передается скрипту (смотрите в поле "адрес" Вашего браузера.)
 

Yuriy_S

-=PHP-Club=-
Вот, посмотрел, передаются данные которые введены, и ещё, что странно, этот скрипт просто дописывает отреддактированные данные в конец файла :( ТО есть создается такое же сообщение, только с изменеиями.
 

breake

Guest
А так значит уже записывается не одна запись, а все , но только по корявому. Да? Пришлите список параметров, которые Вы видете в браузере...
 

Yuriy_S

-=PHP-Club=-
http://10.4.28.15/forum/x.php?i=2&name1=%DE%F0%E8%E9+%D1.&[email protected]&remess=YES%21%21%21+%D9%CB%D9%CB%DB%D9%CB&rep=test4
Вот это?
Кстати, они записываются, но в конец файла, и при этом не все, а только измененные, а если изменить несколько, то записываетя то, около которого была нажата кнопка!
 

breake

Guest
Вот! Добрался до дома и протестил Вашу прогу. Понял то, что я Вам предлагал неправильно.

Проблема связана с тем, что если у Вас включены register_globals, то скрипт берет переменную $i (а именно она у нас в поле hidden) из цикла - у нас там тоже $i (область видимости перемнных). Итак:
if (isset($i)){if (isset($name1) && !empty($name1)){... заменяем на:
PHP:
if (isset($HTTP_GET_VARS["i"]))
{
  $i = $HTTP_GET_VARS["i"];

  if (isset($name1) && !empty($name1))
  {
//  ...
$HTTP_GET_VARS["i"] замените на $HTTP_POST_VARS["i"], если в форме method="post" соответсвенно.

Вот, а вообще, в скрипте работа с id происходит неправильно, но к сожалению, я не могу сейчас написать правильный код, но в ближайшее время, я Вам с удовольствием помогу:)
 

Yuriy_S

-=PHP-Club=-
Огромное вам спасибо! Вы единственный кто так хорошо отзывается к новичкам. Очень приятно общаться с такими людьми.
 

breake

Guest
Здравствуйте Юрий!

Нашел несколько минут и вот, что у меня получилось. В коде написано добавления и изменение записей. Работа с id теперь просходит правильно! Единственное я не успел ее хорошо потестить :(

А, вообще, судя по форуму вы заинтересовались MYSQL - это должно значительно упростить задачу и уменьшить код программы :)

PHP:
echo $style;
echo "<title>$title</title>";
echo $ip;
echo "<body>";

$file="news.txt";

//отображаем все сообщения
function showMessages()
{
  global $file, $PHP_SELF;

  $data=@file($file);
  for($i=0;$i<count($data);$i++)
  {
    list($id_r,$name_r,$email_r,$messg_r)=explode("|", trim($data[$i]));
    echo "<form method=\"get\" action=\"$PHP_SELF\"><input type=\"hidden\" name=\"A\" value=\"modify\"><input type=\"hidden\" name=\"id\" value=\"$id_r\">Name:<br><input type=\"text\" name=\"name\" value=\"$name_r\" size=\"50\"><br>Email:<br><input type=\"text\" name =\"email\" value=\"$email_r\" size=\"50\"><br>Message:<br><textarea name=\"rep\" rows=\"7\" cols=\"50\">$messg_r</textarea><br><input type=\"submit\" value=\"ok\"></form><hr>";
  }
}

//на выходе массив элементов, где index - это id записи
function getIdArray()
{
  global $file;

  $data=@file($file);
  for($i=0; $i<count($data); $i++)
  {
    list($id_r,$name_r,$email_r,$messg_r)=explode("|", trim($data[$i]));
    $ret_array["$id_r"] = $data[$i];
  }
  return $ret_array;
}

//отображаем форму для добавления нового сообщения
function showBottom()
{
  global $PHP_SELF;
  echo "Добавление сообщения";
  echo "<form method=get action=$PHP_SELF><input type=hidden name=A value=add>Name:<br><input type=\"text\" name=\"name\" value=\"\" size=\"50\"><br>Email:<br><input type=\"text\" name =\"email\" value=\"\" size=\"50\"><br>Message:<br><textarea name=\"rep\" rows=\"7\" cols=\"50\"></textarea><br><input type=\"submit\" value=\"ok\"></form>";
}

if ($A == "modify")
{
  if (isset($HTTP_GET_VARS["id"]))
  {
     $id = $HTTP_GET_VARS["id"];
     if (isset($HTTP_GET_VARS["name"]) && !empty($HTTP_GET_VARS["name"]))
     {
       $name = $HTTP_GET_VARS["name"];
       $rep = $HTTP_GET_VARS["rep"];
       $email = $HTTP_GET_VARS["email"];

       $rep=eregi_replace("\n","<br>",trim($rep));

       $arr = getIdArray();
       $f=fopen($file, 'w');
       if ($f)
       {
         $arr["$id"] = "$id|$name|$email|$rep\n";
         fputs($f, implode('',$arr));
         fclose($f);
       }
       else
       {
         echo "Ошибка открытия файла!";
       }
     }
     else
     {
       echo "Не указано имя!";
     }
  }
  else
  {
    echo "Не выбрана запись для редактирования!";
  }
}
elseif($A=="add")
{
  if (isset($HTTP_GET_VARS["name"]) && !empty($HTTP_GET_VARS["name"]))
  {
    $name = $HTTP_GET_VARS["name"];
    $rep = $HTTP_GET_VARS["rep"];
    $email = $HTTP_GET_VARS["email"];

    $f = fopen($file, "a");
    if ($f)
    {
      $new_id = date("dmyHis");
      fputs($f,"$new_id|$name|$email|$rep\n");
      fclose($f);
    }
    else
    {
      echo "Ошибка открытия файла!";
    }
  }
  else
  {
    echo "Ошибка не указано имя!";
  }
}

showMessages();
showBottom();
Успехов!
 

Yuriy_S

-=PHP-Club=-
ОГО!
Огромное спасибо! Все проверил, работает хорошо!

p.s Вы видно проффессионал в php.
p.s Кстати я начал изучать MySQl, в общем я разобрался как создавать новые БД и т.п и, действительно, Mysql - проще, да и кода меньше.
И все же, большое спасибо!
 

breake

Guest
:) Спасибо, на самом деле я сам тоже учусь, единственное может быть чуть подольше :) Был очень рад помочь! А по-поводу MySQL и PHP для гостевой книги: есть много готовых скриптов на www.cgi.ru Я думаю, Вы там что-нибудь нужное найдете!
 

Yuriy_S

-=PHP-Club=-
НЕее, я хочу свое сделать, самому же интересно делать.
Я тоже изучаю PHP, вот уже почти изучил книги целую, вообще, я собираюсь его изучить полностью, все его функции, возможности и т.д. Язык то этот мощный! самый лучший можно даже сказать! и меня он заинтересовал потому, что у него много возможностей для работы с файлами, с различными БД и главное - надежность!
p.s - кстати, у меня уже разрабатывается форум на основе бд mysql :) почти работает.
 

Demiurg

Guest
>НЕее, я хочу свое сделать, самому же интересно делать.
Юра, раз ты так хочешь изучать самостоятельно, то чего же ты просишь за тебя скрипты то пистать ?

breake, не надо сюда постить такие куски кода, а то страница разъезжается. Для этого лучше использовать e-mail или выложи куда-нибудь, если хочешь, что бы все выдили.
 

Yuriy_S

-=PHP-Club=-
Demiurg - я попросил что бы мне помогли его написать правильно, и вот нашелся добрый человек, который не просто мне помог, а написал скрипт! Сейчас у меня работает этот скрипт, все отлично!
>Юра, раз ты так хочешь изучать самостоятельно, то чего же >ты просишь за тебя скрипты то пистать ?
Не один начинающий не сможет сам сделать с первого раза все правильно! Именно для этого и создан этот форум, что бы люди помогали друг другу! А изучаю я самостоятельно!
Ну в общем, не обижайтесь тут никто ! все ок:)
 

Demiurg

Guest
Никто не обижается, просто я лично, не вижу смысла, писать скрипты другим (если за них не платят конечно :) ). Может ты просто сразу взялся за сложную задачу ? Попробуй набить руку на легениких задачках, когда будешь плавать не боясь утонуть, принимайся за реальные задачи.
 
Сверху