2013-04-14 10 views
0

У меня есть форма, и когда она будет отправлена, данные будут вставлены в три таблицы (пользовательские, дорожные, user_journey tables). Прежде чем данные будут вставлены, я хочу проверить, существует ли этот пользователь в таблице пользователя. Если нет, то нет проблем, пользователь будет вставлен в таблицу пользователя, однако, если пользователь уже существует в таблице пользователя, я не хочу снова добавлять пользователя. Я хочу получить user_id пользователя и вставить в третью таблицу (user_journey).Проверьте, существует ли строка

В настоящий момент, когда я отправляю форму, пользователь вставляется в таблицу пользователей, даже если они уже существуют в таблице.

Я не уверен в том, как я проверил, существует ли пользователь, и правильно ли я получаю user_id. Любые советы будут оценены

$query = $db->query("SELECT COUNT(*) FROM user WHERE facebook_id = '.$hdnFacebookId.'"); 

     //$query->execute(); 
     //$countRows = $query->rowCount();//return number of rows 
     //check to see if user is already in the database 

     if ($query->fetchColumn() > 0) 
     { 
      if ($oneWay) 
      { 
       $query_journey = $db->prepare("INSERT INTO journey 
       (from_destination,to_destination,journey_type,depart_date,depart_time,seats_available,journey_message,user_type) 
       VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime','$seatcounter','$textareanotes','$radUserType')"); 
      } 
      else 
      { 
       $query_journey = $db->prepare("INSERT INTO journey 
       (from_destination,to_destination,journey_type,depart_date,depart_time,return_date,return_time,seats_available,journey_message,user_type) 
       VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime',STR_TO_DATE('$returnDate','%d/%m/%Y'),'$newRetTime ','$seatcounter','$textareanotes','$radUserType')"); 
      } 
      $user_query = $db->prepare("SELECT user_id FROM user WHERE facebook_id = '$hdnFacebookId'"); 
      $result = $user_query->execute(); 
      $user_query_result = $user_query->fetch(PDO::FETCH_ASSOC); 

      $query_journey->execute();//EXECUTE QUERY 

      $lastJourneyID = $db->lastInsertId(); 
      $queryUserJourney = $db->prepare("INSERT INTO user_journey 
           (journey_id,user_id) 
           VALUES('$lastJourneyID','$user_query_result')"); 
      $queryUserJourney->execute();//EXECUTE QUERY 

      //include('index.php'); 
     } 
     else //insert user 
     { 
      //if $oneWay true, then omit $returnDate and $returnTime 
      if ($oneWay) 
      { 
       $query = $db->prepare("INSERT INTO journey 
       (from_destination,to_destination,journey_type,depart_date,depart_time,seats_available,journey_message,user_type) 
       VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime','$seatcounter','$textareanotes','$radUserType')"); 
      } 
      else 
      { 
       $query = $db->prepare("INSERT INTO journey 
       (from_destination,to_destination,journey_type,depart_date,depart_time,return_date,return_time,seats_available,journey_message,user_type) 
       VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime',STR_TO_DATE('$returnDate','%d/%m/%Y'),'$newRetTime ','$seatcounter','$textareanotes','$radUserType')"); 
      } 
      $queryfb = $db->prepare("INSERT INTO user 
       (facebook_id,facebook_username,facebook_first_name,facebook_last_name,facebook_image,facebook_link) 
       VALUES('$hdnFacebookId','$hdnUsername','$hdnFirstName','$hdnLastName','$hdnFacebookImg','$hdnFacebookUrl')"); 

      $query->execute(); 
      $lastUserID = $db->lastInsertId(); 
      $queryfb->execute(); 
      $lastJourneyID = $db->lastInsertId(); 
      $queryUserJourney = $db->prepare("INSERT INTO user_journey 
           (user_id,journey_id) 
           VALUES('$lastJourneyID','$lastUserID')"); 
      $queryUserJourney->execute(); 

     } 

ОБНОВЛЕНО

function userExists($db, $hdnFacebookId) 
     { 
      $userQuery = "SELECT * FROM user WHERE facebook_id = :user;"; 
      $stmt = $db->prepare($userQuery); 
      $stmt->execute(array(':user'=>$hdnFacebookId)); 
      $result = $stmt->fetch(PDO::FETCH_ASSOC); 
      if($result) 
      { 
       return true; 
      } 
      return false; 
     } 

     $userExists = userExists($db,$hdnFacebookId); 
     if($userExists) 
     { 
      //don't insert user 
      //get user's id from database 
      $user_query = $db->prepare("SELECT * FROM user WHERE facebook_id = '$hdnFacebookId'"); 
      $result = $user_query->execute(); 
      $user_query_result = $user_query->fetch(PDO::FETCH_ASSOC); 
      $userID = $user_query_result['user_id']; 
      $query_journey->execute();//EXECUTE QUERY 
      $lastJourneyID = $db->lastInsertId(); 
      $queryUserJourney = $db->prepare("INSERT INTO user_journey 
           (journey_id,user_id) 
           VALUES('$lastJourneyID','$userID')"); 
      $queryUserJourney->execute();//EXECUTE QUERY 
     } 
     else 
     { 
      //insert user 
     } 

ответ

3

Типичным "Проверьте пользователь существует":

function userExists($db, $user) 
{ 
    $userQuery = "SELECT * FROM users u WHERE u.user=:user;"; 
    $stmt = $db->prepare($userQuery); 
    $stmt->execute(array(':user' => $user)); 
    $result = $stmt->fetch(PDO::FETCH_ASSOC); 
    if($result) 
    { 
     return true; 
    } 
    return false; 
} 

Таким образом, вы можете сделать что-то вроде

$user = isset($_POST['user']) ? $_POST['user'] : "Unknown"; 
$userExists = userExists($db, $user); 
if($userExists) 
{ 
    // Don't insert 
] 
else 
{ 
    // Insert the user. 
} 
+2

или более кратко, 'return !! $ stmt-> fetch (PDO :: FETCH_ASSOC);' –

+0

Уверен, что он может работать, я просто нахожу код более красивым, чем другие, но спасибо за подсказку. Это также работает, даже если это связанный массив (который он)? – Jonast92

+1

Он работает точно так же, как и код, который вы опубликовали. –

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