#php #html
Вопрос:
Я написал веб-сайт на php/html, и мне нужно добавить на него еще две вещи..
- Программа не должна отображать дополнительные функции, если пользователь не выбрал ни одну из дополнительных опций задач.
- Если установлен флажок сохранить эти сведения и нажата кнопка Рассчитать зарплату, сведения (общая зарплата, дополнительные услуги, дата и время) должны храниться в одном файле cookie, срок действия которого истекает через 1 неделю. Этот файл cookie должен иметь возможность хранить историю расчетов заработной платы в одном файле cookie.
и это моя программа:
lt;htmlgt; lt;bodygt; lt;?php $none=0; $cookie_name='historyDetails'; $cookie_value='[]'; $message=''; date_default_timezone_set('Asia/Bahrain'); setcookie($cookie_name, $cookie_value, time() (86400 * 30) , "/"); if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_POST['calculate_salary'])) { // get all value of form in post variable $details=$_POST; $basic=0; $extra_tags=''; // if basic salary is not given set zero if(isset($details['basic'])amp;amp; !empty($details['basic'])) { $basic=$details['basic']; } $extra=[]; // if extra values are unchecked the set as empty else add values if (isset($details['extra'])) { foreach ($details['extra'] as $value) { // split extra value by hash $temp=explode("#",$value); // create associative array for future operations $extra[(integer)$temp[0]]=$temp[1]; // for printing the list $extra_tags=$extra_tags.'lt;ligt;'.$temp[1].'lt;/ligt;'; } } // set BD according to their material status else zero $BD=0; switch($details['ms']) { case 'single': $BD=50; break; case 'married': $BD=100; } // calculate total $total=$basic array_sum(array_keys($extra)) $BD; // store cookies $cookie_values=(array)json_decode($_COOKIE[$cookie_name]); $history_value=['basic'=gt;$basic,'extra_sum'=gt;$extra,'ms'=gt;$BD,'total'=gt;$total,'date'=gt;date("Y-m-d"),'time'=gt; date("h:i:sa")]; array_push($cookie_values,$history_value); setcookie($cookie_name, json_encode($cookie_values), time() (86400 * 30), "/"); // Generate html for display $message='lt;br/gt;lt;br/gt;lt;br/gt;lt;ulgt; lt;ligt;Salary Details: Total Salary is BD '.(string)$total.'lt;/ligt; lt;ligt;Extras:lt;/ligt; lt;olgt; '.$extra_tags.' lt;/olgt; lt;u1gt;'; } elseif (isset($_POST['view_history'] )) { $histories=(array)json_decode($_COOKIE[$cookie_name]); $history_data=''; foreach ($histories as $history) { $history=(array)$history; $extra_value=''; foreach((array)$history['extra_sum'] as $extra) { $extra_value=$extra_value.'lt;ligt;'.$extra.'lt;/ligt;'; } $history_data=$history_data.' lt;ligt; Date: '.(string)$history['date'].' Time: '.(string)$history['time'].'lt;br/gt; lt;ulgt; lt;ligt;Salary Details: Total Salary is BD lt;bgt;'.(string)$history['total'].'lt;/bgt; lt;/ligt; lt;ligt;Extras: lt;/ligt; lt;olgt; '.$extra_value.' lt;/olgt; lt;/ulgt; lt;/ligt;lt;br/gt;'; } $message='lt;br/gt; lt;h3gt;History details of your old salary calculationslt;/h3gt;lt;br/gt;lt;br/gt; lt;olgt;'.$history_data.'lt;/olgt;'; } } ?gt; lt;form method='post' action="lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?gt;"gt; Basic Salary lt;input type='number' name='basic' /gt;lt;br /gt; Marital Status: lt;br /gt; lt;input type='radio' name='ms' value='single' checked /gt; Single lt;br /gt; lt;input type='radio' name='ms' value='married' /gt; Married lt;br /gt; Extra: lt;br /gt; lt;input type='checkbox' name="extra[]" value="200#Work on Weekend" /gt; Work on Weekend - BD 200lt;br /gt; lt;input type='checkbox' name="extra[]" value="100#Work Night Shift" /gt; Work Night Shift - BD 100lt;br /gt; lt;input type='checkbox' name="extra[]" value="400#Work Abroad" /gt; Work Abroad - BD 400lt;br /gt; lt;br /gt;lt;br /gt; lt;input type='checkbox' name="save" value="historyDetails" /gt; save this detailslt;br /gt; lt;br /gt; lt;input type='submit' name='calculate_salary' value='Calculate Salary' /gt; lt;input type='submit' name='view_history' value='View History' /gt; lt;/formgt; lt;?php echo($message); ?gt; lt;/bodygt; lt;/htmlgt;
Ответ №1:
Этот сайт не является службой написания кода или проверки кода, вы должны написать минимальный воспроизводимый пример конкретного вопроса или проблемы.
Дополнительные услуги: вы должны просто проверить, присутствуют ли дополнительные услуги или нет, для простого примера проверьте, содержит ли переменная что-либо:
$history_data = 'lt;ulgt;lt;ligt;...lt;/ligt;'.($extra_value?'lt;ligt;Extras:lt;/ligt; lt;olgt;'.$extra_tags.'lt;/olgt;':'').'lt;/ulgt;';
или
$message = 'lt;ulgt;lt;ligt;...lt;/ligt;'.($extra_tags?'lt;ligt;Extras:lt;/ligt;lt;olgt;'.$extra_value.'lt;/olgt;':'').'lt;/ulgt;';
Файлы cookie: при выводе любого текста заголовок уже был отправлен, поэтому вы больше не можете выполнять какие-либо функции php, которые управляют заголовком, более конкретно: lt;htmlgt;lt;bodygt;
это должно быть написано после setcookie
. Вы setcookie
используете одно и то же имя файла cookie несколько раз, поэтому отправляете его дважды (в случае отправки формы), оно все равно будет работать, но вы должны знать об этом. В строке 10 setcookie
абсолютно не нужно, она перезаписывает значение в пустой массив json.
Сохранение файлов cookie при установке флажка «сохранить»: в том месте, где вы // store cookies
поставили блок: if(isset($_POST['save'])){ ... setcookie(...); }
флажки не отправляются, когда они не установлены, так что этого достаточно.
Еще одна вещь: action="lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?gt;"
в этом нет необходимости, действие по умолчанию выполняется самостоятельно по умолчанию, в случае, если вы все еще хотите, чтобы оно было там, поместите туда второй параметр ENT_QUOTES
, потому что его значение атрибута html не находится между тегами.