Дэвид как-то прав в своем ответе, но я хотел бы остановиться на нем немного подробнее.
Здесь у вас есть функция javascript с выводом переменной в зависимости от текущего количества комнат, которые есть у пользователя.
Сценарий, который вы разместили выше, загружается, когда пользователь посещает вашу страницу изначально. Это означает, что, когда они первоначально загружают страницу и не зарезервировали комнаты,
<?php
if(rooms_per_user($_SESSION['user_id'])>=2)
{
$string = "\$(\"#dialog-message\").find('.error').show();";
echo $string;
}
?>
блок вашего кода не будет выводиться на страницу. Вот почему ваши пользователи не видят предупреждающее сообщение при попытке добавить дополнительные комнаты. Код, который вы выводите на страницу, НЕ перезагружается при каждом ajax-запросе, а является статическим содержимым. Так как пользователи регистрируют дополнительные комнаты помимо 2, код JS здесь:
$("#dialog-message").find('.error').show();
никогда не выводится и не используется.
Как правило, когда вы делаете проверку, подобную этой, «правильный» способ сделать это на стороне сервера.
Поэтому, когда пользователь пытается зарегистрировать комнату, но уже забронировал 2 из них, AJAX-запрос отправляется в room.php, который получает ответ «data» от сервера. Я бы предложил добавить dataType к параметрам ajaxForm, например так:
url: "room.php",
type: "POST",
beforeSubmit: disableButtons,
dataType: 'json',
success: function(data) {
Это скажет jQuery ожидать ответа от сервера в виде JSON. В вашем скрипте rooms.php вам нужно будет установить стандартный формат данных для ответа и вернуть его с помощью
echo json_encode( array( 'status' => 'OK' ) ); //tell the JS code that the status was OK
или в случае ошибки:
echo json_encode (array ('status' => 'ERROR', 'errtxt' => 'Извините, но вы уже зарезервировали 2 комнаты.')); // сообщаем коду JS, что статус был в порядке
Итак, я выкинул ваш код JS и удалил множество jQuery-оболочек вокруг функций внутри функций, которые вам не нужны, и вот конечный результат:
$("#formReg").ajaxForm({
url: "room.php",
type: "POST",
beforeSubmit: function() {
$('form').find('input[type="submit"]').attr('disabled', 'disabled');
},
success: function(data) {
if( data.status != 'OK' ) {
$("#dialog-message").find('.error').html(data.errtxt).show();
return;
}
$("#registration").load("room.php #registration", function() {
$( "input:submit, a, button", ".registration" ).button();
$( "a", ".registration" ).click( function(e) {
e.preventDefault();
});
});
$("#cancellation").load("room.php #cancellation", function() {
$( "input:submit, a, button", ".cancellation" ).button();
$( "a", ".cancellation" ).click(function() { return false; });
});
}
});
Соедините это с остальными предложениями для стороны PHP, и я думаю, что вы будете очень милы.