2016-12-20 5 views
0

У меня есть таблица со столбцами идентификатором пользователя (INT), timeIN (дата), тайм-аут (дата)SQL Select/Insert/Update PHP запрос MySQL

Я вставив запись в базе данных MySQL. Сначала я проверяю правильность идентификатора пользователя из другой таблицы, и если он будет правильным, он добавит новую запись идентификатора пользователя и timeIN (date), тогда как timeOUT будет NULL, иначе будет отображаться ошибка, если идентификатор пользователя неверен. Я хочу, чтобы мой код мог проверить, является ли пользователь в данный момент timeIN, чтобы предотвратить двойную запись. Я также хотел бы вставить или обновить timeOUT (date), если значения userID равны значению пользователя, а timeIN не равно null, а timeOUT равно null.

Просьба помочь ... спасибо.

Вот мой код для вставки userID и timeIN: IT WORKS при вставке в базу данных mysql.

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){ 
require_once('dbConnect.php'); 

$userID = $_POST['userID']; 
$sql = "SELECT * FROM employee WHERE userID='$userID'"; 
$result = mysqli_query($con,$sql); 
$check = mysqli_fetch_array($result); 

if(isset($check)){ 
    $sql = "INSERT INTO dtr (userID,timeIN) VALUES ('$userID', now())"; 
    mysqli_query($con, $sql); 
    echo 'Time IN Successful!'; 
    }else{ 
     echo 'Invalid USER ID. Please try again!'; 
     }   
mysqli_close($con); 
} 
?> 
+1

Бобби таблицы кого? – fafl

+0

Не нужно сначала проверять. На самом деле это контрпродуктивно. – Strawberry

ответ

0

Я сделал это с моего мобильного телефона не проверял, но вы получите представление о том, что происходит на

if(isset($check)) 
{ 

$sql="SELECT * FROM dtr WHERE userID = $userID"; 
$result = mysqli_query($con,$sql); 
$check = mysqli_fetch_array($result); 

if(isset($check)) 
{ 
    echo "Already in"; 
    if(isset($check['timeIN']) && !isset($check['timeOUT'])) 
    { 
     $sql = "UPDATE dtr SET timeOUT= now() WHERE userID=$userID"; 
     mysqli_query($con, $sql); 
     mysqli_close($con); 
    } 
} 
else 
{ 
    $sql = "INSERT INTO dtr (userID,timeIN) VALUES ('$userID', now())"; 
    mysqli_query($con, $sql); 
    mysqli_close($con); 
    echo 'Time IN Successful!'; 
} 
} 
else 
{ 
echo 'Invalid USER ID. Please try again!'; 
mysqli_close($con); 
}   
+0

спасибо ... я изменил код , Я отделяю код от времени и времени. теперь он работает, как я этого хочу :) –

+0

Yea! Полагаю, вам просто нужен был хороший код. Я бы посоветовал вам разбить свои проблемы на куски. Я считаю, что вы запутались, подумав о решении, просмотрев все проблемы. Это сильно смутит вас. Делай это так. Например. Сначала я бы выбрал дату, а затем записал ее код. Затем я должен проверить пользователя, а затем записать его код. Затем я обновляю время, а затем прямо вниз по его коду. Ну ... рад, что я помог. PS: Я был в таких ситуациях раньше ... много раз: D –

+0

PS2: Узнайте подготовленные заявления. Они очень эффективны. –

1

Вы должны обработать эти проверки внутри базы данных. В настоящее время проверка вы делаете в базе данных могут быть обработаны с помощью внешнего ключа:

alter table dtr add constraint fk_dtr_userId 
    foreign key (userId) references employee(userId); 

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

alter table dtr add constraint unq_dtr_userId_timeOut 
    unique (userId, timeOut); 

К сожалению (для данного случая), MySQL позволяет дублировать NULL значения для ограничений уникальности. Итак, вы можете сделать одну из двух вещей:

  • Используйте значение по умолчанию, такое как «2099-12-31» для тайм-аута.
  • использовать триггер для обеспечения уникальности

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

+1

@topic starter вам нужно использовать механизм базы данных 'InnoDB', чтобы это работало, если вы используете MyISAM в качестве движка таблицы, вы можете скрытно использовать это' ALTER TABLE [your_table_name] ENGINE = InnoDB; ' –