Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

два ламерских вопросика про php и mysql

36K
21 февраля 2011 года
twi5ter
37 / / 06.08.2009
доброго времени суток.
наболело вот! пишу валидацию полей формы. скажем в проекте валидацию логина и пароля нужно делать не один раз! появилось желание создать файл, в котором описать все функции и просто подключить его на форму.
например validate.php
Код:
<?php
function vPassword($password) {
код
...
return true/false;
}
function vLogin($login) {
код
...
return true/false;
}
?>

чтобы подключить как нужно сделать?
myform.php
Код:
<?php
include_once("validate.php");
$password=trim($_POST["password"]);
$login=trim($_POST["login"]);
if(vPpassword($password) && vLogin($login)) {
тут будет, скажем, sql запрос к базе
...
}
echo '
<form name="loginForm" action="myform.php" method="post">
  Логин <input name="login" type="text" />
  Пароль <input name="password" type="password" />
</form>
'
;
?>


Второй вопрос вот такой.
Я не эксперт но обычно делаю так! Создаю файл mysql_connect.php, там прописываю что-то вроде, и подключаю этот файл в заголовке pgheader.php
Код:
<?php
  $db_user = 'root';
  $db_password = '';
  $db_location = 'localhost';
  $db_name = 'mca';
 
  $dbcnx = @mysql_connect($db_location,$db_user,$db_password);

  if (!$dbcnx)  {
    echo '<div>Error: The database server is not available, the correct rendering is impossible.</div>';
    exit();
  }
  if (!@mysql_select_db($db_name, $dbcnx)) {
    echo '<div>Error: Database is not available, the correct rendering is impossible.</div>';
    exit();
  }
  mysql_set_charset('utf8');
?>

а потом в нужном мне месте, на любой странице выполняю sql запросы, так
 
Код:
$query = "UPDATE `TabUser` SET `email`='$new_email', `hash`='$new_hash' WHERE `pk_user`='$pk_user' and `email`='$email'";
        $result = mysql_query($query) or die(mysql_error());

Вопрос в том, нужно ли закрывать соединение с базой? после каждого запроса?
 
Код:
mysql_close($dbcnx);

Я так понимаю если закроешь, прийдется его снова открывать. А если оно будет всегда открыто на сколько это "хорошо"? Или нет ничего страшного?
244
21 февраля 2011 года
UAS
2.0K / / 19.07.2006
1) Да верно написали, вроде бы

2) Соединение будет открыто до окончания выполнения скрипта. После окончания выполнения - оно сам автоматически закроется. Постоянно дергать БД на подключение-отключение - это плохо, лучше держите соединение всегда открытым.
274
21 февраля 2011 года
Lone Wolf
1.3K / / 26.11.2006
1. да все правлиьно
2. UAS сказал правлино, но я уточню вместо mysql_connect, лучше использывать mysql_pconnect, ему будет пофиг на mysql_close - закрыватся не будет.
4
21 февраля 2011 года
mike
3.7K / / 01.10.2002
Цитата: Lone Wolf

2. UAS сказал правлино, но я уточню вместо mysql_connect, лучше использывать mysql_pconnect, ему будет пофиг на mysql_close - закрыватся не будет.



Ага, в итоге при увеличении нагрузки все вывалится с to many mysql connection. Некоторые хостинг-провайдеры даже запрещают использовать mysql_pconnect().

274
21 февраля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: mike
Ага, в итоге при увеличении нагрузки все вывалится с to many mysql connection. Некоторые хостинг-провайдеры даже запрещают использовать mysql_pconnect().



ну тут нужно искать золотую середину. Так как постоянные дерганья коннектами тоже не очень хорошо.

369
22 февраля 2011 года
Kesano
451 / / 09.10.2007
Цитата: Lone Wolf
ну тут нужно искать золотую середину. Так как постоянные дерганья коннектами тоже не очень хорошо.



ИМХО:
1. Выполняется скрипт - выполняется подключение и запрос к БД. Сайт не посещается - подключение не создается и не висит. Вариант Too Many SQL connections практически исключен.
2. Если у вас высоконагруженный проект, под который нужен целый сервер (типа социальной сети), с AJAX-запросами и т.д. - стоит заморочиться с мультиплексорами, где нагрузка на распределение данных возлагается на фронт-энд сервера в виде мультиплексора, а в бэк-энде висит 1 подключение к базе, через которое гоняются запросы...

Честно говоря, сами никогда не сталкивался, но нужно почитать про распределенные системы и масштабируемость веб-приложений...

ТС-у:
Скажите, а зачем вам отдельная проверка логина и пароля?
Вы отдельно проверяете существование логина и отдельно существования пароля??? )

Может, лучше так:

 
Код:
function vCheck($login,$password) {
/*
Проверка валидности логина (длинны, символов)
Проверка валидности пароля (длинный, символов)
Проверка в базе
*/

  if(mysql_num_rows(mysql_query("select * from users where login='$login' AND password='$password'"))==1) return true;
  else return false;
}
15
23 февраля 2011 года
shaelf
2.7K / / 04.05.2005
Посоветуйтесь с вашим системным администратором. Мы тут много чего можем сказать хорошего и плохого, но такие вещи решаются только исходя из контекста конкретной задачи. Я например с улыбкой оборачиваюсь назад и вспоминаю, как пытался оптимизировать БД и запросы к ней при ~ 600 хитах в сутки ). Лучше потратить время на то, чтобы ещё что-то написать или изучить. А если реально появится необходимость решать такие вопросы, то думаю к тому времени опыта будет уже горадо больше :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог