Официальный сайт студ.городка НГТУ
Программирование и БД » задачка по php 

#1  21.04.07 19:06

задачка по php

нашёл в одном учебнике неработаюший примерчик. чертовски занятно, почему не работает.  не могу понять!

Цвет строки

Создаем файл example-1.php и пишем в него простейший код:

<font color=#<? echo $color; ?>>Подопытная строка</font>
<form action="" method=GET>
<input type="text" name=color>
<input type="submit" value="сменить цвет">
</form>

Все. Программа готова. Если ваш Apache собран с PHP, то можете попробовать ввести в окошко разные цвета и нажать на кнопочку. Попробуйте у меня:

Подопытная строка
   
Напомню, что цвет задается шестнадцатеричным числом (RGB) от 0000000(черный) до FFFFFF(белый).
FF0000 — красный
00FF00 — зеленый
0000FF — голубой

Видите, как все просто. PHP сам распознал переменную $color, в которой вы передали код цвета. Вам не пришлось делать парсинг строки (разбирать строку на составляющие), чтобы выяснить, какие переменные были переданы в html-запросе и какие значения они содержат.

Offline

#2  21.04.07 19:38

Re: задачка по php

копай в сторону регистр глобалс, и еще попробуй заменить $color на $_REQUEST['color']

Offline

#3  21.04.07 20:19

Re: задачка по php

Если учебник старый, то по умолчанию раньше register_globals=on
используй $_GET['color'] вместо $color, менять register_globals=off на register_globals=on не советую.

Offline

#4  22.04.07 02:09

Re: задачка по php

хочу чтоб данные из textarea проверялись на количество нажатий на клавишу Enter и все знаки конца абзаца заменялись бы автоматом на пробелы. пытаюсь реализовать следующим образом:


$str=str_replace(chr(13),chr(32),$_POST['msg']);


но почему-то ничего не выходит. хэлп!

Offline

#5  22.04.07 02:19

Re: задачка по php

и ещё задачка посложнее. три часа просидел ничо не понял.
вот есть два скрипта:

<html>

<head>
  <title></title>
</head>

<body>
<form name="name" action="savemsg.php" method="post">
<table width=510>
<tr>
  <td>Ваше имя:
  <td><input name="yourname" type="text" value=""></a><br>
<tr>
  <td>Ваши пожелания:
  <td><textarea name="msg" rows=15 cols=45 wrap="on"></textarea>
<tr>
  <td>
  <td align=right><input type="submit" value="Отправить"></form>
</table>


<table width=510>
<tr>
  <td>
<?php
$fguest=fopen("guestbook.dat","r");
$str=fgets($fguest)." ";
echo '<textarea name="msg" rows=15 cols=60 wrap="on">'.$str.'</textarea>';
?>

</table></body>

</html>

и обработчик savemsg:

<?
  Header("Location: guestbook.php");
if(($_POST['yourname']!="")&($_POST['msg']!=""))
{
  $fguest=fopen("guestbook.dat","r");
  $str=fgets($fguest);
  fclose($fguest);
  $fguest=fopen("guestbook.dat","w");
  fwrite($fguest,'<'.$_POST['yourname'].'>'.chr(13).$_POST['msg'].chr(13). $str);
  fclose($fguest);
}
?>

почему в случае, когда вводим в поле для текста две и более строчек, разделенных символами абзаца (клавиша Enter), то у нас вся инфа из файла guestbook.dat стирается, а вновь записывается только первая строчка только что введенного сообщения?

Offline

#6  22.04.07 02:30

rzk
Профиль

Re: задачка по php

вот что написано в мануале по fopen()

Код::

'r' Open for reading only; 
place the file pointer at the beginning of the file.  

'r+' Open for reading and writing; 
place the file pointer at the beginning of the file. 
 
'w' Open for writing only; 
place the file pointer at the beginning of the file 
and truncate the file to zero length. If the file 
does not exist, attempt to create it.  

'w+' Open for reading and writing; 
place the file pointer at the beginning of the file 
and truncate the file to zero length. 
If the file does not exist, attempt to create it. 
 
'a' Open for writing only; 
place the file pointer at the end of the file. 
If the file does not exist, attempt to create it. 
 
'a+' Open for reading and writing; 
place the file pointer at the end of the file. 
If the file does not exist, attempt to create it.

