установка таблиц и предотвращение дублирования ввода для 2 столбцов

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

    / vytvorenie tabulky TRIEDA

  $sql = "CREATE TABLE IF NOT EXISTS trieda(
            id_triedy INT(4) NOT NULL AUTO_INCREMENT, 
            nazov CHAR(5),
            PRIMARY KEY (id_triedy),
            UNIQUE KEY (nazov))";

 // vytvorenie tabulky STUDENT


 $sql = "CREATE TABLE IF NOT EXISTS student(
                    id_student INT (5) NOT NULL AUTO_INCREMENT,
                    id_triedy INT (5) NOT NULL,
                    meno CHAR (15),
                    priezvisko CHAR (20),
                    PRIMARY KEY (`meno`, `priezvisko`),
                    KEY (id_student))";


  // spustenie dopytu
  if (mysqli_query($prip,$sql))
  {
    echo "Tabuľka vytvorená";
    echo "<br />";
    echo "<a href='./index.php'><strong>Späť</strong></a>";
  }
  else
  {
    echo "Chyba vytvorenia tabuľky: " . mysqli_error($prip);
    echo "<br />";
    echo "<a href='./index.php'><strong>Späť</strong></a>";
  }

РЕДАКТИРОВАТЬ: (выдает ошибку: Chyba vytvorenia tabuľky: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ студент» (id_student INT (5) NOT ' в строке 7)

// vytvorenie tabuliek do DB

  $sql= "CREATE TABLE IF NOT EXISTS trieda(
            id_triedy INT(4) NOT NULL AUTO_INCREMENT, 
            nazov CHAR(5),
            PRIMARY KEY (id_triedy),
            UNIQUE KEY (nazov));

        CREATE TABLE IF NOT EXISTS student(
                    id_student INT (5) NOT NULL AUTO_INCREMENT,
                    id_triedy INT (5) NOT NULL,
                    meno CHAR (15),
                    priezvisko CHAR (20),
                    PRIMARY KEY (`meno`, `priezvisko`),
                    KEY (id_student))";



  // spustenie dopytu
  if (mysqli_query($prip,$sql))
  {
    echo "Tabuľka vytvorená";
....

РЕДАКТИРОВАТЬ2:

if(isset($_POST['submit']))
{


    //meno a priezvisko
    $student = $_POST['meno'];
    $priezvisko = $_POST['priezvisko'];
    $id_trieda = $_GET['id_triedy'];



    //connect to the database
    include 'config.php';

    //insert results from the form input

$row = mysqli_query("SELECT * FROM student WHERE meno='{$student}' AND priezvisko='{$priezvisko}'");

if($row){
  echo 'Duplicate!';
}else {
  mysqli_query("INSERT INTO student (meno, priezvisko, id_triedy) VALUES( '{$student}', '{$priezvisko}', {$id_trieda} )");   
}
/*  $add = "<table align='center'>
            <tr>
                <td> Študent bol úspešne pridaný do triedy. </td>
            </tr>
            <tr>
                <td><a href='./trieda.php?id_triedy=".$_GET['id_triedy']."'><strong>Späť</strong></a></td>
            </tr>
            </table>";
    $not_add = "<table align='center'>
            <tr>
                <td> Študent s týmto menom a priezviskom už je v tejto triede. </td>
            </tr>
            <tr>
                <td><a href='./trieda.php?id_triedy=".$_GET['id_triedy']."'><strong>Späť</strong></a></td>
            </tr>
            </table>";
*/  



mysqli_close($prip);
}
?>

person frank17    schedule 21.01.2014    source источник


Ответы (2)


Проблема может заключаться в том, что вы перезаписываете $sql.

$sql= "CREATE TABLE IF NOT EXISTS trieda(
            id_triedy INT(4) NOT NULL AUTO_INCREMENT, 
            nazov CHAR(5),
            PRIMARY KEY (id_triedy),
            UNIQUE KEY (nazov));
CREATE TABLE IF NOT EXISTS student(
                    id_student INT (5) NOT NULL AUTO_INCREMENT,
                    id_triedy INT (5) NOT NULL,
                    meno CHAR (15),
                    priezvisko CHAR (20),
                    PRIMARY KEY (`meno`, `priezvisko`),
                    KEY (id_student))"

Ссылка на mysqlfiddle.

EDIT: Как вы можете видеть здесь, ваш проблема в том, что mysql_query() на PHP не принимает много запросов в одной строке, поэтому вы должны отправлять их отдельно.

$sql1 = "CREATE TABLE IF NOT EXISTS trieda(
                id_triedy INT(4) NOT NULL AUTO_INCREMENT, 
                nazov CHAR(5),
                PRIMARY KEY (id_triedy),
                UNIQUE KEY (nazov));"
$sql2 = "CREATE TABLE IF NOT EXISTS student(
                    id_student INT (5) NOT NULL AUTO_INCREMENT,
                    id_triedy INT (5) NOT NULL,
                    meno CHAR (15),
                    priezvisko CHAR (20),
                    PRIMARY KEY (`meno`, `priezvisko`),
                    KEY (id_student));"
person carexcer    schedule 21.01.2014
comment
это может быть проблемой, потому что он всегда создает только таблицу учеников... но я также пытался переименовать ее и отредактировать условие if, но выдает ошибку... есть идеи? - person frank17; 21.01.2014
comment
Какую ошибку вы получаете? (Я отредактировал ответ с вашим sql, что нужно сделать на данный момент - person carexcer; 21.01.2014
comment
проверьте мое редактирование, мне пришлось добавить точку с запятой в конце вашего кода, потому что я получил ошибку для моего условия if... и теперь я получаю эту ошибку.. - person frank17; 21.01.2014
comment
Какую версию MySQL вы используете? Я пробовал sqlfiddle, и он работает со всеми установленными на нем версиями MySQL:/ - person carexcer; 21.01.2014
comment
Хорошо, carexcer, но как будет выглядеть условие if с двумя строками? - person frank17; 21.01.2014

Для предотвращения дублирования установите составной уникальный ключ на поля meno и priezvisko (вы сделали это: "PRIMARY KEY (meno, priezvisko)"). Теперь сделайте вставку как INSERT IGNORE INTO.... Подробнее см. http://dev.mysql.com/doc/refman/5.5/en/insert.html.

ИЗМЕНИТЬ

Классический способ

try{

$sql = 'SELECT * FROM student WHERE meno="'.$student.'" AND priezvisko="'.$priezvisko.'"';
mysqli_real_escape_string($link, $sql); // escaping string 
$row = mysqli_query($link,$sql); // doing select - check on duplicate

if (mysqli_num_rows($row)){ // if return > 0 is means duplicate 
   echo 'Duplicate!';
}else{ 
     // not duplicate
     echo 'Inserting';
     mysqli_query($link,"INSERT INTO student (meno, priezvisko, id_triedy) VALUES( '{$student}', '{$priezvisko}', '{$id_trieda}') "); // inserting
 }

} catch (Exception $e){
      echo  $e->getMessage();
}
person voodoo417    schedule 21.01.2014
comment
хорошо, но если я использую INSERT IGNORE, это не дает мне ошибки, оно просто не добавляет значение, но показывает, что значение было вставлено... - person frank17; 21.01.2014
comment
Вам нужно проверить состояние: дубликат или нет? это просто не добавляет ценности - да. покажи код куда вставляешь - person voodoo417; 21.01.2014
comment
$sql = ВСТАВИТЬ ИГНОР В INTO студент (мено, приезд, id_triedy) VALUES( '{$student}', '{$priezvisko}', {$id_trieda} ); - person frank17; 21.01.2014
comment
@feri обновлено. Вы уверены, что существует повторяющаяся строка для параметров $student = $_POST['meno']; и $priezvisko = $_POST['priezvisko'];? - person voodoo417; 21.01.2014
comment
проверка, но все еще ошибки... ваш код написан неправильно, вы отсутствуете) {... попробуйте проверить еще раз, пожалуйста - person frank17; 21.01.2014
comment
@feri Я пишу здесь, без выделения - могут быть ошибки. смотри сейчас. - person voodoo417; 22.01.2014
comment
как насчет { после else ?? я получаю сообщение об ошибке из-за этого... потому что у меня есть условие для отправки формы в самом верху моего кода... - person frank17; 22.01.2014
comment
Я могу, но зайдите на сайт моего проекта и попробуйте добавить имя в класс.. см. ошибки www.bekescars.sk/projekt/ - person frank17; 22.01.2014
comment
@feri я пробовал 2.B - существует. Отлично. Я добавил 417 - не существует. Добавлен. Отлично . Посмотрите на bekescars.sk/projekt/index.php. Вы не можете добавить дубликат - person voodoo417; 22.01.2014
comment
но зайди в класс и добавь ученика, он каждый раз говорит дублировать - person frank17; 22.01.2014
comment
да, я сделал.. он ничего не показывает после отправки нового ученика.. даже не добавляет ученика.. - person frank17; 22.01.2014
comment
Вы видите новые строки в БД? - person voodoo417; 22.01.2014
comment
@feri обновите сейчас. Я думаю, что новые строки не вставляются. Я хочу видеть на сервере $_POST и $_GET и исключение - person voodoo417; 22.01.2014
comment
@feri я не понимаю: новая строка не вставляется? - person voodoo417; 22.01.2014
comment
я обнаружил проблему, иногда, когда я хочу добавить имя с тем же именем, он говорит дубликат, а иногда он говорит дубликат, когда я использую ту же фамилию .... что за хак? а иногда работает без проблем.. - person frank17; 22.01.2014
comment
на самом деле, проблема в том, что если пользователь с именем LOL LOLEC существует в одном классе, я не могу добавить ученика с таким же именем в другой класс, а должен! потому что может быть больше учеников с таким же именем...? - person frank17; 22.01.2014
comment
@feri добавить сравнение с class_id ... Я помог предотвратить вставку дубликатов в классе ... Извините, у меня больше нет времени на помощь. - person voodoo417; 22.01.2014