Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] [PHP, MySQL, JS]Использование селекта в регистрации (http://forum.oszone.net/showthread.php?t=224810)

blackmane 09-01-2012 20:59 1831992

[PHP, MySQL, JS]Использование селекта в регистрации
 
Может вопрос покажется глупым, но все же, как создать динамически зависимые селекты (значения которых хранятся в БД), чтобы потом их записать в новую талицу?
В поисках ответа я наткнулся на Динамические селекты JS, и даже умудрился сделать два уровня с выборкой из бд (но мне нужно три), потом я понял что не смогу внести в конечную таблицу выбранные данные, так как вывод выглядит вот так:
PHP код:

<?php
include "../data/dbconfig.php";
//if($conect == true)  {echo 'Conect DB';}
//if($select == true)  {echo 'Select TABLE';}

//selet all data from DB test
$result mysql_query("select * from mod_print where (id_firm='1')");
//if($result == true){echo 'TRUE DB<br>';}

//Poluchenie massiva
$array mysql_fetch_array($result);

echo 
" '1':{        ";

do {
    
printf("
    
    'do_%s':'%s',
    
    "
    
,$array['id'],$array['model_p']);
    
}
while(
$array mysql_fetch_array($result));

echo 
"},"
?>

Может какой form action =' ' добавить?
Речь о регистрации оборудования.
Я хочу сделать так что бы вместо поля "Модель" было два списка (первый "Фирма", второй "Модель принтера", который зависит от выбранной фирмы), тоже самое с этажем и кабинетом, и простой список матответственных лиц.
При этом существуют три таблицы:
firm_printer (id, firm)
mod_printer (id, id_firm, model_p, cartrige)
printer (id, firm, model, sn, inv_num, cartrige, et, depar, mat_face)
И хотелось бы сделать так чтобы при выборе определенной модели значение поля cartrige в таблице print копировалось из значения поля cartrige таблицы mod_print выбранной модели.


HTML код:

<form name="myForm" action="add_print.php" method="post" onSubmit="return splash();">
<input type="hidden" name="action" value="add">

<table width="100%" border="0" cellspacing="3" cellpadding="0">
  <tr>
    <td>Модель</td>
    <td>Серийный номер</td>
    <td>Инвентарный номер</td>
    <td>Картридж</td>
    <td>Этаж</td>
    <td>Кабинет</td>
    <td>Мат. лицо</td>
  </tr>
  <tr>
    <td><input name="model" maxlength=30 size=22> </td>
    <td><input name="sn" maxlength=30 size=22></td>
    <td><input name="inv_num" maxlength=60 size=22></td>
    <td><input name="cartrige" maxlength=60 size=22></td>
    <td><input name="et" maxlength=60 size=22></td>
    <td><input name="depar" maxlength=60 size=22></td>
    <td><input name="mat_face" maxlength=60 size=22></td>

  </tr>
</table>

<table width="100%" border="0" align="center"><tr colspan=2><center><input type="submit" value="Отправить"></center></tr></table>
</form>

Смотря на этот хтмл код я вообще не могу понять как в эту форму запихать такое количество других форм.

P.S. хорошо знаю только CSS да HTML, PHP начинаю изучать, не говоря уж про jQuery, AJAX, JS...
P.S.S. если что то не понятно уточняйте, как то сложно объяснить то, что видишь в своей голове (

Sham 09-01-2012 21:41 1832025

это походу отсюда http://www.tigir.com/javascript_select.htm (см. исходный код, там все видно)

http://php.net/manual/ru/language.va...s.external.php (основы)

http://docs.php.net/manual/ru/functi...etch-array.php (while вместо do-while, см. примеры внизу)

http://docs.php.net/manual/ru/functi...ape-string.php (экранируем перед вставкой).

blackmane 09-01-2012 21:56 1832043

Цитата:

Цитата Sham
это походу отсюда http://www.tigir.com/javascript_select.htm (см. исходный код, там все видно)

Да это, но:
во-первых значения вносятся в файл, а не из таблицы.
во-вторых не описанно как их занести в другую таблицу
в-третьих, исходя из первых, я не понимаю как вывести третий уровень :gulp:


А почему лучше использовать while???, я понимаю что не использую первую часть - do, честно мне пока сложно все это разобрать, дык еще и в перемешку с изучением С++

Я кстати несколько изменил первое сообщение.

И еще вопрос, если, допустим, я буду в таблице хтмл писать в каждой ячейке form, то может быть ли обработаны все запросы сразу (ведь если я правильно понял, все это не сможет выстроиться в один запрос)?

Sham 10-01-2012 09:39 1832287

Цитата:

Цитата blackmane
А почему лучше использовать while???, »

лишняя строка
Цитата:

Цитата blackmane
//Poluchenie*massiva
$array*=*mysql_fetch_array($result); »

Цитата:

Цитата blackmane
в каждой ячейке form »

нужно сформировать get или post запрос, а как это делать - решать вам - формой, ссылкой; отправлять ajax или обычным запросом. Вариантов масса.

blackmane 10-01-2012 10:39 1832313

Цитата:

Цитата Sham
Цитата blackmane: А почему лучше использовать while???, » »

К сожалению do необходимо, т.к. без него не идет цикл :(

Sham 10-01-2012 11:02 1832322

do-while делает минимум 1 цикл, даже если выборки нет, в результате чего внутри цикла будут неопределенные переменные.

blackmane 10-01-2012 11:12 1832324

Вроде как что начинает получатся (правда пока не на динамическом селекте ( ), но выдает ошибку:
Цитата:

Warning: Invalid argument supplied for foreach() in Z:\home\itr.itr\www\print\add_print.php on line 35
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 INSERT INTO print (mat_face) values ('Столбенко Г.Н.') )
читать дальше »

PHP код:

$mat_face $_POST['mat_face'];
 if(!empty(
$mat_face))
 {
 
// Начинаем формировать переменную, содержащую этот список
 // в формате "(3,5,6,7)"
 
$query "(" ;
 foreach(
$mat_face as $val$query.= "$val,";
 
// Удаляем последнюю запятую, заменяя ее закрывающей скобкой)
 
$query substr($query0strlen($query) - ). ")" ;
 
// Завершаем формирование SQL-запроса на удаление
 
$query "INSERT INTO print (mat_face)  values ('$mat_face') ".$query;
 
// Выполняем запрос
 
if(!mysql_query($query))
 {
 echo 
mysql_error()."<br>";
 echo 
$query."<br>";
 }
 }
        
header("Location: insert_print.php"); 

HTML код:

<form name="myForm" action="add_print.php" method="post" onSubmit="return splash();">
<input type="hidden" name="action" value="add">

<table width="100%" border="0" cellspacing="3" cellpadding="0">
  <tr>
    <td>Модель</td>
    <td>Серийный номер</td>
    <td>Инвентарный номер</td>
    <td>Картридж</td>
    <td>Этаж</td>
    <td>Кабинет</td>
    <td>Мат. лицо</td>
  </tr>
  <tr>
    <td><input name="model" maxlength=30 size=22> </td>
    <td><input name="sn" maxlength=30 size=22></td>
    <td><input name="inv_num" maxlength=60 size=22></td>
    <td><input name="cartrige" maxlength=60 size=22></td>
    <td><input name="et" maxlength=60 size=22></td>
    <td><input name="depar" maxlength=60 size=22></td>
    <td><!--<input name="mat_face" maxlength=60 size=22>-->
   
    <?php
include "../data/dbconfig.php";
//if($conect == true)  {echo 'Conect DB';}
//if($select == true)  {echo 'Select TABLE';}

//selet all data from DB test
$result = mysql_query("select * FROM mat_face");
$array = mysql_fetch_array($result);
echo "<select size='1' name='mat_face' ><option value='all'>*Выбрать проблему...*</option>";
do {
        printf("

  <option class='cat-title' name='mat_face[]' value='%s'>%s</option>

"
        ,$array['name'],$array['name']);
       
}
while($array = mysql_fetch_array($result));

echo "</select>"
?>

   
    </td>

  </tr>
</table>

<table width="100%" border="0" align="center"><tr colspan=2><center><input type="submit" value="Отправить"></center></tr></table>
</form>



Попытался сделать на основе удаления выбранных строк, но как то не сильно (

Цитата:

Цитата Sham
do-while делает минимум 1 цикл, даже если выборки нет, в результате чего внутри цикла будут неопределенные переменные. »

Я убрал do и после обновления страницы в списке осталось только одно значение, вместо 5...

blackmane 10-01-2012 12:18 1832355

Таки получилось (на не динамическом):
PHP код:

<?php
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////Скрипт добавления в базу инвентаризации (print)/////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
include "../data/dbconfig.php";
//if($conect == true)  {echo 'Conect DB';}
//if($select == true)  {echo 'Select TABLE';}



// получаем переменные из формы
$model   $_REQUEST['model'];
$sn $_REQUEST['sn'];
$inv_num  $_REQUEST['inv_num']; 
$cartrige  $_REQUEST['cartrige'];
$et  $_REQUEST['et'];
$depar  $_REQUEST['depar'];
$value  $_REQUEST['mat_face'];
$action=$_REQUEST['action'];
if (
$action=="add")
    {
        
// добавление данных в БД 
        
$sql="INSERT INTO print(model, sn, inv_num, cartrige, et, depar, mat_face) VALUES ('$model', '$sn', '$inv_num', '$cartrige', '$et', '$depar', '$_POST[mat_face]')";
        
$r=mysql_query ($sql);
    };

        
header("Location: insert_print.php");
?>


blackmane 10-01-2012 14:27 1832453

А как сделать чтобы в поле мат ответственное лицо вводилось значение id_face (1.2.3), а форме выводилось значение name???
Сейчас записывается в конечную таблицу то, что я напишу в value (сейчас стоит поле name), хотелось бы чтобы записывался id_face, а при запросе отобразить - name.

PHP код:

<?php
include "../data/dbconfig.php";
//if($conect == true)  {echo 'Conect DB';}
//if($select == true)  {echo 'Select TABLE';}

//selet all data from DB test
$result mysql_query("select * FROM mat_face");
$array mysql_fetch_array($result);
echo 
"<select size='1' name='mat_face' ><option value='all'>Выбрать...*</option>";
do {
    
printf("

  <option class='cat-title' name='mat_face[]' value='%s'>%s</option>

"
    
,$array['name'],$array['name']);
    
}
while(
$array mysql_fetch_array($result));

echo 
"</select>"
?>


blackmane 10-01-2012 20:37 1832710

Sham, может подскажете?
Я понял что нужно сделать, чтобы из динамических селектов передавать данные в таблицу, НО передача не возможна, так как в option второго уровня нет атрибута name, там в принципе во втором уровне нет тега option, где я должен указать "model[]".
Как мне добавить этот атрибут?

Sham 10-01-2012 21:32 1832760

http://www.w3.org/wiki/HTML/Elements/option

в option не может быть name вообще, поскольку name указывается в select, чтобы выбранное значение (option value) попало в переменную.

недопонял я ваши выкладки.

рулите скрытыми полями <input type="hidden" name="" value="" />

blackmane 10-01-2012 22:28 1832788

Спасибо :)
Вы окозались правы по поводу нэйма, просто я допустил маленькую ошибку из-за чего не добовлялась информация :(

Цитата:

Цитата Sham
недопонял я ваши выкладки. »

В смысле?
Цитата:

Цитата Sham
рулите скрытыми полями <input type="hidden" name="" value="" /> »

По поводу скрытости поля не могу ничего говорить, так как такой вариант я нашел просторах интернета, а без поля инфа просто не добовляется :(

Вы часом мне не подскажите как сделать следующее:
при выборе принтера из таблицы mod_print для добавления в таблицу print значение поля cartrige выбранного принтера копировалось в поле cartrige таблицы print. Если я правильно понял (хотя последнее время мне кажется что я вообще ничего не понимаю) нужно использовать JOIN, но как его использовать с уже существующим запросом:
PHP код:

INSERT INTO print(modelsninv_numcartrigeetdeparmat_faceVALUES ('$_POST[model]''$sn''$inv_num''$cartrige''$et''$depar''$_POST[mat_face]'

???

Sham 11-01-2012 10:19 1833011

Цитата:

Цитата blackmane
при выборе принтера из таблицы mod_print для добавления в таблицу print значение поля cartrige выбранного принтера копировалось в поле cartrige таблицы print. »

на словах не надо, нужен код. Что есть, что надо.


мануал по синтаксису запросов тут (на примерах понятно все).

blackmane 11-01-2012 18:40 1833297

Используя динамические селекты я столкнулся с проблемой, в первом списке в value выводится ID, что облегчает подключение подчиненных списков
PHP код:

'ЗНАЧЕНИЕ VALUE ГЛАВНОГО СПИСКА':{
      
'ie_win':'Windows',
      
'ie_mac':'Mac'
  
}, 

, но чтобы подключить более одного вторичного списка приходится копировать все это:
PHP код:

<?php
include "../data/dbconfig.php";
$result mysql_query("select * from mod_print where (id_firm='1')");
$array mysql_fetch_array($result);

echo 
" '1':{        ";

do {
    
printf("
    
   '%s':'%s',
    
    "
    
,$array['model_p'],$array['model_p']);
    
}
while(
$array mysql_fetch_array($result));

echo 
"},"
?>

И изменять значение в
PHP код:

select from mod_print where (id_firm='1'

и
PHP код:

echo " '1':{"

на следующую цифру.
Я попытался сделать цикл на
PHP код:

echo " '1':{"

, но столкнулся с проблемой в
PHP код:

select from mod_print where (id_firm='1'

, как сделать так чтобы
PHP код:

<?php
include "../data/dbconfig.php";
$result mysql_query("select * from mod_print where (id_firm='1')");
$array mysql_fetch_array($result);

echo 
" '1':{        ";

do {
    
printf("
    
   '%s':'%s',
    
    "
    
,$array['model_p'],$array['model_p']);
    
}
while(
$array mysql_fetch_array($result));

echo 
"},"
?>

, "копировалось" и изменялось значение выше указанных "полей" на +1?

Sham 12-01-2012 12:34 1833843

ну определите какие ID нужны и вперед

PHP код:

$result mysql_query"SELECT * FROM `mod_print` WHERE `id_firm` IN (1,3,5,7,8,9,23)" );

$arr $arr2 = array();


while (
$array mysql_fetch_array($result))
    
$arr[$array['id_firm']][] = sprintf("'%s':'%s'"$array['model_p'], $array['model_p']);

if (
$arr)
    foreach (
$arr as $k => $i)
        
$arr2[] = "'" $k "':{" implode(','$i) . "}";


echo 
implode(','$arr2); 


blackmane 14-01-2012 00:33 1835369

Все работает. Спасибо!
Я бы хотел спросить как оно работает, я понял только строку с выборкой, вижу цикл foreach, if, while. Что означает $k и $i????

Sham 14-01-2012 10:28 1835491

Цитата:

Цитата blackmane
Что означает $k и $i? »

почитайте про foreach


Время: 19:06.

Время: 19:06.
© OSzone.net 2001-