Думаю надо использовать 'a' вместо 'w' =)
Мануала используй силу.

Исправлено rzk (22.04.07 02:34)

Offline

#7  22.04.07 12:24

Re: задачка по php

а это почему не работает?

grozzzzza написал(а):

хочу чтоб данные из textarea проверялись на количество нажатий на клавишу Enter и все знаки конца абзаца заменялись бы автоматом на пробелы. пытаюсь реализовать следующим образом:


$str=str_replace(chr(13),chr(32),$_POST['msg']);


но почему-то ничего не выходит. хэлп!

Исправлено grozzzzza (22.04.07 12:24)

Offline

#8  22.04.07 13:43

Re: задачка по php

еще два года и grozzzzzaCMS выйдет в стабильный пререлиз.

Offline

#9  22.04.07 23:13

Re: задачка по php

grozzzzza, "/n" по идее Enter, если в винде, то  "/r/n"

Попробуй $str=str_replace("/n","пробел типа",$_POST['msg']);

Offline

#10  24.04.07 13:38

Re: задачка по php

только "\r\n"

Offline

#11  24.04.07 19:19

Re: задачка по php

ага, пасиб, работает

Offline

#12  25.04.07 11:26

Re: задачка по php

ещё задачка. бьюсь два часа.

<?
      $mas = array("RUS", "GER");
      $mas_nat = array ("Россия", "GER");

          foreach ($mas as $key => $value)
      {

        $k = array_search($value, $mas_nat);
              echo $mas_nat[$k] ;

      }
?>

Почему в рез-те выполнения имеем "РоссияGER", а не просто "GER", ведь в первой итерации функция array_search не находит искомый элемент ("RUS"). Автоматически присваивается ноль? Как можно переделать, чтоб работало как запланировано?

Offline

#13  25.04.07 13:04

Re: задачка по php

и еще одна. очень нужно решить!

<?
      $str = "Фигня, GER";
      $mas = array("RUS", "GER", "USA");
         foreach ($mas as $key => $value)
  {
      $stroka = str_replace ($value, $mas[$key-1], $str);
  }

      echo $stroka;
?>

но вопрос в общем даже и не по этому коду. он более широк: подскажите как запихнуть в цикл (в данном случае foreach) изменение исходной строчки. т.е. в каждой следующей итерации в $stroka  записываем не исходную строку $str, а строку $stroka, полученную в предыдущей операции?

т.е. как в цикле сохранять строковые данные?

Offline

#14  25.04.07 13:25

Re: задачка по php

grozzzzza написал(а):

ещё задачка. бьюсь два часа.

Код: php:

<?
      $mas = array("RUS", "GER");
      $mas_nat = array ("Россия", "GER");
 
   	   foreach ($mas as $key => $value)
	  {
 
	    $k = array_search($value, $mas_nat);
              echo $mas_nat[$k] ;
 
	  }
 ?>

Почему в рез-те выполнения имеем "РоссияGER", а не просто "GER", ведь в первой итерации функция array_search не находит искомый элемент ("RUS"). Автоматически присваивается ноль? Как можно переделать, чтоб работало как запланировано?

Во-первых $key тут нафиг не нужен.

Во-вторых, при первом проходе array_search() не находит такого элемента и в $k ложится bool(false). И в следующей строке ты используешь $k как ключ для массива. В силу специфики PHP, "false" интерпретируется как 0 и тебе выводится $mas_nat[0], т.е. "Россия".

Исправь на такое и посмотри результат:

Код: php:

<?
      $mas = array("RUS", "GER");
      $mas_nat = array ("Россия", "GER");
 
   	   foreach ($mas as $value)
	  {
 
	       $k = array_search($value, $mas_nat);
                if ($k!==false){
                    echo $mas_nat[$k];
                }
	  }
 ?>

Исправлено Malkolm (25.04.07 13:39)

Offline

#15  25.04.07 13:37

Re: задачка по php

grozzzzza написал(а):

и еще одна. очень нужно решить!

Код: php:

<?
      $str = "Фигня, GER";
      $mas = array("RUS", "GER", "USA");
   	  foreach ($mas as $key => $value)
  {
      $stroka = str_replace ($value, $mas[$key-1], $str);
  }
 
	  echo $stroka;
?>

