−1
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
<?php include "init.php"; ?>
<?php
if(trim($_GET['mode'])=='ajax'){
header('Content-Type: application/json; charset=utf-8');
if(trim($_POST['action'])==htmlspecialchars(trim($_GET['script']))){
$result=array();
$result['errors']=array();
if(trim($_POST['email'])==''){
$result['errors']['email']=l('login_error_email_empty');
} else {
$check=mysql_query("SELECT * FROM `users` WHERE `email`='"._F($_POST['email'])."' OR (`phone`!='' AND `phone`='"._F(preg_replace('/\D/', '', $_POST['email']))."');");
if(mysql_num_rows($check)){
$user=mysql_fetch_assoc($check);
} else {
$result['errors']['email']=l('login_error_email_inexists');
}
}
if(trim($_POST['password'])==''){
$result['errors']['password']=l('login_error_password_empty');
} elseif(mysql_num_rows($check) && $user['password']!=md5(trim($_POST['password']))){
$result['errors']['password']=l('login_error_password_incorrect');
} elseif($user['active']=='0'){
$result['errors']['form']=l('login_error_account_inactive');
} elseif($user['active']=='2'){
$result['errors']['form']=l('login_error_account_removed');
} elseif($user['active']=='3'){
$result['errors']['form']=l('login_error_account_banned');
}
if(count($result['errors'])==0){
$_SESSION['userid']=$user['userid'];
mysql_query("UPDATE `users` SET `login_time`='".$time."' WHERE `userid`='".$_SESSION['userid']."';");
$result['status']='success';
} else {
$result['status']='error';
}
echo json_encode($result);
}
exit;
}
?>
<?php
$pagetitle=l('login_title')." • ".$config['sitename'];
$pagedesc=$config['description'];
?>
<?php
if($m){ include "m-login.php"; exit; }
?>
<?php include "inc/header.php"; ?>
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<h3 class="special-title"><?php echo l('login_title'); ?></h3>
<div class="auth-box">
<form action="/<?php echo htmlspecialchars(trim($_GET['script'])); ?>/" method="POST" autocomplete="off" class="ajax-form" data-callback="loginCallBack">
<input type="hidden" name="action" value="<?php echo htmlspecialchars(trim($_GET['script'])); ?>">
<div class="form-group">
<label><?php echo l('login_type_email'); ?></label>
<div>
<input type="text" autocomplete="off" class="form-control" name="email" placeholder="<?php echo l('login_email'); ?>" autofocus>
</div>
</div>
<div class="form-group">
<label><?php echo l('login_type_password'); ?></label>
<div>
<input type="password" autocomplete="off" class="form-control" name="password" placeholder="<?php echo l('login_password'); ?>">
</div>
</div>
<button type="submit" class="btn btn-primary"><?php echo l('login_submit'); ?></button>
<div class="cannot-login">
<a href="<?php echo $locPrefix; ?>/restore/" class="pull-left"><?php echo l('login_cant_login'); ?></a>
<a href="<?php echo $locPrefix; ?>/register/" class="pull-right"><?php echo l('login_to_register'); ?></a>
<div class="clear"></div>
</div>
</form>
</div>
</div>
<div class="col-md-3"></div>
</div>
<div class="social-login-title">
<?php echo l('login_via_social_network'); ?>
</div>
<div class="social-login"><a href="/social/vk/<?php if(isset($_GET['ref'])){ ?>?ref=<?php echo urlencode($_GET['ref']); ?><?php } ?>" class="vkontakte"><i class="fa fa-vk"></i></a><a href="/social/ok/<?php if(isset($_GET['ref'])){ ?>?ref=<?php echo urlencode($_GET['ref']); ?><?php } ?>" class="odnoklassniki"><i class="fa fa-odnoklassniki"></i></a><a href="/social/fb/<?php if(isset($_GET['ref'])){ ?>?ref=<?php echo urlencode($_GET['ref']); ?><?php } ?>" class="facebook"><i class="fa fa-facebook"></i></a><a href="/social/gl/<?php if(isset($_GET['ref'])){ ?>?ref=<?php echo urlencode($_GET['ref']); ?><?php } ?>" class="google"><i class="fa fa-google"></i></a></div>
<?php include "inc/footer.php"; ?>
В среде "PHP"-разработчиков часто слышатся возбуждающие аппетит к ветчине повизгивания о том, что, дескать, без фреймворков не жизнь, чистый "PHP" - говно, и что без "Laravel" охуенный проект не создать. Но взгляните на вышеприведённый код страницы авторизации в одном из разработанных мною движков и задайте себе вопрос: зачем делить один ладненький, компактненький скриптик на контроллеры, модели, шаблоны, интерфейсы, и, как следствие, конское количество директорий, когда и "HTML"-представление, и "AJAX"-обработчик можно впихнуть в один файл на, в данном случае, полтора-два экрана? Чем обусловлена массовая течка по "MVC" и смежным архитектурам (к слову, не только лишь в "PHP", но и, слышно, в "Ruby" и "NodeJS")?
Запостил:
HornyPorny,
18 Июля 2018
Быстрее?
А ведь и правда, большинству сайтов больше одной базы не нужно. Посчитали, что PHP будет недостаточно интырпрайзным если останется дефолтное соединение, ссылку на которое не надо передавать?
ну там есть одна дефолтная
Насколько я понимаю, всеобщий он только на говнокоде. Оно и понятно: на говнокоде собралась кучка неосиляторов со своими сраными верилогами, которые даже никогда сами регистрацию на php не писали простынёй без отступов и вперемешку с вёрсткой.
С другой стороны: подход к защите от инъекций через экранирование — плохой подход. Если ты используешь экранирование — то ты можешь ЗАБЫТЬ экранировать. А если используешь prepared statements или хотя бы эти блять именованные параметры, как они там называются, то ты НЕ МОЖЕШЬ забыть сделать экранирование. И не можешь дважды экранировать случайно. При этом код получается абстрактнее, ты думаешь не про сраную строку, которую конкатенируешь, в добавок добавляя какие-то бэкслеши, а про запрос (написанный, на минуточку, на другом языке) и подставляемые в него данные. Именно поэтому mysql_real_escape_string и депрекейтнули, как устаревший подход, которому есть альтернатива, ВО ВСЕХ ПУНКТАХ его превосходящая, хотя существование mysqli_… как бы возвращает проблему на место. В php вообще все проблемы всегда должны быть на своих местах, таков принцип создателей языка. Мне кажется, если они начнут решать проблемы, от них отвернётся всё сообщество пользователей, потому что большинство из них пользуются PHP именно ради проблем. Представьте, что ваш сын был с бородавкой на лице. Вам вернули другого ребёнка, без бородавки. Вы ведь не станете радоваться. Вам нужен именно ВАШ сын.
Впрочем, есть и способы обойти mysql_real_escape_string, но те, что я видел, были связаны со включением каких-то маргинальных кодировок или специальных режимов стрельбы по ногам со стороны разработчика (если уж обсираться, обосраться можно было бы и попроще). Причинами возможности обойти mysql_real_escape_string всегда являлся сам mysql (лол), и баги прикрывали в следующих версиях.
Каким надо быть идиотом чтобы "забыть" что-то сделать?
>>> со своими сраными верилогами
Что такое "верилоги"? Это какой-то очередной модный "фреймворк" для логов?
Чем не устаривает "echo"?
(О времена, о нравы, когда-то 4k означало нечто другое…)
Таковы, в общем и целом, претензии человечества к mysql_real_escape_string, если тебе интересно.