Я еще совсем зеленый, несколько дней учу 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:Array И вытащить сумму например 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 - нужно чтобы каждую сумму которую ввёл считалась на всех и выводилась отдельной строкой, а она заменяет предыдущую.
Заранее премного благодарен.
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>
Заранее премного благодарен.