[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Заполнить массив по частям
ikebastuz
Здравствуйте!
Я еще совсем зеленый, несколько дней учу PHP, поэтому не ругайтесь, если вопрос покажется совсем уж банальным. Помогите или объясните 1 раз как правильно искать решение, не создавая темы.

Итак. Пишу такую вещь. Есть допустим 5 человек. Ходят они в магазин, накупают жрачку и кто-то рассчитывается. Надо ввести по пунктам стоимости отдельных вещей и чекбоксами отметить кто за это скидывается. То есть форма и в нашем примере 5 чекбоксов. И две кнопки ОК. одна вводит данные в массив, вторая выводит таблицу и сумму.
Собственно что я хочу узнать. Как нажимая на первую кнопку ОК, именно добавлять в уже существующий массив данные, а не каждый раз забивать его заново, по сути в [0] строку.

я накидал вот такой код


<html>
<body>
<?

function
checkbox_verify($_name) //функция проверки чекбокса
{
$result=0;
if (isset($_REQUEST[$_name]))
{ if ($_REQUEST[$_name]=='on') { $result=1; } else { $result=0; }
}

return $result;
}

$sum = isset($_POST['sum']) ? htmlspecialchars($_POST['sum']) : '';

$mult = checkbox_verify('m1') + checkbox_verify('m2') + checkbox_verify('m3') + checkbox_verify('m4') + checkbox_verify('m5'); //считаю множитель, на который делить сумму
$ig = array();//создаю массивы к именам
$sh = array();
$ko = array();
$sa = array();
$di = array();

if (checkbox_verify('m1') == 1) {
$ig[] = $sum / $mult;
}
else {
$ig[] = 0;
}

if (checkbox_verify('m2') == 1) {
$sh[] = $sum / $mult;
}
else {
$sh[] = 0;
}

if (checkbox_verify('m3') == 1) {
$ko[] = $sum / $mult;
}
else {
$ko[] = 0;
}

if (checkbox_verify('m4') == 1) {
$sa[] = $sum / $mult;
}
else {
$sa[] = 0;
}

if (checkbox_verify('m5') == 1) {
$di[] = $sum / $mult;
}
else {
$di[] = 0;
}

for ($j = 0; $j < count($ig); $j++) {
$ig_total +=$ig[$j];
$sh_total +=$sh[$j];
$ko_total +=$ko[$j];
$sa_total +=$sa[$j];
$di_total +=$di[$j];
}
//посчитали сумму



echo '<table border=1>';
echo '<tr><td>' . 'Игорь' . '</td><td>' . 'Шурик' . '</td><td>' . 'Коля' . '</td><td>' . 'Саша' . '</td><td>' . 'Дима' . '</td></tr>';
for ($k = 0; $k < count($ig); $k++) {
echo '<tr><td>' . $ig[$k] . '</td><td>' . $sh[$k] . '</td><td>' . $ko[$k] . '</td><td>' . $sa[$k] . '</td><td>' . $di[$k] . '</td></tr>';
echo '<tr><td>' . $ig_total . '</td><td>' . $sh_total . '</td><td>' . $ko_total . '</td><td>' . $sa_total . '</td><td>' . $di_total . '</td></tr>';
}
//вывели таблицу

?>
<form
method="post" action="<?=$_SERVER['PHP_SELF']?>">
Сумма: <input type="text" name="sum" value="<?=$sum?>">
<br>

Игорь<input type="checkbox" name="m1" checked="checked"><br>
Шурик<input type="checkbox" name="m2" checked="checked"><br>
Коля<input type="checkbox" name="m3" checked="checked"><br>
Саша<input type="checkbox" name="m4" checked="checked"><br>
Дима<input type="checkbox" name="m5" checked="checked"><br>
<input
type="submit" value="OKay">
</form>
</body>
</html>



Подскажите кто что сможет. Спасибо



Спустя 25 минут, 13 секунд (25.07.2012 - 23:15) Игорь_Vasinsky написал(а):
храни в сессиях, массивы обнуляются.

Спустя 10 минут, 33 секунды (25.07.2012 - 23:26) ikebastuz написал(а):
Цитата (Игорь_Vasinsky @ 25.07.2012 - 20:15)
храни в сессиях, массивы обнуляются.

А как использовать массив в сессиях? получается массив в массиве

Спустя 12 минут, 28 секунд (25.07.2012 - 23:38) Игорь_Vasinsky написал(а):
<?php
session_start();

if(isset($_POST['send']))
{

for($i=0; $i!=3; $i++)
{
if(!isset($_SESSION['user'][$i]))
$_SESSION['user'][$i] = 0;
else
if
($_POST['user'][$i] == 'on')
$_SESSION['user'][$i]++;
}


}

#For monitoring
#echo '<pre>$_SESSION:' . print_r($_SESSION,1) .'</pre>';

?>

<form action="" method="POST">
<
label for="user[0]">User 1</label>
<
input type="checkbox" name="user[0]"/>
<
br />
<
label for="user[1]">User 2</label>
<
input type="checkbox" name="user[1]"/>
<
br />
<
label for="user[2]">User 3</label>
<
input type="checkbox" name="user[2]"/>
<
br />
<
input type="submit" name="send"/>
</
form>


в итоге сессионный массив такого вида

$_SESSION:Array
(
[user] => Array
(
[0] => 1
[1] => 5
[2] => 1
)

)


И вытащить суммы можно так:

echo 'User 1 : ' . $_SESSION['user'][0].'<br/>';
echo 'User 2 : ' . $_SESSION['user'][1].'<br/>';
echo 'User 3 : ' . $_SESSION['user'][2].'<br/>';


Спустя 4 минуты, 1 секунда (25.07.2012 - 23:42) ikebastuz написал(а):
Цитата (Игорь_Vasinsky @ 25.07.2012 - 20:38)
<?php
session_start();

unset($_SESSION['user1']);

if(isset($_POST['send']))
{

for($i=0; $i!=3; $i++)
{
if(!isset($_SESSION['user'][$i]))
$_SESSION['user'][$i] = 0;
else
if
($_POST['user'][$i] == 'on')
$_SESSION['user'][$i]++;
}


}


echo '<pre>$_SESSION:' . print_r($_SESSION,1) .'</pre>';
?>

<form action="" method="POST">
<
label for="user[0]">User 1</label>
<
input type="checkbox" name="user[0]"/>
<
br />
<
label for="user[1]">User 2</label>
<
input type="checkbox" name="user[1]"/>
<
br />
<
label for="user[2]">User 3</label>
<
input type="checkbox" name="user[2]"/>
<
br />
<
input type="submit" name="send"/>
</
form>


в итоге сессионный массив такого вида

$_SESSION:Array
(
[user] => Array
(
[0] => 1
[1] => 5
[2] => 1
)

)


И вытащить сумму например User 1 можно так:
echo 'User 1 : ' . $_SESSION['user'][1].'<br/>';

спасибо вам огромное

Спустя 1 минута, 22 секунды (25.07.2012 - 23:43) Игорь_Vasinsky написал(а):

Цитата
И вытащить сумму например User 1 можно так:
echo 'User 1 : ' . $_SESSION['user'][1].'<br/>';


см. выше - подкорректировал.....

Спустя 18 часов, 11 минут, 10 секунд (26.07.2012 - 17:55) ikebastuz написал(а):
Дописал. Вроде работает. есть два момента.
1 - после сброса первый раз вводишь данные - они не вводятся. только со 2го раза и дальше идёт норм.
2 - нужно чтобы каждую сумму которую ввёл считалась на всех и выводилась отдельной строкой, а она заменяет предыдущую.



<?php
session_start();
/*if(!isset($_SESSION['user']['count'])) Считалка количества введённых чисел
{
$_SESSION['user']['count'] = 0;
}
*/


if(isset($_POST['destroy']))
{
session_destroy();
header("Location: $_SERVER[PHP_SELF]");
//$_POST['send'] = 1;
}

if(isset($_POST['send'])) //считает множитель на который делить сумму. хз как вставить в цикл, там он уже нужен посчитанный
{
for($i=0; $i!=5; $i++)
{
if($_POST['user'][$i] == 'on')
$mult++;
}


}


echo '<table border=1>';

if (!isset($ex)) //если 1й раз запущено - создаёт заголовки таблицы
{
echo '<tr><td>' . ' Игорь ' . '</td><td>' . ' Шурик ' . '</td><td>' . ' Коля ' . '</td><td>' . ' Саша ' . '</td><td>' . ' Дима ' . '</td></tr>';
$ex = 1;
}

if(isset($_POST['send']))
{
echo '<tr>';
//$_SESSION['user']['count']++;
for($i=0; $i!=5; $i++)
{
if(!isset($_SESSION['user'][$i]))
$_SESSION['user'][$i] = 0;
else
if
($_POST['user'][$i] == 'on')
{
$_SESSION['user'][$i] = $_SESSION['user'][$i] + $_POST['sum'] / $mult; //прибавляет к тому что есть сумму деленную на множитель
$_SESSION['sep'][$i] = $_POST['sum'] / $mult; //считает просто сумму деленную на множитель, чтобы вывести в таблицу
echo '<td>' . round($_SESSION['sep'][$i], 2) . '</td>';
}
else
{
echo '<td>' . '0' . '</td>';
}
}

echo '</tr>';
}
echo '<tr><td>TOTAL</td></tr>'; //итого
echo '<tr><td>' . round($_SESSION['user'][0], 2) . '</td><td>' . round($_SESSION['user'][1], 2) . '</td><td>' . round($_SESSION['user'][2], 2) . '</td><td>' . round($_SESSION['user'][3], 2) . '</td><td>' . round($_SESSION['user'][4], 2) . '</td></tr>';

//echo $_SESSION['user']['count'];

?>

<form
action="" method="POST">

<spacer
type="block" width="10" height="10" />
<label
for="sum">Сумма: </label>
<input
type="text" name="sum" value="<?=$sum?>" onclick="setButton(this);">
<br />
<label
for="user[0]">Игорь</label>
<input
type="checkbox" name="user[0]"/ checked="checked">
<br />
<label
for="user[1]">Шурик</label>
<input
type="checkbox" name="user[1]"/ checked="checked">
<br />
<label
for="user[2]">Коля</label>
<input
type="checkbox" name="user[2]"/ checked="checked">
<br />
<label
for="user[3]">Саша</label>
<input
type="checkbox" name="user[3]"/ checked="checked">
<br />
<label
for="user[4]">Дима</label>
<input
type="checkbox" name="user[4]"/ checked="checked">
<br />
<input
type="submit" name="send" value="Добавить"/>
<input
type="submit" name="destroy" value="Сбросить"/>

</form>




Заранее премного благодарен.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.