churlena

Статус
  • Активный

Последние сообщения churlena

  • F.A.Q.Интерактивный select без перезагрузки страницы • 24 ноября 2009 г. 3:17

    всем привет!помогите пожалуйста новичку =)задача у меня такая - есть бд автомобилей, водителей и т.д. нужно при выборе из списка автомобиля формировать список водителей, выбирать водителя и заполнять ещё 2 поля.и при нажатии на ссылку "добавить" добавляется новая строка.и в ней должно т...
    всем привет!помогите пожалуйста новичку =)
    задача у меня такая - есть бд автомобилей, водителей и т.д. нужно при выборе из списка автомобиля формировать список водителей, выбирать водителя и заполнять ещё 2 поля.и при нажатии на ссылку "добавить" добавляется новая строка.и в ней должно то же самое работать.
    Пользуясь статьёй http://pyha.ru/articles/php/ajax-select/ , написала код на php и js. ошибка в том, что когда во второй и последующих строчках выбираю автомобиль, то изменяется не текущий список автомобилей(в этой строчке), а список из верхней(первой) строчки
    Используется 2 файла:
    <html>
    <head><LINK REL=STYLESHEET TYPE="text/css" HREF="style.css">
    <title>Ввод данных - касса</title>
    </head>
    <body>
    <h2> <center>Касса - сдано за план</center> </h2> <br>
    <?php
    include("mysql.inc");

    ?>

    <form action="kassa_result.php" method="post">

    Дата: <input type="date" name="date" ><br></br>


    <span id="table">


    <table  width = "90%" border = "0" cellpadding="2" cellspacing = "0" BGCOLOR=DCDCDC>
    <tr>
    <td ><b>Гос. № а/м</b></td>
    <td ><b>Водитель</b></td>
    <td ><b>Сумма на план</b></td>
    <td ><b>Сумма за ремонт и з/ч</b></td>
    <td><a href="#" onclick="return addline();">добавить</a></td>
    </tr>
    <tr id="newline" nomer="[0]">
    <td>
    <script language="JavaScript" src="JsHttpRequest.js"></script>

    <script language="JavaScript">
    function doload(value){
    var req=new JsHttpRequest();
    req.onreadystatechange=function(){

    if(req.readyState==4) document.getElementById("result[<?= $HTTP_POST_VARS['count']?>]").innerHTML=req.responseText;}
    req.open(null,"kassa_help.php",true);
    req.send({auto:value});}
    </script>
    <!– Создаем форму –>
     
    <!– Теперь пихаем в нее первый select –>

    <select name="auto[0]" onchange="doload(this.value);">
    <option value="no" selected>Выберите номер…</option>
    <?php
    $sql = mysql_query("SELECT * FROM auto order by number_gos");
    while ($auto = mysql_fetch_object($sql)) {
    echo "<option value = \"$auto->auto_ID\">$auto->number_gos</option>";
    }
    ?>
    </select>


    <br><br>
    </td>
    <!– Вставляем тэг с нашим идентификатором, вместо которого у нас будет появляться второй select –>
    <td>
    <div id="result[<?= $HTTP_POST_VARS['count']?>]" ></div>
    </td>
    <td><input type = "text" name = sum_plan[0]></td>
    <td><input type = "text" name = sum_rem[0]></td>
    <td valign="top"><a href="#" onclick="return rmline(0);">удалить</a></td>

    </tr>

    <!– Теперь вставляем кнопку и закрываем форму. –>

    </table>
    </span>

    <input type="hidden" name="count" value="0">
    <script language="JavaScript">

    function addline()

    {

    c=++document.getElementById('count').value; // увеличиваем счётчик строк

    s=document.getElementById('table').innerHTML; // получаем HTML-код таблицы

    s=s.replace(/[\r\n]/g,''); // вырезаем все символы перевода строк

    re=/(.*)(<tr id=.*>)(<\/table>)/gi;

    // это регулярное выражение позволяет выделить последнюю строку таблицы

    s1=s.replace(re,'$2'); // получаем HTML-код последней строки таблицы

    // заменяем все цифры к квадратных скобках

    s2=s1.replace(/\[\d+\]/gi,'['+c+']');

    // на номер новой строки

    s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')');

    // заменяем аргумент функции rmline на номер новой строки

    s=s.replace(re,'$1$2'+s2+'$3');

    // создаём HTML-код с добавленным кодом новой строки

    document.getElementById('table').innerHTML=s;

    // возвращаем результат на место исходной таблицы

    return false; // чтобы не происходил переход по ссылке

    }

    function rmline(q)

    {

    s=document.getElementById('table').innerHTML;

    s=s.replace(/[\r\n]/g,'');

    re=new RegExp('<tr id="?newline"? nomer="?\\['+q+'.*?<\\/tr>','gi');

    // это регулярное выражение позволяет выделить строку таблицы с заданным номером

    s=s.replace(re,'');

    // заменяем её на пустое место

    document.getElementById('table').innerHTML=s;

    return false;

    }

    </script>



    <input type="submit" value="Отправить">

    </form>[/php]

    второй - "kassa_help.php"
    [php]<?

    include("mysql.inc");


    require("JsHttpRequest.php"); //Подключаем библиотеку
    $JsHttpRequest=new JsHttpRequest("windows-1251"); //Создаем экземпляр класса, указываю рабочую кодировку.

    //Далее все просто. В зависимости от выбранного параметра в первом select`e, заполняем переменную $html необходимым кодом.

    $auto = ($HTTP_POST_VARS['auto']);
    echo $count = ($HTTP_POST_VARS['count']);



    $sql = mysql_query("SELECT distinct driver_id FROM list where `auto_ID` = '$auto'");
    $n= mysql_num_rows($sql);
    if ($n>0){ ?>
    <select name = "driver[<?= $count?>]"><?
    while($d = mysql_fetch_array($sql)) {

    //$driver_id = $d->driver_ID;
    $sqll = mysql_query("SELECT * FROM driver where `driver_id` ='$d[0]' ");
    while ($driver = mysql_fetch_object($sqll)) {

    echo "<option value = \"$driver->driver_ID\">$driver->surname $driver->name $driver->sec_name</option>";

    }
    } ?> </select> <?}
    else echo "Сначала заполните ПЛ!";

    ?>