В общем: Есть база SQLite. Из неё надо делать выборку: Проект и период От и До, по нажатию OK должна отобразится таблица Проект, Дата и Размер, который занимал проект на диске на тот момент. Вот только чую я, что пользователи захотят делать выборку сразу по нескольким проектам, поэтому хочу узнать как сделать, чтобы как только пользователи ввели имя в поле "Проект 1" сразу появлялось пустое поле "Проект 2", как только вводят имя в поле "Проект 2" сразу появляется пустое "Проект 3". Видела такое много раз, но как организовано - представления не имею. И вообще возможно ли это на PHP?
А при чем тут PHP? PHP уже закончил работу. Нужно либо добавить кнопку "Добавить проект" и по ней перезагружать страницу, либо использовать Javascript.
Volt(220) Ну вот поэтому и спрашивала возможно ли такое в PHP или надо что-то другое применять? А для кнопки "Добавить проект" надо будет изучать ещё пару языков? Simpliest Куда ж он денется?
Значит так: 1) Если Javascript, то кнопка не нужна. Ща порою jQuery и напишу как сделать нечто подобное. 2) Если PHP, то делаем кнопку, по которой вся форма отправляется на сервер. На сервере мы смотрим что нам пришло, определяем сколько проектов уже есть и выводим поле для еще одного. Но на мой взгляд это плохой вариант.
Для создания нормально web-приложения обычно приходится использовать несколько языков. На данный момент мне хватает: PHP Javascript (в виде jQuery или ExtJS) SQL Плюс иногда надо полазить по конфигам.
Volt(220) Ну я не спорю, что со временем всё прийдёт и всё изучится. Просто вроде бы лёгкая задача выводить данные из базы на страничку, а вот первой трудностью оказалось подружить SQLite и PHP, а сейчас ещё JavaScript оказывается нужен. А ещё вижу, что надо будет дружить формы кнопок и полей с SQL-запросами.
при использовании jQuery логика примерно такая: [js] $(document).ready(function(){ $('.multiInp').live("change", function(){ $(this).parent.append("<p><input type='text' name='inp[]' class='multiInp' /></p>"); $(this).unbind(); // кажись эта строчка не делает того что я от нее жду... }); });[/js] UPD: Только отвязать событие у меня не получилось.
Способ через php. Работает, но похоже сопровождать и дополнять это дело будет сложно. PHP: <form action='test.php' method='post'> <?php if ($_SERVER["REQUEST_METHOD"]=="POST"){ foreach($_POST["inp"] as $field){ echo "<p><input type='text' name='inp[]' value='$field'></p>"; } echo "<p><input type='text' name='inp[]' value=''></p>"; } else{ ?> <p><input type='text' name='inp[]' value='<?php echo $_POST["inp"][0]?>'></p> <?php } ?> <p><input type='submit' value='еще'/></p> </form>
У меня есть деловое предложение - Не плодить кнопки и поля ввода. А вводить имена проектов в одно поле, разделяя их , или ; Это маленькое правило, позволит обойтись всего лишь одной строчкой. $projects = explode(',', $_POST['projects']); К тому же даст возможность, при желании, прикрутить http://jquery.bassistance.de/autocomplete/demo/ (примеры Multiple Cities (local) & Multiple Birds (remote))
Ого! Огромное спасибо! На завтра мне на весь день работы испытательной. Ибо неплохо бы поизучать и то и то, коль типа занята работой. А там уж пользователи будут выбирать как им легче.
Весь день провела за изучением jQuery. Хотя трудно назвать это изучением - так - копание в примерах. Не получилось ни каким образом запустить эту штуку - даже отображений никаких нет. Не могу подружить видимо с формой правильно. Автозаполнение меня торкнуло, ну и мультипл тоже неплох. Всё как раз для меня. И главное, что скопировала все css- и js-файлы и всё локально работает, так что можно тренироваться. Только очень громоздкий пример. Пока не получается вычленить нужное.
Это не проверенный набросок. Я бы очень удивился если бы он заработал правильно. =)) Simpliest предложил гораздо лучшее решение для данного случая. UPD: Я заставил его работать: [js] $(document).ready(function(){ $('.multiInp').live("change", function(){ $(this).parent().parent().append("<p><input type='text' name='inp[]' class='multiInp' /></p>"); $(this).unbind(); }); }); [/js] HTML: <form method="post"> <div> <p><input type='text' class='multiInp' name='inp[]' /></p> </div> <p><input type='text' name='else'/></p> <p><input type='submit'/></p> </form> PHP: <?php var_dump($_POST); //для проверки результата ?>
Вот и всего нужного. [js]$("#singleBirdRemote").autocomplete("search.php", { width: 260, selectFirst: false });[/js] Или вот [js]$("#imageSearch").autocomplete("images.php", { width: 320, max: 4, highlight: false, scroll: true, scrollHeight: 300, formatItem: function(data, i, n, value) { return "<img src='images/" + value + "'/> " + value.split(".")[0]; }, formatResult: function(data, value) { return value.split(".")[0]; } });[/js]
Но рекомендую делать все же последовательно. Т.е. сначала разобраться с вводом с формы. И только потом прикручивать дополнения.
Ну простую форму я кое-как сделала: PHP: <?php try { $db = new PDO('sqlite:pr_size.db'); $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT"); if ($_POST['selectab']) { echo '<table border="1">'; foreach ($result as $row) { echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ; } echo '</table>'; } else { ?> <form method="post"> Проект <input name="proj" type="text" /> Период от <input name="dateot" type="text" /> Период до <input name="datedo" type="text" value="20100203" /> <input type="submit" name="selectab" value="OK"><br> </form> <?php } } catch(PDOException $e) { die($e->getMessage()); } ?> Пока поняла почему несколько дней назад работало просто $proj, а теперь оказалось надо писать $_POST['proj'] - чуть не опухла. Оказалось из-за того, что PHP5 поставила, а там уже синтаксис сменился. Таблица конечно получается нечитабельная, ибо надо её как-то переворачивать, но это уже по SQL-запросам вопрос, а не по PHP. По PHP теперь надо в поле proj вставлять автозаполнение. И возможно календарь вставлять вместо полей даты. P.S. Период до <input name="datedo" type="text" value="20100203" /> поставила сегодняшнюю дату, ибо не знаю как в Windows даты форматировать, но так как окончательный рабочий вариант будет в RedHat то не заморачиваюсь пока по этому поводу. Только один вопрос: А как в value можно будет вставить линуксовую команду date "+%Y%m%d" или у PHP есть своё решение определения даты? Хотя это не так важно.
$proj поменялся на $_POST['proj'] потому что в php.ini register_globals=on поменялся на register_globals=Off в value можно вставить любой текст генерируемый PHP следующим образом: <input type="text" ....... value=<?php echo $variable;?>......./> либо <input type="text" ....... value=<?=$variable?>......./>
<?php echo date('%Y%m%d') ?> это обертка для той самой date из линуксов, так что правила форматирования ты уже знаешь
Simpliest Я так понимаю JavaScript в php-файл не встраивается? Ибо вот это не работает: PHP: <script type="text/javascript"> $(function() { $("#datepicker").datepicker.parseDate('yymmdd'); }); </script> <?php try { $db = new PDO('sqlite:pr_size.db'); $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT"); if ($_POST['selectab']) { echo '<table border="1">'; foreach ($result as $row) { echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ; } echo '</table>'; } else { ?> <form method="post"> Проект <input name="proj" type="text" /> Период от <input name="dateot" type="text" value="20100111" /> <div class="demo"> Период до <input id="datepicker" name="datedo" type="text" /> </div> <div style="display: none;" class="demo-description"> </div> <input type="submit" name="selectab" value="OK"> </form> <?php } } catch(PDOException $e) { die($e->getMessage()); } ?> Точнее php-код по прежнему работает, а JavaScript не выполняется. Ну и с прошлыми примерами товарища Volt(220) та же самая неудача происходила. Я так понимаю, что надо делать html-страничку, потом в head загонять JavaScript, а потом как-то туда php-код встраивать. Или всё же можно JavaScript прямо в php-файл запихать? Поиск даёт результаты только типа "Вставка в JavaScript код переменной PHP", но никак не наоборот. Ищу ищу!
Встраивается. Вот это один файл: Код (Text): <script> alert("Эй Алло!!!"); // Проверяем работу js </script> <form method="post"> <div> <p><input type='text' class='multiInp' name='inp[]' /></p> </div> <p><input type='text' name='else'/></p> <p><input type='submit'/></p> </form> <?php var_dump($_POST); //для проверки результата ?> Проверьте подключены ли нужные js-библиотеки и стили. У меня при использовании автиокомплита и календаря было так: HTML: <link rel="stylesheet" href="css/main.css" type="text/css" /> <link type="text/css" href="jQuery/css/smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> <script type="text/javascript" src="jQuery/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="jQuery/jquery.autocomplete.js"></script> <script type="text/javascript" src="jQuery/jquery-ui-1.7.2.custom.min.js"></script> <script type="text/javascript" src="jQuery/development-bundle/ui/i18n/jquery-ui-i18n.js"></script> При использовании jQuery обычно код запихивают в: [js]$(document).ready(function(){ //Ваш код }); [/js] Браузеру абсолютно параллельно index.html это или main.php. Да хоть tumba.umba, ли ж бы содержание соответствовало заголовкам.
Volt(220) А вот и зависит от расширения Если вот это: PHP: <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(function() { $("#datepicker").datepicker(); }); </script> </head> <body> <?php try { $db = new PDO('sqlite:pr_size.db'); $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT"); if ($_POST['selectab']) { echo '<table border="1">'; foreach ($result as $row) { echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ; } echo '</table>'; } else { ?> <form method="post"> Проект <input name="proj" type="text" /> Период от <input name="dateot" type="text" value="20100111" /> <div class="demo"> Период до <input id="datepicker" name="datedo" type="text" /> </div> <div style="display: none;" class="demo-description"> </div> <input type="submit" name="selectab" value="OK"> </form> <?php } } catch(PDOException $e) { die($e->getMessage()); } ?> </body> </html> идёт с расширением php, то php-код работает, а java нет, но если вот этот же файл переименовать из php в htm, то страничка выглядит вот так ужастно:
Volt(220) И ещё вопрос: а вот эти main.css jquery-ui-1.7.2.custom.css jquery-1.3.2.min.js jquery.autocomplete.js jquery-ui-1.7.2.custom.min.js jquery-ui-i18n.js это стандартные файлы или Вы их сами создавали для своих задач? Я когда с примерами ковырялась - накачала файлов commonie7.css jquery.autocomplete.css main.css thickbox.css jquery.js jquery.ajaxQueue.js jquery.autocomplete.js jquery.bgiframe.min.js jquery.min.js localdata.js thickbox-compressed.js но думала они самосозданные именно для тех примеров. Точнее вопрос даже в том, если это всё стандартные файлы, то где взять их все скопом?
1)Java и Javascript разные вещи! 2)Попробуйте вместо Код (Text): $(function() { $("#datepicker").datepicker(); }); написать Код (Text): alert("JS работает!"); 2.2) А что Вы вообще ожидаете от js кода? Почему вы считаете что он не работает? 3)Не зависит. Просто Ваш сервер не настроен обрабатывать htm страницы как php. 4) datepicker как раз входит в jQuery UI.