<?php
session_start();
require('connect.php');
$fsmsg = "";
if (!empty($_POST['username']) AND !empty($_POST['password'])) {
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='{$username}'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$row = mysqli_fetch_assoc($result);
if (isset($row['ban']) AND $row['ban'] == 1){
$fsmsg = "Пользователь заблокирован";
}
else if (isset($row['password']) AND $row['password'] == $password) {
$_SESSION['username'] = $username;
$fsmsg = "Вы вошли под пользователем";
if (isset($row['role']) AND $row['role'] == "admin") {
$fsmsg = "Вы вошли под админом";
}
} else {
$fsmsg = "Ошибка";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
<title>Авторизация</title>
</head>
<body>
<div class="container">
<?php
if (isset($_SESSION['username'])) {
$username = $_SESSION['username'];
echo("Hello," . $username . ".<br>\n");
if(!empty($fsmsg)) echo("<h2>{$fsmsg}</h2><br>\n");
echo("<a href='logout.php' class='btn btn-lg btn-primary'>Выйти</a>");
}
else
{
?>
<form class="form-signin" method="POST">
<?php if(!empty($fsmsg)) echo("<h2>{$fsmsg}</h2><br>\n"); ?>
<h2>Авторизация</h2>
<input type="text" name="username" class="form-control" placeholder="Username" required>
<input type="password" name="password" class="form-control" placeholder="Password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Авторизоваться</button>
<a href="index.php" class="btn btn-lg btn-primary btn-block">Зарегистрироваться</a>
</form>
</div>
<?php
}
?>
</body>
</html>
package "handlers"
import "database/sql"
type User struct {
db *sql.DB
}
func NewUser(db *sql.DB) *User {
return &User{db: db}
}
func (u *User) Add(w http.ResponseWriter, r *http.Request) {
// u.db - доступ к db
}
func (u *User) GetInfo(w http.ResponseWriter, r *http.Request) {
// u.db - доступ к db
}
package main
import "handlers"
func main(){
//...
//установление соединения к postgres
DB, err = ConnectToDB()
userHandler := handlers.NewUser(DB)
http.HandleFunc("/adduser/", userHandler.Add)
http.HandleFunc("/getinfo/", userHandler.GetInfo)
http.ListenAndServe(":8080", nil)
}
configurateLogger()
у вас бесполезная. Она только оперирует внутренней переменной logger
. Чтобы переменную было заметно глобальней нужно объявлять ее в более широком контексте, снаружи функции(а не внутри оператором :=
). А что бы ее было видно в других пакетах она должна именоваться с большой буквы var Logger = configurateLogger()
и все это добро нужно импортировать в другие пакеты. UPD. Это пример если логирование всех ошибок приложения в одном стиле производится, но мне интересно у кого-нибудь был проект где требовалось несколько разных логеров?
func main() {
logger := logrus.New()
sites := []string{
"example.com",
"google.com",
}
DoParse(sites, logger)
}
func DoParse(sites []string, logger logrus.FieldLogger) {
for _, site := range sites {
logger.Infof("Start parse site: %s", site)
siteLogger := initLoggerForSite(site)
parseSite(site, siteLogger)
}
}
SELECT increment FROM information_schema.sequences where sequence_name = 'example' and sequence_schema = 'public';
select increment_by from pg_sequences where schemaname = 'public' and sequencename = 'example';
select * from public.example;
Diff:
--- Expected
+++ Actual
@@ -2,5 +2,5 @@
(int) 1,
- (int) 2,
(int) 3,
- (int) 4
+ (int) 5,
+ (int) 7
}
assert.Equal(t, struct1, struct2)