2015-09-09 3 views
2
create table member(
member_id int not null auto_increment, 
member_name varchar(50) not null, 
look_contact_number int(4) default 5, 
primary key(member_id) 
) 

create table contact_viewed(
contact_viewed_id int(11) not null auto_increment, 
contacted_member_id int (11) not null, 
member_id int(11) not null, 
primary key(contact_viewed_id) 
); 

Я хочу, чтобы вставить данные в таблице, где contact_viewedmember_id может быть тем же самым, это означает, что один пользователь может видеть несколько контактов, но contacted_member_id должен быть уникальным.вставка уникальных данных в таблице с помощью PHP-файла

Я использую запрос пары идентификатора в URL смотрите ниже

/contact_viewed.php?id=1; 

Сначала я принял условие, если member_id=2 нет данных в элементе таблицы затем вставить данные в таблице, то я проверил по rowCount() метод, если member_id=2 в таблице участников есть данные, тогда проверьте, contacted_member_id доступен в базе данных или нет, если он доступен, ничего не делать, если он недоступен, тогда вставьте данные в базу данных.

Моя проблема в том, что цикл foreach выполняется, тогда он вставляет данные, где id != contacted_member_id, если у кого-то есть идея, пожалуйста, помогите мне.

<?php 
    $stmt7 = $DB_con->prepare ("SELECT * FROM contact_viewed WHERE member_id=:member_id"); 
    $stmt7->bindParam (":member_id", $m_id); 
    $stmt7->execute(); 
    $row2 = $stmt7->fetchAll(); 
    if ($stmt7->rowCount() > 0) { 
    foreach ($row2 as $data) { 
      if ($data ['member_id'] == $m_id) { 
       if($data ['contacted_member_id'] == $_GET['id']){ 
        echo "do nothing1"; 
       } 
       else{ 
        $stmt6 = $DB_con->prepare ("INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)"); 
        $stmt6->bindParam (":contacted_member_id", $_GET ['id']); 
        $stmt6->bindParam (":member_id", $m_id); 
        $stmt6->execute(); 
        echo "hello"; 
       } 
      } 
     } 
    } 
    else{ 
     $stmt6 = $DB_con->prepare ("INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)"); 
     $stmt6->bindParam (":contacted_member_id", $_GET ['id']); 
     $stmt6->bindParam (":member_id", $m_id); 
     $stmt6->execute(); 
     $available_contact = $userRow ['available_contact']; 
     $available_contact = $available_contact - 1; 
     $stmt5 = $DB_con->prepare ("UPDATE member SET available_contact=:available_contact WHERE member_id=:member_id"); 
     $stmt5->bindParam (":available_contact", $available_contact); 
     $stmt5->bindParam (":member_id", $m_id); 
     $stmt5->execute(); 
     echo "ok ok"; 
    } 
    ?> 
+0

Просто FYI (вероятно, не будет решать ваши проблемы), руководство PDO отмечает, что 'ROWCOUNT()' не надежен на 'заявлений SELECT' и предлагает не использовать его в этом случае. Использование оператора 'COUNT()' является предпочтительным для выбора. – Rasclatt

+0

@Rasclatt Спасибо за ваш отзыв, это очень полезно для меня, сэр. Если я отправлю свой код, можете ли вы его проверить один раз, могу ли я указать свой адрес электронной почты –

+0

. Вы хотите, чтобы я дал вам мой адрес электронной почты, чтобы вы могли отправить мне свой код? Это то, что вы предлагаете? – Rasclatt

ответ

1

Попробуйте это:

<?php 
    $stmt7 = $DB_con->prepare ("SELECT * FROM contact_viewed WHERE member_id=:member_id AND contacted_member_id=:contacted_member_id"); 
    $stmt6->bindParam (":contacted_member_id", $_GET ['id']); 
    $stmt7->bindParam (":member_id", $m_id); 
    $stmt7->execute(); 
    $row2 = $stmt7->fetchAll(); 
    if ($stmt7->rowCount() == 0) { 
     $stmt6 = $DB_con->prepare ("INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)"); 
     $stmt6->bindParam (":contacted_member_id", $_GET ['id']); 
     $stmt6->bindParam (":member_id", $m_id); 
     $stmt6->execute(); 
     $available_contact = $userRow ['available_contact']; 
     $available_contact = $available_contact - 1; 
     $stmt5 = $DB_con->prepare ("UPDATE member SET available_contact=:available_contact WHERE member_id=:member_id"); 
     $stmt5->bindParam (":available_contact", $available_contact); 
     $stmt5->bindParam (":member_id", $m_id); 
     $stmt5->execute(); 
     echo "ok ok"; 
    } 
+0

@Jevgenjis Sulins, спасибо за ваш ответ, спасибо, что я работаю так, как хочу –

+0

Рад это слышать :) Тогда отметьте ответ как принято, пожалуйста. –

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