Регистрация Событий


Я новичок в мире программирования, в PHP как и в XHTML. Как моя первая попытка на объектно-ориентированного программирования, я собрал основной регистрационный бланк, который предназначен, чтобы служить в качестве средства для сбора сведений о пользователе.

Что эта форма не является следующим;

  • Сбора информации-это файл или базу данных, когда я еще не набрал достаточно опыта о базах данных, сессий, куки и файлы.
  • Я посмотрел через onChange, после заполнения дней меню динамически, но презираю форме перегрузке и, следовательно, избежать делать так. Я знаю, я могу использовать, однако Аякс учитывая мое незнание, я надеялся, что кто-то может посоветовать другие варианты только с JavaScript.
  • Санировать данных с помощью htmlentities или функции htmlspecialchars.

Что я хотел бы

  • Я бы признателен за любые конструктивные критика, что я могу улучшить, что я мог бы сделать лучше

Код XHTML

<?php

require_once('includes/base.php');
require_once('functions.php');

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="keywords" content="" />
    <meta name="description" content= "" />
    <meta name="author" content="" />
    <title>Event Details</title>

    <link rel="stylesheet" type="text/css" href="web.css" />
</head>
<body>
    <h1>Details</h1>

    <p>Please provide us with your details so that we can confirm  your booking</p>

    <div>
        <?php
            $eventform = new eventform();
            $eventform -> validateform();
        ?>

    <fieldset>
        <legend>Your details</legend>
            <form name="eventdetails" method="post" action="event.php">
                <label for="fname">First Name</label>
                    <input type="text" name="fname" value="<?php echo isset($_POST['fname']) ? $_POST['fname'] : ''; ?>" tabindex="1" id="fname" />

                <label for="lname">Last Name</label>
                    <input type="text" name="lname" value="<?php echo isset($_POST['lname']) ? $_POST['lname'] : ''; ?>" tabindex="2" id="lname" />

                <label for="email">Email</label>
                    <input type="text" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : ''; ?>" tabindex="3" id="email" />

                <label for="cuisine">Cuisine</label>

                    <?php

                        $eventform = new eventform();
                        $eventform -> radiobuttons('cuisine');

                    ?>

                <label for="eventperiod">Please select an event day</label>

                    <?php

                        $eventform = new eventform();

                    ?>

                    <select name="eventmonth" tabindex="8" id="eventmonth">

                    <?php

                        echo $eventform -> dropdown('months');
                    ?>

                    </select>

                    <select name="eventday" tabindex="7" id="eventday">

                    <?php
                        echo $eventform -> dropdown('days');

                    ?>

                    </select>


                    <select name="eventyear" tabindex="9" id="eventyear">

                    <?php


                        echo $eventform -> dropdown('years');

                    ?>

                    </select>

                <label>
                    <input type="submit" name="register" value="register" tabindex="10" id="register" />
                    <input type="reset" name="reset" value="reset" tabindex="11" id="reset" />
                </label>
            </form>
    </fieldset>     
</body>
</html>

Код CSS

body{

font-family: arial, verdana, sans-serif;
font-size: 0.8em;
font-weight: normal;
font-style: normal;

}

h1 {

}

p {

}

fieldset {
border: 1px solid #D9D9D9;
background-color: #F5F5F5;

}

fieldset legend {

color: #FFFFFF;
background-color: #8B8378;
padding: 5px;
padding-right: 9px;
padding-left: 9px;

}

label {

display: block;
padding: 5px;

}

label.cuisine {

display: inline;

}

Включает Базы

<?php

$parentdirectory = dirname(dirname(__FILE__));

define('BASE_DIRECTORY', $parentdirectory);
ini_set('include_path', $parentdirectory.'/includes/');
?>

Включает В Себя - Класс

<?php

class eventform {

    //Declare data members/properties
    private $fname,
        $lname,
        $email,
        $cuisine,
        $eventday,
        $timezone,
        $eventmonth;


    //Generate months
    public function eventmonths($startingmonth=1, $endingmonth=12) {

    //Default timezone
    $this->timezone = date_default_timezone_set('UTC');

    //Loop through months
        $months = range($startingmonth, $endingmonth);

        $returnmonths = '';
        foreach($months as $key) {

            $returnmonths .= date('F', mktime(0, 0, 0, $key)).',';  
        }

        return rtrim($returnmonths, ',');
    }

    //Generate years
    public function eventyears() {

        //Get current year
        $year = date('Y');

        //Loop through years
        $startyear = $year;

        // $endyear = date('Y', strtotime('+5 years'));
        $endyear = date('Y', mktime(0,0,0,12,30,$year+5));

        $returnyears = '';
        for($startyear; $startyear < $endyear; $startyear=$startyear+1) {

            $returnyears .= $startyear.',';
        }

        return rtrim($returnyears, ',') ;
    }

    //Loop through days for a specific month and year
    public function eventdays($month, $year) {

        // return date('t', strtotime($someYear . '-' . $someMonth . '-01'));
        // return date('t', strtotime($someYear . '-' . $someMonth ));
        // $numberofdays = date('t', strtotime($Year. '-' .$Month));
        $numberofdays = date('t', mktime(0,0,0,$month,1,$year));

        $startdays = 1;
        $returndays = '';

        for($startdays; $startdays <= $numberofdays; $startdays=$startdays+1) {

            $returndays .= $startdays.',';

        }

        return rtrim($returndays, ',');
        // return substr($returndays, 0, -1);
    }

