Проверка на вшивость..:)

Статус
В этой теме нельзя размещать новые ответы.

garizlo

Постоялец
Регистрация
16 Сен 2006
Сообщения
104
Реакции
26
Подскажите, начал изучать php и потребовалось сделать выбор метода оплаты товара.

Правильно ли я сделал, или этот код можно как то укоротить, или поправить???

Форма выбора:
HTML:
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' \>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' \>
<title>Выберите метод оплаты.</title>
</head>
<body>
Способы оплаты (Выберите способ оплаты):<br>
<form name="form1" method="get" action="switch.php">
  <p>
    <label>
      <input type="radio" name="sposob" value="b" id="sposob_0">
      Оплата через банк</label>
    <br>
    <label>
      <input type="radio" name="sposob" value="p" id="sposob_1">
      Оплата наложенным платежем при получении на почте</label>
    <br>
    <label>
      <input type="radio" name="sposob" value="w" id="sposob_2">
      Оплата через Western Union</label>
    <br>
  </p>
<input type="submit" >
</form>
</body>
</html>
Обработчик:
PHP:
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' \>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' \>
<?php 
$title1 = "Вы выбрали оплату через Банк";
$title2 = "Вы выбрали оплату товара при получении на Почте";
$title3 = "Вы выбрали оплату через Western Union";
$title4 = "Вы не выбрали способ оплаты. Выберите способ оплаты";

if ($sposob == b) { $title = $title1; }
if ($sposob == p) { $title = $title2; }
if ($sposob == w) { $title = $title3; }
if ($sposob == "") { $title = $title4; }
?>
<title><?php echo $title; ?></title>
</head>
<body>
<?php
switch ($sposob) 
{
    case "b":
    echo "Чтобы оплатить через Банк....";
    break;
    
    case "p":
    echo "Чтобы оплатить через почту....";
    break;
    
    case "w":
    echo "Чтобы оплатить через Western Union....";
    break;

    default:
    echo "Вы не выбрали способ оплаты";
    break;
}
?>
</body>
</html>
 
1. ну для читабельности можешь убрать хтмл тэги в отдельный скрипт и выводить функцией.
2. сделай все через один скрипт, а не в два, будет проще, посылаешь запрос method=POST и потом или в начале скрипта или в конце,как нравится, смотри подан ли запрос или нет

PHP:
if(isset($_POST['sposob'])){
   тут то что у тебя в свич.пхп
}

да и я считаю что можно убрать break; т.к. если тебе нужно будет еще какую нибуть информацию выводить, а break; остановит скрипт. Попробуй сделать примерно так

PHP:
$proverka=1;

if ($sposob == b) {
$proverka=0;
echo "Вы выбрали оплату через Банк";
}
...
...
if($proverka){
продолжаем скрипт
}
 
испоьзуй в форме method="POST"
Обработчик:
PHP:
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' \>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' \>
<?php
switch ($_POST['sposob']) 
{
    case "b":
    $str = "Чтобы оплатить через Банк....";
    $title = "Вы выбрали оплату через Банк";
    break;
    
    case "p":
    $str = "Чтобы оплатить через почту....";
    $title = "Вы выбрали оплату товара при получении на Почте";
    break;
    
    case "w":
    $str = "Чтобы оплатить через Western Union....";
    $title = "Вы выбрали оплату через Western Union";
    break;

    default:
    $str = "Вы не выбрали способ оплаты";
    $title = "Вы не выбрали способ оплаты. Выберите способ оплаты";
    break;
}
?>
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $str; ?>
</body>
</html>

break убирать не нужно, т.к. ... вообщем что бы уяснить -убери и потестируй =) иначе не поймешь и не научишься.
 
  • Заблокирован
  • #4
можно вообще без break обойтись - через массивы сделать..
например:
PHP:
<?php

$a = array();

$a['b']['title']   =  "Вы выбрали оплату через Банк";
$a['b']['mess']    =  "Чтобы оплатить через Банк....";
$a['p']['title']   =  "Вы выбрали оплату товара при получении на Почте";
$a['p']['mess']    =  "Чтобы оплатить через почту....";
$a['w']['title']   =  "Вы выбрали оплату через Western Union";
$a['w']['mess']    =  "Чтобы оплатить через Western Union....";
$a['def']['title'] =  "Вы не выбрали способ оплаты. Выберите способ оплаты";
$a['def']['mess']  =  "Вы не выбрали способ оплаты";


if(!array_key_exists($sposob)) $sposob = 'def';

?>
<title><?=$a[$sposob]['title']?></title>
</head>
<body>
<?=$a[$sposob]['mess']?>
</body>
</html>
 
а если нужны еще действия? =)
зачем так все сложно?
 
  • Заблокирован
  • #6
а если нужны еще действия? =)
зачем так все сложно?
какая задача - ткаое решение.. :) кода заметно меньше - уже плюс.. к тому же для добавления новых оплат достаточно просто увеличить массив.. да и проверка только одна..
вообще никто не мешает добавить в массив имя нужной функции и вызвать ее.. типа $a[$sposob]['fn'](); (с проверкой на наличие, естественно)..
 
Жесть!
Еще можно в базу положить и выбирать действие, еще можно XML парсить. =)
 
Если нет каких то особых условий, то в этом случае нет смысла обработчик выносит в отдельный файл, это только усложняет код.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху