За последние 24 часа нас посетили 19105 программистов и 1644 робота. Сейчас ищут 924 программиста ...

Как, при введении данных в поле, сделать появление нового?

Тема в разделе "PHP для новичков", создана пользователем init01, 1 фев 2010.

  1. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    В общем:
    Есть база SQLite.
    Из неё надо делать выборку: Проект и период От и До,
    по нажатию OK должна отобразится таблица Проект, Дата и Размер, который занимал проект на диске на тот момент.

    [​IMG]

    Вот только чую я, что пользователи захотят делать выборку сразу по нескольким проектам, поэтому хочу узнать как сделать, чтобы как только пользователи ввели имя в поле "Проект 1" сразу появлялось пустое поле "Проект 2", как только вводят имя в поле "Проект 2" сразу появляется пустое "Проект 3".

    [​IMG]

    Видела такое много раз, но как организовано - представления не имею. И вообще возможно ли это на PHP?
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А при чем тут PHP? PHP уже закончил работу. Нужно либо добавить кнопку "Добавить проект" и по ней перезагружать страницу, либо использовать Javascript.
     
  3. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А говорили IE6 умер, а он живее всех живых.
     
  4. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Volt(220)
    Ну вот поэтому и спрашивала возможно ли такое в PHP или надо что-то другое применять?
    А для кнопки "Добавить проект" надо будет изучать ещё пару языков?

    Simpliest
    Куда ж он денется?
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Значит так:
    1) Если Javascript, то кнопка не нужна. Ща порою jQuery и напишу как сделать нечто подобное.
    2) Если PHP, то делаем кнопку, по которой вся форма отправляется на сервер. На сервере мы смотрим что нам пришло, определяем сколько проектов уже есть и выводим поле для еще одного. Но на мой взгляд это плохой вариант.
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Для создания нормально web-приложения обычно приходится использовать несколько языков. На данный момент мне хватает:
    PHP
    Javascript (в виде jQuery или ExtJS)
    SQL

    Плюс иногда надо полазить по конфигам.
     
  7. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Volt(220)
    Ну я не спорю, что со временем всё прийдёт и всё изучится.
    Просто вроде бы лёгкая задача выводить данные из базы на страничку, а вот первой трудностью оказалось подружить SQLite и PHP, а сейчас ещё JavaScript оказывается нужен. А ещё вижу, что надо будет дружить формы кнопок и полей с SQL-запросами.
     
  8. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    при использовании 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: Только отвязать событие у меня не получилось.
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Способ через php. Работает, но похоже сопровождать и дополнять это дело будет сложно.
    PHP:
    1. <form action='test.php' method='post'>
    2. <?php
    3. if ($_SERVER["REQUEST_METHOD"]=="POST"){
    4.     foreach($_POST["inp"] as $field){
    5.         echo "<p><input type='text' name='inp[]' value='$field'></p>";
    6.     }
    7.     echo "<p><input type='text' name='inp[]' value=''></p>";
    8.    
    9. }
    10. else{
    11. ?>
    12. <p><input type='text' name='inp[]' value='<?php echo $_POST["inp"][0]?>'></p>
    13. <?php
    14. }
    15. ?>
    16. <p><input type='submit' value='еще'/></p>
    17. </form>
    18.  
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    У меня есть деловое предложение -
    Не плодить кнопки и поля ввода.

    А вводить имена проектов в одно поле, разделяя их , или ;
    Это маленькое правило, позволит обойтись всего лишь одной строчкой.

    $projects = explode(',', $_POST['projects']);

    К тому же даст возможность, при желании, прикрутить http://jquery.bassistance.de/autocomplete/demo/ (примеры Multiple Cities (local) & Multiple Birds (remote))
     
  11. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Ого!
    Огромное спасибо!
    На завтра мне на весь день работы испытательной.
    Ибо неплохо бы поизучать и то и то, коль типа занята работой.
    А там уж пользователи будут выбирать как им легче.
     
  12. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Весь день провела за изучением jQuery.
    Хотя трудно назвать это изучением - так - копание в примерах.

    Не получилось ни каким образом запустить эту штуку - даже отображений никаких нет. Не могу подружить видимо с формой правильно.

    Автозаполнение меня торкнуло, ну и мультипл тоже неплох. Всё как раз для меня. И главное, что скопировала все css- и js-файлы и всё локально работает, так что можно тренироваться. Только очень громоздкий пример. Пока не получается вычленить нужное.
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Это не проверенный набросок. Я бы очень удивился если бы он заработал правильно. =))

    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:
    1. <form method="post">
    2.     <div>
    3.         <p><input type='text' class='multiInp' name='inp[]' /></p>
    4.     </div>
    5. <p><input type='text' name='else'/></p>
    6. <p><input type='submit'/></p>
    7.  
    8.   </form>
    PHP:
    1.  
    2.  <?php
    3.   var_dump($_POST); //для проверки результата
    4.  ?>
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вот и всего нужного.
    [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]
     
  15. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Но рекомендую делать все же последовательно.
    Т.е. сначала разобраться с вводом с формы.
    И только потом прикручивать дополнения.
     
  16. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Ну простую форму я кое-как сделала:
    PHP:
    1. <?php
    2. try
    3. {
    4. $db = new PDO('sqlite:pr_size.db');
    5. $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT");
    6. if ($_POST['selectab'])
    7.  {
    8.  echo '<table border="1">';
    9.  foreach ($result as $row)
    10.    {
    11.    echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ;
    12.    }
    13.  echo '</table>';
    14.  }
    15. else
    16.  {
    17. ?>
    18. <form method="post">
    19. Проект <input name="proj" type="text" />
    20. Период от  <input name="dateot" type="text" />
    21. Период до  <input name="datedo" type="text" value="20100203" />
    22. <input type="submit" name="selectab" value="OK"><br>
    23. </form>
    24. <?php
    25.  }
    26. }
    27. catch(PDOException $e)
    28. {
    29. die($e->getMessage());
    30. }
    31. ?>
    Пока поняла почему несколько дней назад работало просто $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 есть своё решение определения даты?
    Хотя это не так важно.
     
  17. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    $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?>......./>
     
  18. <?php echo date('%Y%m%d') ?>
    это обертка для той самой date из линуксов, так что правила форматирования ты уже знаешь
     
  19. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    http://jqueryui.com/demos/datepicker
     
  20. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Simpliest
    Я так понимаю JavaScript в php-файл не встраивается?
    Ибо вот это не работает:
    PHP:
    1. <script type="text/javascript">
    2. $(function()
    3. {
    4. $("#datepicker").datepicker.parseDate('yymmdd');
    5. });
    6. </script>
    7. <?php
    8. try
    9. {
    10. $db = new PDO('sqlite:pr_size.db');
    11. $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT");
    12. if ($_POST['selectab'])
    13.  {
    14. echo '<table border="1">';
    15. foreach ($result as $row)
    16.    {
    17. echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ;
    18.    }
    19. echo '</table>';
    20.  }
    21. else
    22.  {
    23. ?>
    24. <form method="post">
    25. Проект <input name="proj" type="text" />
    26. Период от  <input name="dateot" type="text" value="20100111" />
    27. <div class="demo">
    28. Период до  <input id="datepicker" name="datedo" type="text" />
    29. </div>
    30. <div style="display: none;" class="demo-description">
    31. </div>
    32. <input type="submit" name="selectab" value="OK">
    33. </form>
    34. <?php
    35.  }
    36. }
    37. catch(PDOException $e)
    38. {
    39. die($e->getMessage());
    40. }
    41. ?>
    Точнее php-код по прежнему работает, а JavaScript не выполняется.
    Ну и с прошлыми примерами товарища Volt(220) та же самая неудача происходила.

    Я так понимаю, что надо делать html-страничку, потом в head загонять JavaScript, а потом как-то туда php-код встраивать.
    Или всё же можно JavaScript прямо в php-файл запихать?
    Поиск даёт результаты только типа "Вставка в JavaScript код переменной PHP", но никак не наоборот.
    Ищу ищу!
     
  21. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Встраивается.
    Вот это один файл:
    Код (Text):
    1. <script>
    2. alert("Эй Алло!!!"); // Проверяем работу js
    3. </script>
    4.  
    5.  <form method="post">
    6.      <div>
    7.          <p><input type='text' class='multiInp' name='inp[]' /></p>
    8.      </div>
    9.  <p><input type='text' name='else'/></p>
    10.  <p><input type='submit'/></p>
    11.  
    12.    </form>
    13.  <?php
    14.    var_dump($_POST); //для проверки результата
    15.   ?>
    Проверьте подключены ли нужные js-библиотеки и стили.
    У меня при использовании автиокомплита и календаря было так:
    HTML:
    1. <link rel="stylesheet" href="css/main.css" type="text/css" />
    2. <link type="text/css" href="jQuery/css/smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
    3. <script type="text/javascript" src="jQuery/jquery-1.3.2.min.js"></script>
    4. <script type="text/javascript" src="jQuery/jquery.autocomplete.js"></script>
    5. <script type="text/javascript" src="jQuery/jquery-ui-1.7.2.custom.min.js"></script>
    6. <script type="text/javascript" src="jQuery/development-bundle/ui/i18n/jquery-ui-i18n.js"></script>
    7.  
    При использовании jQuery обычно код запихивают в:
    [js]$(document).ready(function(){
    //Ваш код
    });
    [/js]

    Браузеру абсолютно параллельно index.html это или main.php. Да хоть tumba.umba, ли ж бы содержание соответствовало заголовкам.
     
  22. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    Volt(220)

    А вот и зависит от расширения

    Если вот это:
    PHP:
    1. <html>
    2. <head>
    3. <script type="text/javascript" src="jquery.js"></script>
    4. <script type="text/javascript">
    5. $(function()
    6. {
    7. $("#datepicker").datepicker();
    8. });
    9. </script>
    10. </head>
    11. <body>
    12. <?php
    13. try
    14. {
    15. $db = new PDO('sqlite:pr_size.db');
    16. $result = $db->query("SELECT * FROM PRSIZE WHERE PROJECT LIKE '%".$_POST['proj']."%' AND DATA>".$_POST['dateot']." AND DATA<".$_POST['datedo']." ORDER BY PROJECT");
    17. if ($_POST['selectab'])
    18.  {
    19. echo '<table border="1">';
    20. foreach ($result as $row)
    21.    {
    22. echo '<tr><td>' . $row['PROJECT'] . '</td><td>' . $row['DIRECTORY'] . '</td><td>' . $row['SIZE'] .'</td><td>'. $row['DATA'] .'</td></tr>' ;
    23.    }
    24. echo '</table>';
    25.  }
    26. else
    27.  {
    28. ?>
    29. <form method="post">
    30. Проект <input name="proj" type="text" />
    31. Период от  <input name="dateot" type="text" value="20100111" />
    32. <div class="demo">
    33. Период до  <input id="datepicker" name="datedo" type="text" />
    34. </div>
    35. <div style="display: none;" class="demo-description">
    36. </div>
    37. <input type="submit" name="selectab" value="OK">
    38. </form>
    39. <?php
    40.  }
    41. }
    42. catch(PDOException $e)
    43. {
    44. die($e->getMessage());
    45. }
    46. ?>
    47. </body>
    48. </html>
    идёт с расширением php, то php-код работает, а java нет, но если вот этот же файл переименовать из php в htm, то страничка выглядит вот так ужастно:

    [​IMG]
     
  23. init01

    init01 Активный пользователь

    С нами с:
    22 дек 2009
    Сообщения:
    73
    Симпатии:
    0
    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
    но думала они самосозданные именно для тех примеров.

    Точнее вопрос даже в том, если это всё стандартные файлы, то где взять их все скопом?
     
  24. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)Java и Javascript разные вещи!
    2)Попробуйте вместо
    Код (Text):
    1. $(function()
    2.  {
    3.  $("#datepicker").datepicker();
    4.  });
    написать
    Код (Text):
    1. alert("JS работает!");
    2.2) А что Вы вообще ожидаете от js кода? Почему вы считаете что он не работает?
    3)Не зависит. Просто Ваш сервер не настроен обрабатывать htm страницы как php.
    4)
    datepicker как раз входит в jQuery UI.
     
  25. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1