2015-01-25 4 views
0

Я создаю систему бронирования, в которой клиент заполнит форму бронирования (Location, Classroom, Time, & Date).Проверка записей в MySQL перед вставкой в ​​базу данных

Мой вопрос заключается в проверке записей, введенных перед вставкой в ​​базу данных. Значение, если LOCATION, CLASSROOM, TIME и DATE были уже вставлены/взяты/зарезервированы в базе данных, тогда система предложит сообщение типа «Местоположение, дата и время уже зарезервированы», иначе он будет вставлен в базу данных , Я запускаю этот код, но все же он записывает одно и то же местоположение, класс, дату, время. Что-то не так с этим кодом?

$res_location = isset($_POST['res_location']) ; 
$res_classroom = isset($_POST['res_classroom']) ; 
$res_inclusive_date = isset($_POST['res_inclusive_date']); 
$res_inclusive_time_start = isset($_POST['res_inclusive_time_start']) ; 

// Build the query 
$query = sprintf("SELECT Location_Faculty FROM tbl_reservation WHERE Location_Faculty=%s AND Classroom=%s AND Inclusive_Date=%s AND Inclusive_Time=%s ", 
GetSQLValueString($res_location, "text"), 
GetSQLValueString($res_classroom, "text"), 
GetSQLValueString($res_inclusive_date, "date"), 
GetSQLValueString($res_inclusive_time_start, "date")); 

$result = mysql_query($query) or die(mysql_error() . '<hr />' . $query); 
$num_rows = mysql_num_rows($result); 
if($num_rows >= 1){ 
    // then the record already exists 
echo "Duplicate entry"; 
} 
else{ 
//insert query 
} 

Это SQL-инъекция бесплатно из-за функции GetSQLValueString. Cheers and Godbless!

ответ

1

Вам необходимо будет выполнить запрос, прежде чем вставлять свои данные в базу данных для проверки бронирования.

Нечто подобное возможно

// This function helps you escape the data before you use them in database 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
    if (PHP_VERSION < 6) { 
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
    } 

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

    switch ($theType) { 
    case "text": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break;  
    case "long": 
    case "int": 
     $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
     break; 
    case "double": 
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
     break; 
    case "date": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break; 
    case "defined": 
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
     break; 
    } 
    return $theValue; 
} 
} 

// prep you data properly. You can use the GetSQLValueString() function to 
// escape the inputs, just set it to the required type. 
// if some $_POST value is not set, then you can set a default one here 
$res_location = isset($_POST['res_location']) ? GetSQLValueString($_POST['res_location'], 'text') : ' set a defaule value here'; 
$res_classroom = isset($_POST['res_classroom']) ? GetSQLValueString($_POST['res_classroom'], 'text') : ' set a defaule value here'; 
$res_inclusive_date = isset($_POST['res_inclusive_date']) ? GetSQLValueString($_POST['res_location'], 'date') : ' set a defaule value here'; 
$res_inclusive_time_start = isset($_POST['res_inclusive_time_start']) ? GetSQLValueString($_POST['res_inclusive_time_start'], 'text') : ' set a defaule value here'; 

// Build the query 
$query = "SELECT * FROM `tbl_reservation` WHERE `Location_Faculty` = '{$res_location}' AND `Classroom` = '{$res_classroom}' AND `Inclusive_Date` = '{$res_inclusive_date}' AND `Inclusive_Time` = '{$res_inclusive_time_start}' "; 

$result = mysql_query($query) or die(mysql_error() . '<hr />' . $query); 
if(mysql_num_rows($result) > 0){ 
    // then the record already exists 
echo "Duplicate entry"; 
} else { 
    // save to database 
} 

Пожалуйста, обратите внимание, что его valnuerable для SQL инъекций, так что вы должны бежать свои входы, а также попытаться использовать MySQLi или PDO вместо старых функций MySQL

+0

Спасибо! дайте ему попробовать :) – Nikkoz009

+0

Просто маленький совет. Вы можете поместить свой запрос внутри функции, например, reserve_exist(), где вы можете передать требуемые параметры и вернуть TRUE или FALSE, если запись существует. Затем в инструкции if вы можете проверить, что ваша функция вернется и к соответствующим действиям – Lykos

+0

эй! У меня проблема _Warning: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, boolean задан в C: \ xampp \ htdocs \ Thesis \ reservation_page.php в строке 39_, и я не могу вставить теперь @Lykos. – Nikkoz009

1

Вы можете проверить количество вставленной строки:

if(mysql_num_rows($Result1) > 0){ 
    //row is inserted 
} 

или вы можете запустить SELECT запрос перед установкой, и проверить, если строка возвращается.

Другой вариант - update the record if it is already inserted.

+0

благодарю вас, imma попробуйте :) – Nikkoz009

+0

добро пожаловать, спасибо, что согласился – meda

+0

Почему у вас не получилось :( – meda

Смежные вопросы