но вопрос в общем даже и не по этому коду. он более широк: подскажите как запихнуть в цикл (в данном случае foreach) изменение исходной строчки. т.е. в каждой следующей итерации в $stroka  записываем не исходную строку $str, а строку $stroka, полученную в предыдущей операции?

т.е. как в цикле сохранять строковые данные?

Очень смутно понял что ты имел ввиду, но мне кажется (я так думаю) это должно тебе помочь.

Код: php:

<?
$str = "GER захватила весь мир. USA скупила все золото. ENG произвела самые модные учебники без семьи Стоговых.";
 
$country = array("ENG", "GER", "USA");
 
$result = $str;
 
foreach ($country as $name){
	$result = str_replace($name, "RUS", $result);
}
 
echo $result;
?>



PS пользуйся тегами "код".

Исправлено Malkolm (25.04.07 13:38)

Offline

#16  25.04.07 21:33

Re: задачка по php

Malkolm, спасибо! всё в точку! до последней мульки я правда сам допер, но у меня то выглядело более громоздко:

Код::

<?
$str = "GER захватила весь мир. USA скупила все золото. ENG произвела самые модные учебники без семьи Стоговых.";
 
$country = array("ENG", "GER", "USA");
 
$result = $str;
 
foreach ($country as $name){
	$str_out = str_replace($name, "RUS", $result);
$result = $str)out;
}
 
echo $result;
?>

Исправлено grozzzzza (25.04.07 21:36)

Offline

#17  26.04.07 22:16

Re: задачка по php

ну что, господа? продолжим? прессрелиз срывать не будем,так?

есть файл "print.php"

Код::

 <?php
      echo ($i);    ?>

есть другой файл "href.php" (или "href.htm" - без разницы):

Код::

<a href = "print.php">vesna<a>
<a href = "print.php">leto<a>

как сделать так, чтоб переменная $i принимала различные значения в зависимости от того, на какую ссылку мы нажмём? и соответсвенно файл "print.php" выводил бы на экран разный текст в зависимости опять же от того, с какой ссылки мы попали на эту страничку.

Исправлено grozzzzza (27.04.07 00:02)

Offline

#18  26.04.07 22:19

Re: задачка по php

Есть переменная $HTTP_REFERER, передает URL сайта, с которого кликнули на тебя грубо говоря ))

Offline

#19  26.04.07 22:49

Re: задачка по php

grozzzzza, книжки читать надо, они научат не всему, но многому.

P.S.

Код: html:

...
<a href="page.php?i=spring">Весна</a>
<a href="page.php?i=summer">Лето</a>
...

Код: php:

<?php
...
$i = $_GET['i'];
 
switch ($i)
{
case 'spring':
   echo 'It\'s spring, actually.';
   break;
case 'summer':
   echo 'It\'s summer, actually.';
}
...
?>

Offline

#20  26.04.07 23:12

Re: задачка по php

Karminsky, спасибо! проверил -то что надо!

поясню свою позицию по поводу "я фигею с этих вопросов".
спрашивая о чём-то здесь я ведь не прошу за меня что-то сделать, я прошу показать, где написано, как сделать.

Karminsky написал(а):

читать надо, они научат не всему, но многому

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

поймите, критики подобной системы: это очень рационально. можно пыхтеть неделю и написать код, который можно было сделать за час с чужой подсказкой (чужая подсказка - это не чужой код!). писал неделю - зато сам! - это не для меня.

если кому-то не нравится отвечать и помогать другим - так никто ж не заставляет.

Исправлено grozzzzza (26.04.07 23:18)

Offline

#21  26.04.07 23:52

rzk
Профиль

Re: задачка по php

grozzzzza, ищи в п2п фаил "php_manual_ru.chm" - это кратенький мануал по п2п, частично переведённый на русский язык. Ответы, на пожалуй все вопросы, что ты задал, есть там. Вопросы, откровенно говоря, лажовые, не интересные. В мануале ответы на них находятся быстрее чем на форуме. Удачи!

PS: Я в п2п вечером.

Offline

#22  27.04.07 00:12

Re: задачка по php

grozzzzza написал(а):

поясню свою позицию по поводу "я фигею с этих вопросов".
спрашивая о чём-то здесь я ведь не прошу за меня что-то сделать, я прошу показать, где написано, как сделать.