    //Define the type of dropdown
    public function dropdown($type) {

        switch($type) {

            case('days'):

                $stringdays = $this->eventdays(1, 2011);
                $arraydays = explode(',', $stringdays);

                foreach($arraydays as $day) {
                    echo '<option value="'.$day.'">'.$day.'</option>';
                }
            break;

            case('months'):

                $stringmonths = $this->eventmonths();
                $arraymonths = explode(',', $stringmonths);

                foreach($arraymonths as $month) {

                    echo '<option value="'.date('n', strtotime($month)).'">'.$month.'</option>';
                }
            break;

            case('years'):

                $stringyears = $this->eventyears();
                $arrayyears = explode(',', $stringyears);

                foreach($arrayyears as $key) {

                    echo '<option value="'.$key.'">'.$key.'</option>';

                }
            break;
        }           

    }


    //Define the type of radiobuttons
    public function radiobuttons ($type) {

        switch($type) {

            case('cuisine'):

            $cuisines = array('italian', 'russian', 'malaysian');
            $cuisinetype = array_combine(range(1, count($cuisines)), $cuisines);

                foreach($cuisinetype as $key => $value) {

                    if(isset($_POST['register']) && $_POST['register'] == 'register') {
                        if(isset($_POST['cuisine']) && $_POST['cuisine'] == $value) {

                            $status = 'checked=checked';
                        }

                        else {
                            $status = '';
                        }
                    }

                    else {

                        $status = '';
                    }

                    echo '<input type="radio" name="cuisine" value="'.$value.'" tabindex="'.$key.'" id="'.$value.'" '.$status.'>',
                        '<label for="'.$value.'" class="cuisine">'.ucfirst($value).'</label>';

                }
            break;
        }

    }


    //Validate form
    public function validateform() {

        if(isset($_POST['register']) && $_POST['register'] == 'register') {

            $this->fname = isset($_POST['fname']) ? $_POST['fname'] : '';
            $this->lname = isset($_POST['lname']) ? $_POST['lname'] : '';
            $this->email = isset($_POST['email']) ? $_POST['email'] : '';
            $this->cuisine = isset($_POST['cuisine']) ? $_POST['cuisine'] : '';
            $this->eventday = isset($_POST['eventday']) ? $_POST['eventday'] : '';

            $errormsg = array();

            if(empty($this->fname)) {
                $errormsg[0] = 'Please enter your first name';
            }

            if(empty($this->lname)) {
                $errormsg[1] = 'Please enter your last name';
            }

            if(empty($this->email)) {
                $errormsg[2] = 'Please specify an email address';
            }

            if(empty($this->cuisine)) {
                $errormsg[3] = 'Please select a cuisine';
            }

            if(empty($this->eventday)) {
                $errormsg[4] = 'Please select an event day';
            }

            foreach($errormsg as $key => $value) {  

                echo $value.'<br />';
            }


            //Basic email validation        
            if(!empty($this->email)) {

                if(!preg_match('/^[a-zA-Z0-9_\.\-]+[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9_\.\-]+\.[a-zA-Z]{1,6}$/', $this->email)) {

                echo 'Please enter a valid email address';

                }
            }

        }

    }
}

?>


Комментарии
2 ответа

Переезд в ответ на пост некоторые примеры кода

файл класса:

public function radiobuttons ($type) {
switch($type) {
case('cuisine'):
$cuisines = array('italian', 'russian', 'malaysian');
$cuisinetype = array_combine(range(1, count($cuisines)), $cuisines);
$output = '';
foreach($cuisinetype as $key => $value) {
if(isset($_POST['register']) && $_POST['register'] == 'register') {
if(isset($_POST['cuisine']) && $_POST['cuisine'] == $value) {
$status = 'checked=checked';
}
else {
$status = '';
}
}
else {
$status = '';
}
$output .= '<input type="radio" name="cuisine" value="'.$value.'" tabindex="'.$key.'" id="'.$value.'" '.$status.'>',
'<label for="'.$value.'" class="cuisine">'.ucfirst($value).'</label>';
}
return $output;
}
//code here would run with a break
// but not run with a return
// so when reviewing the code you'd need to scroll down and check here if you use a break
// but not if you use a return
}

файл XHTML :

  <?php
//makes it clear that it's outputing text
echo $eventform -> radiobuttons('cuisine');
?>

1
ответ дан 11 мая 2011 в 12:05 Источник Поделиться


  • Почему вы создаете класс eventform 3 раза в XHTML? Я думаю, одного достаточно.

  • Это классический пример XSS-атаки, не делай этого. Использовать функции htmlspecialchars() , чтобы избежать возможных HTML-код.

  • Вместо $errormsg[0] = '...' вы можете просто написать $errormsg[] = '...' в данном случае на PHP добавить свое сообщение в конец массива. Также это исключает из числа магия в вашей программе.

Обновлено:

1
ответ дан 9 мая 2011 в 01:05 Источник Поделиться