PDA

Просмотр полной версии : не "видно" переменных (или ощибка)


Скрипун
25.03.2007, 17:29
Посылаю с флэша строку в php скрипт… там она должна обрабатыватся и сохранятся.. открывать файл и передавать строку флэшу (ну как обычно)

Script не мой … я его пытаюсь заюзать.. но некоторые прееменные передаются, некоторые толи не выдны, то ли еще чего..
короче мне этим echo надо передать к примеру $winner_2 а не хочет... $name передается... а еще прикол в том что сам по себе скрипт как-бы работает.. когда вызываю с флэше и нужные файлы создает...:wacko:

<?php
//id=1-2(или любая другая пара) разделитель между парами "," : id=1-2,4-7, и т.п.
$papka = "txt"; // имя папки под текстовые файлы-счетчики
$name = $_POST['id'];
$array = explode(",",$name); // разбивка строки на массив, "," - разделитель
foreach($array As $file){ // обход массива, $file присваивается имя пары
$file_name = "$file".".txt"; // создание имени файла(с расширением)
if(!file_exists($papka."/".$file_name)){ // создание файла, если такового еще не сушествует
$dir = opendir($papka);
$fd = fopen($papka."/".$file_name, "w");
if(!$fd)die("Ошибка открытия файла");
fwrite($fd, "1"); //стартовое число счетчика
fclose($fd);
closedir($dir);
}else{ //увеличение счетчика при условии существования файла пары
$dir = opendir($papka);
$bufer = file_get_contents($papka."/".$file_name);
$bufer = ++$bufer;
$fd = fopen($papka."/".$file_name, "w");
fwrite($fd, $bufer);
fclose($fd);
closedir($dir);
} //конец цикла if else в обходе массива
} //конец обхода массива

$array_2 = scandir($papka); //создание массива с именами файлов в папке
foreach($array_2 As $para){ //обход массива,
$index = substr($para,0,-4); //вырезка имени пары из имени файла
$dir = opendir($papka);
$number = file_get_contents($papka."/".$para); //чтение счетчика из файла
$array_3[$index] = $number;
closedir($dir);
} //конец обхода массива
arsort($array_3); //сортировка массива для расстановки от большего к меньшему
$winner_1 = key($array_3); //первое место
$bal_1 = current($array_3); //количество баллов за первое место
// echo $winner_1; //вывод имени пары 1 место

//echo $bal_1; //вывод кол-ва баллов 1-ое место

next($array_3);
$winner_2 = key($array_3); //второе место
$bal_2 = current($array_3); //количество баллов за второе место
//echo $winner_2; //вывод имени пары 2 место

//echo $bal_2; //вывод кол-ва баллов 2-ое место
//echo "<br />";
next($array_3);
$winner_3 = key($array_3); //третье место
$bal_3 = current($array_3); //количество баллов за третье место
//echo $winner_3; //вывод имени пары 3 место

//echo $bal_3; //вывод кол-ва баллов 3-е место
echo "otvet=$name"; // ПЕРЕДАЕТ!!!!
//echo "otvet=$winner_2"; // НЕ ХОЧЕТ!!!
?>

Skubent
26.03.2007, 13:01
Есть мнение, что второго файла там просто нет, потому и второго элемента в массиве не получается.

PS. Самостоятельно поглядеть, как из php работать с базой, все станет гораздо проще.
PPS. Сей скрипт срочно выкинуть или сдать в музей имени каши в голове.

techno
27.03.2007, 13:14
Ясное дело не хочет! Это же комментарий!
Все после знаков // - комментарий
//echo "otvet=$winner_2"; // НЕ ХОЧЕТ!!!

etc
27.03.2007, 13:33
techno, гениальное замечание! А то, что этот комментарий нужно раскомментировать для тестирования, в голову не приходило?

techno
27.03.2007, 14:16
Странно, у меня все работает... Правда я заменил
$array_2 = scandir($papka); //создание массива с именами файлов в папке
foreach($array_2 As $para){ //обход массива,
$index = substr($para,0,-4); //вырезка имени пары из имени файла
$dir = opendir($papka);
$number = file_get_contents($papka."/".$para); //чтение счетчика из файла
$array_3[$index] = $number;
closedir($dir);
} на
if ($dir = @opendir($papka)) {
while (($para = readdir($dir)) !== false) {
if (($para<>'..')and($para<>'.')){
$index = substr($para,0,-4);
$number = file_get_contents($papka."/".$para);
$array_3[$index] = $number;

}
} closedir($papka);}

Тк не нашел что за функция scandir, и вспомнил про точки.

Мне кажется скрипт просто нарывался на эти точки и по-этому глючил.

А вообще, согласен с Skubent. С бд все бы было гораздо проще

Скрипун
27.03.2007, 20:11
...эх.. заменил указанные строки.. но конечно не работает...
высылаю исходник.. :rtfm:
Народ, помогите.. в результате должна получится прикольная флэшка, связанная с весной и любовными парами :rolleyes: :victory:

Скрипун
29.03.2007, 00:29
Ну, знающие люди, отзовитесь!!! как раз нужна Ваша помощь...

Skubent
29.03.2007, 12:49
Ты вправду думаешь, что добрые люди будут сидеть и думать, почему не-твой образец кривости написания не работает так, как ТЫ задумал ?

Предлагаю начать сначала - какие данные и каким макаром прилетают на сервер, что он должен с ними сделать и что сказать в ответ.
Не "открывать файл и передавать строку флэшу (ну как обычно)",
а принять данные такого-то формата (описать что делать, если данные не того формата), сделать такие-то операции с данными (при наличии условий описать все возможные варианты), туда-то сохранить и вот отсюда прочитать строку, которую сохранить там-то.

Называется это "алгоритм". Слышал такое слово ?

FourSide
29.03.2007, 13:07
Тяжело на лету воспринимается код такого объёма.
Но первое, что меня немного "покоробило" - это открытие и закрытие каталогов при работе с файлами. Я как то не знал, что чтобы создать файл, нужно открыть каталог. Всё работало и так :))) (*** http://php.ru/manual/function.opendir.html мануал по функции).

Но это не критично. Второй момент - это то, что некоторые хостеры требуют использования полного пути в именах файлов. Прям от корня хоста. Такой путь возвращает глобальная переменная $DOCUMENT_ROOT. Но тут нужно смотреть на конкретный хостинг, может быть дело и не в этом.

Мой совет еще проще - запустить php скрипт самостоятельно, передав ему нужные значения по-умолчанию. Если отработает как надо - значит дело не в php.

Kikasso
29.03.2007, 14:56
Или поменяй POST на GET и тестируй из броузера

FourSide
29.03.2007, 15:54
да прям в файле написать не так:
$name = $_POST['id'];

а так:

$name = 'нужные значения, заделённые запятыми';