Форма в Php. Аналогия Excel

Тема в разделе "PHP программирование", создана пользователем Creative, 24 фев 2006.

Статус темы:
Закрыта.
  1. Creative

    Creative Гость

    Прошу помощи.

    Нужно организовать на php таблицу, которая имела бы схожесть с Excel-кой.
    То-есть нужно сделать так, чтобы в первой ячейке вводились цифры(допустим колличество) а в остальных выводилась сумма по заранее забитой формуле. Сама проблема в выводе, не могу никак понять как автоматически вывести результат сразу в следующей ячейке.

    Я плохо обьясняю такие вещи так что лучше выложу небольшой код с пояснениями:

    Код (Text):
    <html>
    <head>
    <title>форма</title>
    </head>

    <center>
    <form action="index.php" method="">
    <input type="text" nаmе="z1" size="10" maxlength="6" value="карандаш">
    <input type="text" nаmе="z2" size="10" maxlength="6" value="серийный номер">
    <input type="text" nаmе="z3" size="10" maxlength="6" value="цена в рублях">
    <input type="text" nаmе="z4" size="10" maxlength="6" value="колличество">
    <input type="text" nаmе="z5" size="10" maxlength="6" value="цена в долларах">
    </form>
    </center>

    </body>
    </html>
    Автоматически нужно выводить только цены.

    з.ы. понимаю, что скрипт элементарный(может я и не прав, но мне кажется, что это просто сделать), но все же :D

    Заранее спасибо! :)
     

    Вложения:

    • index.php
      Размер файла:
      535 байт
      Просмотров:
      60
  2. Andrew Stephanoff

    Andrew Stephanoff Гость

    Не понимаю -- в чем сложность? И кто мешает использовать javascript?
     
  3. Creative

    Creative Гость

    <!--QuoteBegin-Andrew Stephanoff+24:02:2006, 11:34 -->
    <span class="vbquote">(Andrew Stephanoff @ 24:02:2006, 11:34 )</span><!--QuoteEBegin-->Не понимаю -- в чем сложность? И кто мешает использовать javascript?
    [snapback]31016" rel="nofollow" target="_blank[/snapback]​
    [/quote]


    Просто в php я немного разбираюсь, а вот c JavaScript не лады, да и не брался я за него. Если есть решения на Java буду признателен, если напишите код или конструкцию.
     
  4. Andrew Stephanoff

    Andrew Stephanoff Гость

    Код (Text):
    HTML
    -------
    ...
    <input type="text" id="byr" nаmе="z3" size="10" maxlength="6" value="цена в рублях">
    <input type="text" id="usd" nаmе="z5" size="10" maxlength="6" value="цена в долларах">
    <input type="text" nаmе="z4" id="count" size="10" maxlength="6" value="количество">
    ....

    javascript
    --------------

    ...
    var count = document.getElementById("count").value;
    var priceUSD = document.getElementById("usd").value * count;
    var priceBYR = document.getElementById("byr").value * count;

    alert("price in dollars: " + priceUSD + "\nцена в рублях: " +priceBYR );
    ...
     
  5. Creative

    Creative Гость

    В принципе я понял, как делать. Честно говоря, не очень, но сам дойду надеюсь :)

    А на php все-таки это вообще реально ?

    p.s. или же если с формы будет передаваться значение на другую страничку. Методом get пользоваться ?
     
  6. Gisma

    Gisma Гость

    Дайте статью для кто в танке!:)
    Причем здесь пхп? он СЕРВЕРНАЯ технология. а тебе нужно изменение данных У КЛИЕНТА
     
  7. Creative

    Creative Гость

    <!--QuoteBegin-Gisma+24:02:2006, 16:04 -->
    <span class="vbquote">(Gisma @ 24:02:2006, 16:04 )</span><!--QuoteEBegin-->Дайте статью для кто в танке!:D
    Причем здесь пхп? он СЕРВЕРНАЯ технология. а тебе нужно изменение данных У КЛИЕНТА
    [snapback]31027" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Не понял, мне нужно это не для клиента, а для личного использования. Просто я каждый день пишу отчет, который хочу оптимизировать :)

    Честно говоря мне все равно, как это будет использовано, просто хотел заодно немного о формах(php) узнать, что касается именно ввода и вывода на одной и той же странице.
    Почти так же как, допустим, сделано на сайте Метробанка.
    Вводите сумму, количество месяцев, и он считает сколько это будет в рублях, посредством нажатия на кнопку Submit. Только вот мне нужно, чтобы все автоматически считалось, без какой-либо активации. Вообщем, как в Excel'e

    МЕТРОБАНК
     
  8. Guest_Serg_*

    Guest_Serg_* Гость

    а что есть исходно-то? я так понимаю, есть имя объекта(карандаш)? нужен пхп-скрипт, который бы выводел хтмл в указанном виде? выводил откуда?
    вот, например, из субд что-то такое...
    Код (Text):
    <?
    $z1 = $_REQUEST['z1']; # получаем айдишник карандаша
    $info = array();
    $sql = new SQL('dsn', 'login', 'pass');
    # коннектимся к субд
    $query = "SELECT name, serial_num, rub, quantity, baks from Table where name = '" . $sql->escape_string($z1) . "'";
    # или так:
    # $query = "SELECT name, serial_num, rub, quantity, baks from Table where name LIKE \"%" . $sql->escape_string($z1) . "%\"";
    if ( $sql->query('result_name', $query) ) {
     if($sql->selected_rows('result_name') === 1) {
       if( !( $info = $sql->fetch_assoc('result_name') ) ) {
         # fetching failed
       }
     }
     else {
       # ничего не найдено
     }

     $sql->free_result('result_name');
    }
    else {
     # query failed
    }
    # субд дисконнект
    ?>
    <html>
    <head>
    <title>форма</title>
    </head>
    <?
    if(count($info)) {
     ?>
     <center>
     <form action="index.php" method="">
     <input type="text" nаmе="z1" size="10" maxlength="6" value="<?= $info['name'] ?>">
     <input type="text" nаmе="z2" size="10" maxlength="6" value="<?= $info['serial_num'] ?>">
     <input type="text" nаmе="z3" size="10" maxlength="6" value="<?= $info['rub'] ?>">
     <input type="text" nаmе="z4" size="10" maxlength="6" value="<?= $info['quantity'] ?>">
     <input type="text" nаmе="z5" size="10" maxlength="6" value="<?= $info['baks'] ?>">
     </form>
     </center>
     <?
    }
    else {
     ?>ничего не найдено<?
    }
    ?>
    </body>
    </html>
    что-то так..
    только в таком виде скрипт нельзя на общее пользование допускать - тут sql-инъекция возможна. если только исключительно для своих...
    на $sql->... не смотри - я просто использовал по привычке стандартный класс. для простого скрипта можеш обойтись родным пхп-айпи той субд к которой обращаешся (если, конечно, объект хранится в субд)
     
  9. Andrew Stephanoff

    Andrew Stephanoff Гость

    Ему нужно без перезагрузки страницы
     
  10. Guest_Serg_*

    Guest_Serg_* Гость

    хм... представляю...
    "select * ... " грузицца в двумерный массив джаваскрипта и отгружается в браузер...
    потом пользователь начинает юзать форму... :)
    кстати, как только размер массива перевалит за 1 - 1.5 мега, 4-й пень 2.5Ггц начинает немерянно тормозить
    да так, что приходица убивать процесс
     
  11. Andrew Stephanoff

    Andrew Stephanoff Гость

    Ты неправильно понял задание.
    Выборка из БД будет выведена как таблица, а JS лишь обратиться к неободимым id в дереве документа. При чем здесь загрузка всей (!) выборки в массив JS? И при чем здесь форма, если данные в принципе можно не отсылать (надо лишь умножить цену на количество)?

    Далее по тексту.

    Есть такая технология -- AJAX.
    Не представляю, что может быть в таком массиве. Опять же, незачем грузить все сразу.


    Посмотрел твой код.
    1. У тебя стоит $sql->escape_string(). То есть экранируются кавычки, как я понимаю. а где проверка MAGIC_QUOTES? А вдруг данные уже пришили экранированые?
    2. Не понимаю, зачем такой класс? Ты используешь те же функции MySQL, только как методы класса. Суть класса для баз данных в том, что если проект переходит на новую базу, то не код менять, а подключить новый класс. Посмотри как сделан PEAR DB, либо DbSimple Котерова. Если хочется делать свое, то хотя бы расширь возможности стандартных функций (например, число строк запроса можно возвращать и в sql::query()).
     
  12. Creative

    Creative Гость

    Спасибо всем, кто отозвался на вопрос! На самом деле, основываясь на Ваших постах и сайте php5 я все таки понял, как мне сделать все это, только вот затясалась проблема... :)

    Я пересчитываю валюту, размер которой вводиться в форму. ($_POST[''])
    Допустим рубли в доллары. Проблема такова, что у меня не считаются дробные чила ;) . Мне нужно умножить 28,18 на 5 допустим, а все равно выводится 140, вместо 140,9.
    Какой оператор это делает? На самом деле я нашел раздел, где пишется про string, char, только вот не могу разобраться. Если у кого есть линк на доступное обьяснение данной темы, киньте пожалуйста сюда или на мыло :D
     
  13. Andrew Stephanoff

    Andrew Stephanoff Гость

    Попробуй вместо "," в качестве разделителя использовать "."
    Во время выполнения арифметических действий php сам должен привести к нужному типу.
     
  14. Creative

    Creative Гость

    <!--QuoteBegin-Andrew Stephanoff+25:02:2006, 19:50 -->
    <span class="vbquote">(Andrew Stephanoff @ 25:02:2006, 19:50 )</span><!--QuoteEBegin-->Попробуй вместо "," в качестве разделителя использовать "."
    Во время выполнения арифметических действий php сам должен привести к нужному типу.
    [snapback]31065" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Прости, но я не понял... Лучше приведу код:
    Код (Text):
    <?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo ($_POST['price'] * $_POST['dol']);
     }
    ?>
    , где price - цена, doll - курс доллара.

    Если не трудно, вставь исправления.
     
  15. Andrew Stephanoff

    Andrew Stephanoff Гость

    и снова не понял :) ты когда вводишь в качестве разделителя дробной и целой части ставишь "," а надо "."
    Код (Text):
    $price = str_replace(",", ".", $_REQUEST["price"]);
    $dol = str_replace(",", ".", $_REQUEST["dol"]);
    echo ($price * $dol);
     
  16. Guest_Serg_*

    Guest_Serg_* Гость

    я ш сказал, что скрипт уязвим. не писать же весь скрипт с нуля... - тут тока схема.
    можно получать параметры самопальной функцией param('param_name') - там все чистится (и, если надо, приводится к типу). к тому же escape_string - это веть метод, который тоже пишется ручками.

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

    када сервер свой, то такая технология есть. када чел не является хозяином сервера, то такой технологии нет.

    а в массиве на 1.5 гига запросто могуть быть аудиторские выкладки - гори они синим пламенем :)
     
  17. Andrew Stephanoff

    Andrew Stephanoff Гость

    Сергей (?) -- зарегистрируйся на форуме.
    1. Ты сказал про SQL-инъекцию, и тут же в коде экранируешь строку. Но ведь экранирование строки и есть защита от SQL-инъекции! Другое дело -- ты не проверяешь MAGIC_QUOTES. И для чистоты класса лучше в этом методе реализовать только экранирование, а проверку оставить на совести специальной функции. Я для своего движка написал метод для получения значений переменных с принудительным убиранием слешей (если есть) и присваиванием значения по умолчанию, если переменной в запросе нет.

    2. Оно-то понятно, но просто ты заменяешь контрукцию mysql_query() конструкцией sql::query(). Как говорится, найдите 10 отличий :). И интерфейс для базы данных разрабатывается не ради самой возможности работать с базой данных через класс, а ради возможности работы с различными базами данных через один (!) класс. Например, в PEAR DB или DbSimple достаточно просто указать в DSN-строке SQL-сервер и все, интерфейс работы не изменится (но появятся масса дополнительных возможностей). В любом случае изучение чужого опыта -- вещь полезная. А ориентироваться ты должен не на новичков, а на себя и клиента.

    3. При чем тут мой/не мой сервер? AJAX -- это remote scripting. Если сервер поддерживает любой серверный язык, а клиент -- javascript|vbscript, то AJAX будет работать. И если у тебя информация занимает 1,5 (все-таки наверно) мбайта, то при генерации странички наверно тоже возникнет ощутимая пауза? Другое дело, что AJAX позволит тебе не забирать сразу эти 1,5 метра, а только необходимые данные по запросу.
     
  18. _serg_

    _serg_ Гость

    escape_string() кстати, у меня (в варианте для мускуля) mysql_real_escape_string() + еще несколько проверок
    насчет слешей:
    ну, теоретически, можно при получение параметра, после чистки и проверки валидности сделать что-то подобное
    $param = (! get_magic_quotes_gpc ()) ? addslashes ($param_name) : $param_name;
    НО (мое личное мнение):
    от мейджик_квотес нужно отказаться - отключить нафих все 3 управляющих флага. нет доступа к пхп.ини - сделать это либо через ини_сет, либо через специально предназначенные для этого функции, либо поменяв ручками значения соответствующих констант
    причины:
    1. они портят пользовательский ввод еще на этапе приема параметров и очень неудобно обрабатывать в одном и том же скрипте ветвления заливки в базу и чего-то еще (например, проверки, вставки, рассылки...)
    2. явные проблемы с юникодом (на сегодняшний день)
    3. путаница с взаимозависимостями/взаимоотключениями между функциями установок этих мейджик_квотс (их 3 штуки)
    4. мейджик квотес не спасают от инъекции как таковой. это спасает только от падения запроса при вводе произвольного текста (да и то не во всех случаях). для предотвращения иънъекции, достаточно экранировать лиш ; и -- в любом виде (в том числе и в форме кода)
    а вообще (и, думаю, меня поддержит большинство), надо использовать плейсхолдеры. и не надо париться
    и там еще например в мускуле прежде чем заливать данные в like надо станцевать пляску с бубном перед обратными слешами. ну не проверять же каждый раз экранировалось что-то или нет... - это ш скока лишних действий
    и раз уш зашла речь о безопасности, мало безошибочно залить данные в бд. нужно их оттуда грамотно вылить.
    если они будут выливаться в хтмл, то нужно обеспечить защиту от хсс-аттак, принудительно применяя хтмлспешлчарс для данных, выливаемых в хтмл. это самое поганое для безопасности место. смена программера может привести к тому, что новичок не особо разобравшись, выплюнет содержимое текстового поля в хтмл (например, админскую страничку) и злому редиске уйдет сид админа. а сессии редко пока что по айпи привязываются. главным образом из-за того, что программерам лень обрабатывать тучу проксевых хттп-заголовков...

    2. да. это, конечно, так

    3. ну, чесно скажу, что про аджакс я тока прочитал что это такое и как работает. .. но вот есть, допустим, текст на 1.5 (конечно же) мега - допустим какой-нить документ (приказ) который толстая тетка сидит и правит
    или таблица, которую она ручками сидит общитывает. ну не тянут браузеры такое пока что... вообще невозможно работать..
    хотя, можно, конечно, извращнуться и сбацать какую-нить скрытую от пользователя постраничную загрузку... не знаю - не задумывался пока над этим... но идея прикольная, не спорю - судя по гуглю...
     
  19. Andrew Stephanoff

    Andrew Stephanoff Гость

    Сергей, на 1,5 мегабайта должен быть ОЧЕНЬ БОЛЬШОЙ текст, страниц на 500-600.
     
  20. _serg_

    _serg_ Гость

    примерно 1.5к печатных страниц - допустим, детализированная финансовая отчетность аудита крупной компании или какой-нить анализ с табличными выкладками.... или, например, бюджет РФ со всеми приложениями...
    уверяю, 1.5мега далеко не предел
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей