|
|
|
| Всем привет!
Не совсем понимаю, принцип работы, массивов, точнее что мне делать.
Задача такая, у меня есть динамическая форма, которая может добавляться n кол-во раз.
Понятно, что необходимо использовать массивы, вот что я делаю:
<form name="" action="" method="post">
<tr><td><p class=zag2>Модель HDD1:</td>
<td><input size=15 class=input type=text name=hddtype[] value='<?php echo $hddtype; ?>'></td>
<td><p class=zag2>Размер HDD1:</td>
<td>
<input size=4 class=input type=text name=hddsize[] value='<?php echo $hddsize; ?>'></td><td><p class=zag2>Дата установки:</td>
<td>
<input size=2 maxlength=2 class=input type=text name=hddday[] value='<?php echo $hdddate; ?>'>
<input size=2 maxlength=2 class=input type=text name=hddmonth[] value='<?php echo $hdddate; ?>'>
<input size=4 maxlength=4 class=input type=text name=hddyear[] value='<?php echo $hdddate; ?>'>
<input type="button" name="drop" value=" − " onblur="" onclick="dropFile(this);"><input type="button" value=" + " onclick="addFile(this);"></td></tr>
<input type="submit" value="Send">
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
if()
?>
</form>
|
Сам javascript:
function dropFile(btn){
if(document.getElementById) {
tr = btn;
while (tr.tagName != 'TR') tr = tr.parentNode;
tr.parentNode.removeChild(tr);
checkForLast();
}
}
function addFile(btn){
if(document.getElementById) {
tr = btn;
while (tr.tagName != 'TR') tr = tr.parentNode;
var idSuffix = Math.round(Math.random()*1000);
var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
thisChilds = newTr.getElementsByTagName('td');
for (var i = 0; i < thisChilds.length; i++){
if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = '';
if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="att" class="wideFile" type="file">';
}
checkForLast();
}
}
function checkForLast(){
btns = document.getElementsByName('drop');
for (i = 0; i < btns.length; i++){
btns[i].disabled = (btns.length == 1) ? true : false;
}
}
|
Так вот, а как мне теперь всё это проверить, допустим заполнил пользователь форму или нет, ведь он может добавлять сколько угодно форм?
И как мне реализовать передачу всех этих значений в базу данных?
Что ха чем нужно делать и как?
Возможно есть уже готовые примеры.
Ведь их же снова, может быть не ограничего?
Мне непонятен сам механизм этой работы!
Инфо о массивах я прочитал, поиском также пользовался!
Помогите пожалуйста!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(29.08.2006 в 20:41)
| | С первой задачей я справился, то есть разобрался с выводом массивов:
<?php
foreach ($_POST['hddtype'] as $hddtype) {
print $hddtype;
}
foreach ($_POST['hddsize'] as $hddsize) {
print $hddsize;
}
foreach ($_POST['hddday'] as $hddday) {
print $hddday;
}
foreach ($_POST['hddmonth'] as $hddmonth) {
print $hddmonth;
}
foreach ($_POST['hddyear'] as $hddyear) {
print $hddyear;
}
?>
|
А как же мне теперь всё это полученное передать в переменные для занесения в БД?
То есть мне необходимо, чтобы соответствовало: hddtype[o] hddsize[0] hddday[0] hddmonth[0] hddyear[0] и.т.д.
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(29.08.2006 в 22:42)
| | Кто-нибудь может мне помочь? | |
|
|
|
|
|
|
|
для: Vados
(29.08.2006 в 22:42)
| | Массивы $_POST['hddsize'] и т.д. являются двумерными - обращайтесь ко второму индексу
<?php
echo $_POST['hddsize'][0];
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.08.2006 в 12:38)
| | А как считать все эти двумерные массивы?
Я имею ввиду на заполнение, если к примеру $_POST['hddsize'][2] - заполнен передать его? | |
|
|
|
|
|
|
|
для: Vados
(30.08.2006 в 18:32)
| | if(isset( $_POST['hddsize'][2] )) | |
|
|
|
|
|
|
|
для: valenok
(30.08.2006 в 18:53)
| | Всем привет!
Столько времени уже убил, но так ничего у меня и не получилось.
Ситуация сейчас какая:
1) форма у меня немного поменялась:
<form name='' action='' method='post'>
<tr>
<td><p class=zag2>Модель HDD1:</td>
<td><input size=15 class=input type=text name=hdd[0][] value=''></td>
<td><p class=zag2>Размер HDD1:</td>
<td>
<input size=4 class=input type=text name=hdd[1][] value=''></td>
<td><p class=zag2>Дата установки:</td>
<td>
<input size=2 maxlength=2 class=input type=text name=hdd[2][] value=''>
<input size=2 maxlength=2 class=input type=text name=hdd[3][] value=''>
<input size=4 maxlength=4 class=input type=text name=hdd[4][] value=''>
<input type='button' name='drop' value=' − ' onblur='' onclick='dropFile(this);'><input type='button' value=' + ' onclick='addFile(this);'></td>
</tr>
<input type='submit' value='Send'>
</form>
|
То есть теперь в ней присутствуют массивы hdd[1][], hdd[2][], hdd[3][], hdd[4][], hdd[5][].
Так вот вопрос, как мне теперь эти всё параметры массива не просто перебрать, а передать в функции, для передачи значений процедуре?
Вот как я это делаю, с обычными переменными:
$storeProc = mssql_init('inventory.dbo.test_1');
mssql_bind($storeProc,"@hddtype",$_POST['hdd'][0][$i],SQLVARCHAR);
mssql_bind($storeProc,"@hddsize",$_POST['hdd'][1][$i],SQLINT4);
mssql_bind($storeProc,"@hdddate",$hdddate,SQLVARCHAR);
mssql_bind($storeProc,"@qqq",$qqq,SQLVARCHAR);
$result = mssql_execute($storeProc);
|
Каким циклом или как мне воспользоваться, чтобы к примеру можно было было пройти по циклу и записать в один цикл значения к примеру: hdd[1][0], hdd[2][0], hdd[3][0], hdd[4][0], hdd[5][0] и так далее?
Подскажите на реальном примере!
Буду очень благодарен. | |
|
|
|
|
|
|
|
для: Vados
(01.09.2006 в 20:17)
| | Прошу помогите, очень нужно! | |
|
|
|
|
|
|
|
для: Vados
(01.09.2006 в 21:16)
| |
<?
for ($i=0;$i<count($hdd);$i++)
{
echo $hdd[$i][0];
}
?>
|
Вместо echo, делаете с переменно то, что вам нужно. | |
|
|
|
|
|
|
|
для: Drago
(02.09.2006 в 01:43)
| | Спасибо!
А как быть с тем, что у меня как раз фиксированное значение массива в hdd[0][], hdd[1][],hdd[2][],hdd[3][],hdd[4][], а вот так может быть:
hdd[0][0], hdd[1][0],hdd[2][0],hdd[3][0],hdd[4][0]
hdd[0][1], hdd[1][1],hdd[2][1],hdd[3][1],hdd[4][1]
hdd[0][2], hdd[1][2],hdd[2][2],hdd[3][2],hdd[4][2] и так далее.
Вопрос, как сдклать так, чтобы у меня цикл перебирал значения таким образом:
hdd[0][0], hdd[1][0].............
[b]hdd[0][1], hdd[1][1]...........
[b]hdd[0][2], hdd[1][2]..............
и так далее....
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 03:18)
| | Ребята, прошу помогите! | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 14:49)
| | Ну что-то ничего с этим не получается :-))
Профи и не только помогите :-)) | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 16:16)
| | Вопрос, как сдклать так, чтобы у меня цикл перебирал значения таким образом:
hdd[0][0], hdd[1][0]...
hdd[0][1], hdd[1][1]...
hdd[0][2], hdd[1][2]...
|
и так далее....
Ну эм а:
for(i = 0; i < hdd[0].length; i++)
{
for(j = 0; j < hdd.length; j++)
{
alert(hdd[j][i]);
}
}
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(02.09.2006 в 16:27)
| | Не совсем понимаю, мысль, то есть использовать это при помощи своего javascript скрипта?
Можете детальнее объяснить...
Спасибо, Евгений! | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 16:36)
| | Ну Вы просили массив обойти в определенном порядке :) Я не совсем пойму в чем проблемма... Насколько я понял пользователь при помощи JS может добавить новые поля формы. И эти поля все должны потом передаться скрипту? В каком месте проблемма? | |
|
|
|
|
|
|
|
для: Евгений Петров
(02.09.2006 в 16:39)
| | Мне необходимо, обойти массив в таком порядке, верно, и так верно то, что для добавления новых полей в форме я использую скрипт, но для подсчёта кол-ва заполненных форм я и использую такой массив: hdd[0][], где [0] -первый элемент массива, а их может быть всего 5 у меня, то есть соответственно фиксированный, следующий парамет [] - оставляю его пустым, так как именно этот парамет массива считает кол-во заполненных полей пользователем, так как их может быть неограниченное кол-во.
Каким именно обрахом не поступить, чтобы подсчитать это всё в порядке:
hdd[0][0], hdd[1][0].............
hdd[0][1], hdd[1][1]...........
hdd[0][2], hdd[1][2]..............
|
и.т.д. | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 19:23)
| | посчитать надо на стороне клиента или сервера? | |
|
|
|
|
|
|
|
для: Евгений Петров
(02.09.2006 в 19:26)
| | На стороне сервера, при нажатии на кнопку к примеру "отправить", но мне всё это необходимо сделать для того, чтобы потом зная, длину, можно было передать этот массив, обращаясь конктретно нужному элементу массива в процедуру, вот пример процедуры:
$storeProc = mssql_init('inventory.dbo.test_1');
mssql_bind($storeProc,"@hddtype",$_POST['hdd'][$i][$j],SQLVARCHAR);
mssql_bind($storeProc,"@hddsize",$_POST['hdd'][$i][$j],SQLINT4);
mssql_bind($storeProc,"@hdddate",$_POST['hdd'][$i][$j],SQLVARCHAR);
...............................................................................................
mssql_bind($storeProc,"@qqq",$qqq,SQLVARCHAR);
$result = mssql_execute($storeProc);
|
Когда я использую, например такой цикл:
for ($i = 0; $i <= count($_POST['hdd'][0][$j]); $i++)
{
for ($j = 0; $j <= count($_POST['hdd'][$i]); $j++)
{
echo ' '.$_POST['hdd'][$i][$j];
}
}
|
У меня ничего не получается!
Может быть я не правильно к нему обращаюсь?
Евгений, у вас есть ICQ, можно номер?
Спасибо! | |
|
|
|
|
|
|
|
для: Vados
(02.09.2006 в 19:37)
| | В инфе написан | |
|
|
|