2017-01-10 2 views
-1

У меня есть проблема прямо сейчас при отправке переменной в таблицу. У меня есть 3 таблицы с именем prereg, asdoc, asdocp. Я назначаю врача пациенту, где таблица пациентов является prereg, и другая таблица 2 - таблица врачей. Проблема заключается в следующем: $ fname из таблицы prereg отправляет обе таблицы, которые являются asdoc, asdocp и.Дублирование входов в другую таблицу PHP/MYSQL

Что я хочу сделать, это значение $ fname отправлять только в 1 таблицу, а когда имя врача дублируется в 5, имя таблицы mstat/pstat будет заполнено.

$fnamechk = @mysql_query("SELECT * FROM prereg WHERE fname = '$fname'"); 
if(mysql_num_rows($fnamechk) == 0) { 
    $query = "INSERT into prereg (fname, lname, mname) 
    VALUES ('$fname','$lname','$mname')"; 

    $result = mysql_query($query) or trigger_error(mysql_error().". Query: ".$query); 
    echo "<strong>"; 
    echo "<script>alert('Successfully added to in patient');document.location='patient.php'</script>"; 
    echo '</script>'; 


    // DOOOOOOOOOOOOOOCTORSSSSS -------------------- 
    //MEDICAL DOCTOR 
    $fnamechkkk = @mysql_query("SELECT * FROM asdoc WHERE docname = '$docname'"); 
    if(mysql_num_rows($fnamechkkk) == 4) { 
     mysql_query("UPDATE asdoc SET mstat='Full' Where docname='$docname' AND mstat='available'"); 

    }else 
     $fnamechkk = @mysql_query("SELECT * FROM asdoc WHERE docname = '$docname'"); 
    if(mysql_num_rows($fnamechkk) <= 5) { 
     $query = "INSERT into asdoc (docname, afname) 
    VALUES ('$docname','$fname')"; 
     $result = mysql_query($query) or trigger_error(mysql_error().". Query: ".$query); 
    } 
    // MEDICAL DOCTOR END-------- 

    //PEDRIATIC DOCTOR 
    $fnamechkkk = @mysql_query("SELECT * FROM asdocp WHERE pdoc = '$pdoc'"); 
    if(mysql_num_rows($fnamechkkk) == 4) { 
     mysql_query("UPDATE asdocp SET pstat='Full' Where pdoc='$pdoc' AND pstat='available'"); 

    }else 
     $fnamechkk = @mysql_query("SELECT * FROM asdocp WHERE pdoc = '$pdoc'"); 
    if(mysql_num_rows($fnamechkk) <= 5) { 
     $query = "INSERT into asdocp (pdoc, pfname) 
    VALUES ('$pdoc','$fname')"; 
     $result = mysql_query($query) or trigger_error(mysql_error().". Query: ".$query); 
    } 
    // PEDRIATIC DOCTOR END-------- 

Я знаю, что мой код неверен для этого сценария, пожалуйста, посоветуйте мне, и если, как решить эту благодарность, ребята. Это то, что случилось с моими таблицами:

+0

** ВНИМАНИЕ **: Если вы просто изучаете PHP, не используйте интерфейс ['mysql_query'] (http://php.net/manual/en/function.mysql-query.php) , Это так ужасно и опасно, что он был удален в PHP 7. Замена, такая как [PDO, не трудно учиться] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /) и руководство, подобное [PHP The Right Way] (http://www.phptherightway.com/), объясняет лучшие практики. Ваши пользовательские данные ** не ** [правильно экранированы] (http://bobby-tables.com/php.html), и есть [SQL-инъекции ошибок] (http://bobby-tables.com/) и могут эксплуатироваться. – tadman

+0

** ПРЕДУПРЕЖДЕНИЕ **: не следует подавлять ошибки при вызове методов с помощью оператора '@'. Если что-то пойдет не так, вы хотите узнать об этом, и вам нужно будет предпринять корректирующие действия, отобразить полезное сообщение для пользователя, занести в журнал проблему или все это и многое другое. Это также делает такие отладочные проблемы намного сложнее, если вы игнорируете ошибки, которые пытаются указать на серьезные проблемы. – tadman

+0

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

ответ

0

Ваша логика кода не делает то, что вы сказали в вопросе. Оно должно быть:

if (num_rows < 5) { 
    insert new row 
} elseif (num_rows == 5) { 
    set status to full 
} 

Так что PHP должно быть:

$fnamechkkk = mysql_query("SELECT COUNT(*) AS count FROM asdoc WHERE docname = '$docname'"); 
$row = mysql_fetch_assoc($fnamechkkk); 
if ($row['count'] < 5) { 
    $query = "INSERT into asdoc (docname, afname) VALUES ('$docname','$fname')"; 
    $result = mysql_query($query) or trigger_error(mysql_error().". Query: ".$query); 
} elseif ($row['count'] == 5) { 
    $query = "UPDATE asdoc SET mstat='Full' Where docname='$docname' AND mstat='available'"; 
    $result = mysql_query($query) or trigger_error(mysql_error().". Query: ".$query); 
} 

Вам не нужно повторять SELECT запрос, каждый раз, когда вы хотите, чтобы получить количество. И, как правило, лучше выполнить запрос SELECT COUNT(*), а не SELECT *, а затем mysql_num_rows(), если все, что вам нужно, это количество совпадений.

+0

сэр я добавлю картинку по моему вопросу, которая случится на моем столе – cuysooo

+0

Сэр я следую за вашими изменениями, но все равно, где я должен положить этот код? Я делаю $ fname check на первом, где select на pre reg. ihave ijust want - это ввести это в 1 таблицу, но они вводятся в 2 таблицы. изображение моей таблицы добавляется вверху, Теперь, где я должен положить этот код? – cuysooo

+0

Я не понимаю эту часть вопроса. Как это должно знать, следует ли добавлять в 'asdoc' или' asdocp'. – Barmar

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