Jump to content

Kel-Tanas

User
  • Posts

    40
  • Joined

  • Last visited

Everything posted by Kel-Tanas

  1. Kel-Tanas

    стек вызова

    При ошибке выполни код: throw new Exception; или debug_print_backtrace();
  2. Я примерно в таком варианте делал: Корзина не авторизованного пользователя хранится в куке в виде массива. Причем надо помнить, что товары могу отличаться не только по id, но и по другим св-вам, например ,цвет, размер и т.д. setcookie( 'basket', array('id1'=>'count1', 'id2'=>'count2'), time()+86400 ); У авторизованного пользователя корзину можно хранить в его же профиле в поле типа TEXT в виде JSON. (ну кому хочется, можно для этого завести отдельную таблицу, правда это сулит лишнюю нагрузку на БД, а БД -- это святое))) Если пользователь зашел не авторизованный, добавил товар, а потом авторизовался, то корзина из куки объединяется с корзиной из профиля и записывается в профиль. В куках, соответственно, очищается. Если пользователь вышел с сайта, то корзина в куках тоже должна быть пуста. Хранить корзины всех гостей у себя в базе не целесообразно, т.к. если зайдет на сайт вашего заказчика 10 000 ботов и закажут каждый по 10 товаров, то в таблице уже окажется 100 000 строк мусора... А если больше... а если Ваш клиент не на VDS ?
  3. Это как раз Ваня фигню какую-то спорол. И Вы, похоже, спешите к нему присоединиться? Учите азы http://ru.wikipedia.org/wiki/HTTP#GET
  4. Вы, товарисч, перебрали со способами. Их всего 2. из Ваших 1 и 2 - это одно и тоже. Вот примерчик того, как вы хотите: // Подключаем jQuery и пишем такой код: <a href="/example.php" class="poster" value="one">Ссылка 1</a> <a href="/example.php" class="poster" value="two">Ссылка 2</a> <script> $(function(){ $("a.poster").click(function() { // все ссылки с классом .poster var value = $(this).attr("value"); // поле value var href = $(this).attr("href"); // поле href - адрес, куда посылать $.POST( href, {value: value}, function(data) { // посылаем alert( data ); }); return false; }); }); </script> <?php /** * file: example.php */ $value = isset( $_POST['value'] ) ? $_POST['value'] : false; if ($value === false) { die('bad!'); } else { print 'good! value = '.$value; } ?> http://jquery.com http://visualjquery.com 2 Иван Шумов : Учи лучше работу веб-серверов. И Апача в частности. А еще правильнее так: <form name="some_form" method="post"> <a href="/example.php" class="poster" value="one">Ссылка 1</a> <a href="/example.php" class="poster" value="two">Ссылка 2</a> <input type="hidden" name="value" value="nojs" id="for_send_value" /> </form> <script> $(function(){ $("a.poster").click(function() { // все ссылки с классом .poster $("#for_send_value").val( $(this).attr("value") ); $(this).parents("form").submit(); return false; }); }); </script>
  5. Ну и что? Линейные алгоритмы будут выполняться быстрее, чем с вызовами функций и, уж тем более, с обращениями к объектам. Какой вывод следует?
  6. Это уже, как угодно. Но, думаю, обсуждения интерфейса Iterator в этой ветке уже неуместно. В противном случае заниматься перебором свойств - дело не совсем благодарное. И не пойму, чем не нравится array_walk(). Правда, foreach, конечно, сподручней, чем писать обработчик для каждого массива. Но, тут уже зависит от образа мышления программиста и конкретного случая. Если одни и те же действия над элементами массива необходимо провести в различных местах программы несколько раз, то проще написать один раз обработчик для array_walk() и использовать его. Конструкция while( isset($names[$i++]) ) логически неверна для перебора массива. Т.к. если в массиве не будет хватать хотя бы одного элемента где-нибудь по-середине, это приведет к краху алгоритма и логической ошибке, которую найти будет не просто.
  7. Замечания: "генерация записей" - хорошо сказано. И запрос мы писать будем "GENERATE txt FROM test ..." Зачем в коде массив $arr нужен? Не проще сразу было писать echo $row['txt'].' '; ?
  8. Нет, не в прошлом. Но для массивов есть специальный цикл. Его и рекомендуется использовать. Еще можно reset($array); while(list($key, $val) = each($array)); Но это менее удобно. Ну никак не перебором индексов. Ведь достоверно неизвестно, какие индексы присутствуют, а какие нет. Вот если есть массив $a = array(1=>'a', 2=>'b', 4=>'d', 5=>'e'); Вопрос на засыпку. Какие элементы этого массива переберет твой код? Шутка. Рекурсивная функция, которая вызывает сама себя n-ое количество раз. А потом возвращается обратно. function recurs($i) { if ($i >0) { print $i.' '; recurs(--$i); // вызываем с параметром на 1 меньше } } recurs(10);
  9. > Если им приписывается одинаковый префикс, как же они тогда отличаются? Допустим, пользователь добавляет новую запись в гостевую. Таким образом можно создать файл, с уникальным именем, начинающимся на rec $sNewFileName = 'rec'.time().xml; Тогда файл будет иметь примерно такое имя "rec1178335179.xml", начинающееся на rec и при этом уникальное. К тому же из имени файла всегда будет ясна дата его создания в секундах ))) ООП пропускать не в коем случае нельзя. Надо сидеть и разбираться. Терпение и труд все перетрут.
  10. vartem, давайте, тогда уж и массив перебирать foreach-ем, а не while-ом, словно программисты каменного века. // ... foreach($names as &$v) { $v = substr($v, 4); }
  11. А как это делается в других языках? Можешь, конечно, рекурсивную функцию замутить. Правда памяти и ресурсов сожрет много. В том-то и прелесть, что каждый может использовать свой креатив. Пожалуйста, как бы ты прочитал содержимое каталога без использования цикла? У тебя незаурядный экспириенс. Но, не расстраивайся. Со временем это пройдет. Главное, руки не опускай, а то это может завести на нехорошие сайты.
  12. 2Anthony: Это заморочки не ПХП, а программирования. Знал же, куда лезешь, зачем лез? Очевидно, сообщения в гостевой сохраняются в отдельные файлы каталога records. Для того, чтобы их отличать от остальных файлов, им приписывается префикс rec. Во время считывания файлов из каталога, они фильтруются по этому префиксу. Имена нужных файлов сохраняются в массив. И не надо писать, что ничего не написано. В мануале русским языком сказано: class dir { dir ( string каталог ); // конструктор класса string path; // свойство, содержащее путь resource handle; // свойство, содержащее дескриптор каталога string read ( void ); // метод аналог http://www.php.net/manual/ru/function.readdir.php void rewind ( void ); // метод аналог http://www.php.net/manual/ru/function.rewinddir.php void close ( void ); // метод аналог http://www.php.net/manual/ru/function.closedir.php } Я уже писал, что read() - это метод класса dir. Символом "->" происходит обращение к свойствам и методом класса. Смотри мануал по ООП в PHP. Хоть dir - это и псевдокласс, тем не менее. dir - это абстракция над функциями opendir(), readdir(), rewinddir() и closedir(). Чтобы удобнее работать было и не следить за дескриптором.
  13. 1. Вызов метода read() объекта $dir_rec; 2. Если $entry начинается с "rec", то добавить в массив $names[] строку $entry, начиная с 4го символа. Про dir читай здесь http://www.php.net/manual/ru/class.dir.php
  14. 1. Надо заявить на обладателя этих прав в суд и сказать, что это он у Вас материал утянул. 2. Ну, как сказать. Нужно открыть гугл, яндекс, рамблер и пр. из репертуара и искать, искать и искать. Конечно, если ничего там не найдете, то можно и на http://htmlbook.ru посмотреть. Хех.
  15. С одной стороны Смарти - мощный шаблонизатор. С другой, шаблоны, сделанные на нем в конечном итоге оборачиваются сценариями, которые компилируются сценарием, написанным на ПХП и выполняются на ПХП. Получается замкнутый круг. Тем более, что язык ПХП изначально задумывался, как шаблонизатор для Перла. Впрочем, Смарти действительно лучшее, что можно было бы придумать. Т.к. использование не компилирующих шаблонизаторов ведет к сильной загрузке сервера. Да и другие компилирующие шаблонизаторы (тот же Flexy) не предоставляют той гибкости и простоты, как Смарти.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy