Короче приехал на собеседование с ночёвкой за тысячу км., после собеседования мне дали 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;