Короче приехал на собеседование с ночёвкой за тысячу км., после собеседования мне дали 1 день испытательного срока. Сказали написать гостевую книгу на PHP. Потом я сдал работу. Они сказали мол, мы вам перезвоним, а потом пришёл почему-то мне отказ. Вот код:
index.php:
<?php require_once('config.php'); require_once('gblib.php'); $int_sel_page = 1; $int_max_pages = 1; $arr_conn = unserialize(CONNECTION); $obj_mysql = connection_open($arr_conn['server'], $arr_conn['username'], $arr_conn['password'], $arr_conn['database']); $int_max_pages = get_anz_eintaege($obj_mysql); if($_SERVER['REQUEST_METHOD'] === 'GET') { if(isset($_GET['page'])) { $int_sel_page = $_GET['page']; } if(isset($_GET['delete_id'])) { if(!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); exit; } else { $arr_admin = unserialize(ADMINISTRATOR); if($_SERVER['PHP_AUTH_USER'] == $arr_admin['user'] && md5($_SERVER['PHP_AUTH_PW']) == $arr_admin['password'] && isset($_GET['delete_id'])) { loesche_eintrag($obj_mysql, $_GET['delete_id']); } } } } if($_SERVER['REQUEST_METHOD'] === 'POST') { if(!isset($_POST['name'])) exit; if(!isset($_POST['email'])) exit; if(!isset($_POST['nachricht'])) exit; neu_eintrag($obj_mysql, $_POST['name'], $_POST['email'], $_POST['nachricht']); header('Location: index.php'); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Гостевая книга</title> <style> .paginator { color:blue; text-decoration:underline; } .paginator:hover { color:blue; text-decoration:none; } .paginator:visited { color:blue; text-decoration:none; } .page_selected { color:red; text-decoration:none; } #content { padding:7px 7px; } .field { width:200px; padding:2px 2px;} .btn { width:75px; height:25px; } .required { color:red; } .lnk2 { color:red; text-decoration:none; } .lnk2:hover { color:red; text-decoration:underline; } .lnk2:visited { color:red; text-decoration:none; } </style> <script type="text/javascript" language="javascript"> function convert_email(el) { } function is_required_clear(str_required_id) { var el_req = document.getElementById(str_required_id); el_req.innerHTML = ''; } function is_required(str_field_id, str_required_id, str_char) { var el_field_id = document.getElementById(str_field_id); var el_req = document.getElementById(str_required_id); if(!el_field_id.value) { el_req.innerHTML = str_char; return false; } return true; } function _submit(str_id) { var r = 0; is_required_clear('req_name'); is_required_clear('req_email'); is_required_clear('req_nachricht'); if(!is_required('field_name', 'req_name', '*')) r = 1; if(!is_required('field_email', 'req_email', '*')) r = 2; if(!is_required('field_nachricht', 'req_nachricht', '*')) r = 3; if(r == 0) document.getElementById(str_id).submit(); } </script> </head> <body> <div id="content"> <h1>Гостевая книга</h1> <br> <br> <form id="form" method="post" action="index.php"> <input type="hidden" name="page" value="<?= $int_sel_page; ?>"> Имя<span id="req_name" class="required"></span>: <br /> <input class="field" type="text" id="field_name" name="name" /> <br /> <br /> E-Mail<span id="req_email" class="required"></span>: <br /> <input class="field" type="text" id="field_email" name="email" /> <br /> <br /> Сообщение<span id="req_nachricht" class="required"></span>: <br /> <textarea name="nachricht" id="field_nachricht" cols="26" rows="10"></textarea> <br /> <br /> <input type="button" class="btn" value="Отправить" onclick="_submit('form')" /> </form> <br /> <br /> <br /> <table border="0"> <?php $int_limit = ITEMS_PER_PAGE; $int_offset = ($int_sel_page - 1) * ITEMS_PER_PAGE; $obj_arr_results = get_einraege($obj_mysql, $int_offset, $int_limit); while($arr_row = $obj_arr_results->fetch_assoc()): ?> <tr valign="top"> <td>Имя:</td> <td><?= $arr_row['name']; ?> <a class="lnk2" href="index.php?delete_id=<?= $arr_row['id']; ?>">×</a></td> </tr> <tr valign="top"> <td>Дата:</td> <td><?= date('d.m.Y H:i', strtotime($arr_row['datum'])); ?></td> </tr> <tr valign="top"> <td>E-Mail:</td> <td><a href="#" onclick="location.href='mailto:<?= $arr_row['email']; ?>&subject=AW:<?= urlencode(substr($arr_row['eintrag'], 0, 15)); ?>'"><?= hide_email($arr_row['email']); ?></a></td> </tr> <tr valign="top"> <td>Сообщение:</td> <td><?= $arr_row['eintrag']; ?></td> </tr> <tr><td><br><br></td></tr> <?php endwhile; ?> </table> <br /> <br /> <?php echo paginator_render(ITEMS_PER_PAGE, $int_max_pages, $int_sel_page); ?> </div> </body> </html>
gblib.php:
<?php function IsNull($i) { return (!isset($i) || is_null($i)); } function hide_email($str_email) { $str_new_email = ''; for($i=0; $i<strlen($str_email); $i++) { if($str_email[$i] == '@') $str_new_email .= '<span>@</span>'; else if($str_email[$i] == '.') $str_new_email .= '<span>.</span>'; else $str_new_email .= '<span>' . $str_email[$i] . '</span>'; } return $str_new_email; } function connection_open($str_server, $str_username, $str_password, $str_database) { if(IsNull($str_server)) return; if(IsNull($str_username)) return; if(IsNull($str_database)) return; $obj_mysql = new mysqli($str_server, $str_username, $str_password, $str_database); if($obj_mysql->connect_errno) { echo "$obj_mysql->connect_error"; return FALSE; } return $obj_mysql; } function get_anz_eintaege($obj_conn){ if(IsNull($obj_conn)) return; $int_max_pages = 1; $obj_stmt = $obj_conn->prepare('SELECT COUNT(*) AS cnt FROM eintraege'); $obj_result = $obj_stmt->execute(); $obj_result2 = $obj_stmt->get_result(); if($arr_row = $obj_result2->fetch_assoc()) { $int_max_pages = $arr_row['cnt']; } return $int_max_pages; } function neu_eintrag($obj_conn, $str_name, $str_email, $str_nachricht) { if(IsNull($obj_conn)) return; if(IsNull($str_name)) return; if(IsNull($str_email)) return; if(IsNull($str_nachricht)) return; $str_nachricht = nl2br(strip_tags($str_nachricht)); $str_now = date('Y-m-d H:i:s'); $obj_stmt = $obj_conn->prepare('INSERT INTO eintraege(ip,name,email,datum,eintrag) VALUES(?,?,?,?,?)'); $obj_stmt->bind_param('sssss', $_SERVER['REMOTE_ADDR'], strip_tags($str_name), strip_tags($str_email), strip_tags($str_now), $str_nachricht); $obj_stmt->execute(); } function loesche_eintrag($obj_conn, $int_id) { if(IsNull($obj_conn)) return; $obj_stmt = $obj_conn->prepare('DELETE FROM eintraege WHERE id=?'); $obj_stmt->bind_param('i', $_GET['delete_id']); $obj_stmt->execute(); } function get_einraege($obj_conn, $int_offset, $int_limit) { if(IsNull($obj_conn)) return; $obj_stmt = $obj_conn->prepare('SELECT id, name, email, datum, eintrag FROM eintraege ORDER BY datum DESC LIMIT ?,?'); $obj_stmt->bind_param('ii', $int_offset, $int_limit); $obj_result = $obj_stmt->execute(); $obj_arr_results = $obj_stmt->get_result(); return $obj_arr_results; } function paginator_render($int_items_per_page, $int_counts, $int_sel_page) { $str_render = ''; for($i=1; $i<ceil($int_counts/$int_items_per_page)+1; $i++) { $str_render .= " "; $str_text = $i == $int_sel_page ? "[$i]" : $i; $str_class = $i == $int_sel_page ? 'page_selected' : 'paginator'; $str_render .= "<a class=\"$str_class\"href=\"index.php?page=$i\">$str_text</a>"; $str_render .= " "; } return $str_render; } ?>
config.php:
<?php define('CONNECTION', serialize(array('server' => 'localhost', 'database' => 'guesbook2', 'username' => 'root', 'password' => ''))); define('ADMINISTRATOR', serialize(array('user' => 'Administrator', 'password' => md5('a11234')))); define('ITEMS_PER_PAGE', 10); ?>
SQL:
CREATE TABLE IF NOT EXISTS `guestbook`.`eintraege` ( `id` BIGINT NOT NULL AUTO_INCREMENT , `ip` VARCHAR(80) NOT NULL , `name` VARCHAR(255) NOT NULL , `email` VARCHAR(255) NOT NULL , `datum` DATETIME NOT NULL , `eintrag` TEXT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;