Будешь удивлён, но в книжках написано. В сети их порядком навалено.

grozzzzza написал(а):

в моей книжке за 300 руб. об это мне написано. а книжку за 1000 покупать я не хочу.

Что это за книжка по PHP, где ни слова про GET-запросы?

Offline

#23  27.04.07 00:26

Re: задачка по php

Вот сюда (ftp://kopilka.hostel.nstu.ru/upload/for_users/seva/) выложил литературу по PHP некоторую. Просвящайся :)

Offline

#24  27.04.07 10:38

Re: задачка по php

спасибо! обязательно почитаю.
а это чё за хрень?

Warning: feof(): supplied argument is not a valid stream resource in /ResultTables.php on line 6

Warning: fgetcsv() expects parameter 1 to be resource, boolean given in /ResultTables.php on line 7

Warning: implode() [function.implode]: Bad arguments. in /ResultTables.php on line 8


ResultTables.php

Код: :php:

<?
   include "inc.php";
 
//следующая строка - line 6
$fin = fopen ($result_table, "r", "\t");
while (!feof($fin))
	{ $line = fgetcsv($fin, 1024);
	  $str = implode("\t",$line);
      $str_in .= $str;
	}
fclose($fin);
nat_replace();
$mas = explode ("\t", $str_out);
?>


при этом работает всё вроде корректно.

Исправлено grozzzzza (27.04.07 10:39)

Offline

#25  27.04.07 11:28

Re: задачка по php

У тебя файл действительно открывается? Проверь.

Код: php:

$fin = fopen ($result_table, "r", "\t");
if ($fin === false) {
echo "FALSE"
}else{
echo $fin;

Offline

#26  04.05.07 00:07

Re: задачка по php

Ну вы так скоро книгу напишите по PHP :)))
grozzzzza, совет: возьми толковую книжку и никаких вопросов не будет :))
Могу дать парочку :)

Исправлено Squirrel (04.05.07 00:08)

Offline

#27  04.05.07 10:38

Re: задачка по php

Squirrel написал(а):

Ну вы так скоро книгу напишите по PHP :)))
grozzzzza, совет: возьми толковую книжку и никаких вопросов не будет :))
Могу дать парочку :)

А у тебя книжки бумажные?

Offline

#28  09.04.08 20:58

Re: задачка по php

есть файл "/header.php"

есть файл "/script1.php"
  в нем строчка include "/header.php";


почему не инклудится? я знаю, что можно include "header.php"; но почему абсолютный путь не работает?

Offline

#29  09.04.08 21:08

Re: задачка по php

потому что относительно файлухи, а не урла путь

Offline

#30  09.04.08 21:45

Re: задачка по php

1. есть файл "/ink.php"

2. есть файл "/header.php"
в него инклудится "/ink.php"

3. есть файл "/script1.php"
  в нем строчка include "header.php";

4. есть файл "/folder/script1.php"
  в нем строчка include "../header.php";



как составить оператор инклуживания в файле "/header.php" (выделенная жирным строчка), чтобы корректно работало как в случае с файлом 3 так и с файлом 4

??

Исправлено grozzzzza (09.04.08 21:50)

Offline

#31  09.04.08 21:47

Re: задачка по php

если пишу
include "/header.php"; то работает только файл 4

если пишу
include "header.php"; то работает только файл 3

Offline

#32  09.04.08 23:21

Re: задачка по php

grozzzzza, есть два подхода...
1. пропиской полных путей (пути файловой системы имеется в виду)
2. установкой переменной include_path

Код: php:

<?php
 
if (!defined("PATH_SEPARATOR"))
    define("PATH_SEPARATOR", getenv("COMSPEC")? ";" : ":");
ini_set("include_path", dirname(__FILE__).PATH_SEPARATOR.ini_get("include_path"));
 
?>

данный код добавляет в список папок поиска ту папку, откуда подгружен данный скрипт (смотри dirname(__FILE__))

Offline

#33  10.04.08 02:16

Re: задачка по php

а на практике чаше всего получается третий путь - как смесь 1 и 2, потому что очень многие функции не видят include_path. например расширение simplexml. Не говоря уже о сторонних продуктах)

Offline

Программирование и БД » задачка по php 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.255 сек.
Выполнено 14 запросов.