#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
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
#10 24.04.07 13:38
#11 24.04.07 19:19
#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
#19 26.04.07 22:49
Re: задачка по php
grozzzzza, книжки читать надо, они научат не всему, но многому.
P.S.
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
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
при этом работает всё вроде корректно.
Исправлено grozzzzza (27.04.07 10:39)
Offline
#25 27.04.07 11:28
#26 04.05.07 00:07
#27 04.05.07 10:38
#28 09.04.08 20:58
#29 09.04.08 21:08
#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
#32 09.04.08 23:21
Re: задачка по php
grozzzzza, есть два подхода...
1. пропиской полных путей (пути файловой системы имеется в виду)
2. установкой переменной include_path
данный код добавляет в список папок поиска ту папку, откуда подгружен данный скрипт (смотри dirname(__FILE__))
Offline

