PHP / mysql: использовать значение столбца в выпадающем меню, фактически добавить значение PK ID в базу данных - PullRequest
1 голос
/ 19 мая 2011

Я изучаю PHP / MySQL и создаю базу данных для школьных занятий.Мне пришлось переделать мои таблицы с идентификационными номерами в качестве ПК, что отчасти отбросило меня назад.У меня есть выпадающие меню в формах добавления записей, где применяются отношения, которые генерируются из других таблиц.Раньше они работали нормально, но теперь, поскольку мои внешние ключи должны быть числами, он не распознает текст в раскрывающемся списке.

Существуют ли способы использования определенного значения в качестве параметра раскрывающегося списка вформа, и в моем запросе INSERT на самом деле добавить номер идентификатора в его месте?Скажем, если бы у меня был «Джон Смит» с WriterID, равным 12, мог бы мой код добавить 12, но пользователь увидит имя?Я ломал голову над этим с раннего утра.

Вот код вставки и необходимых частей моей формы, и самого запроса (на отдельных страницах в моем коде).В то время, когда я копировал это, я играл с GET вместо POST для двух последних вариантов.Я также попробовал несколько отдельных запросов SELECT во второй части, поэтому не стесняйтесь сообщать мне, если что-то не нужно.Заранее спасибо.

ФОРМА

            $con = mysql_connect(localhost,$username,$password);
            mysql_select_db($database) or die("Unable to select database");

            $result = @mysql_query("select WriterID, WriterName from dbase.writer2");
            print("Writer: ");
            print("<select name=\"WriterName\">\n");
            while ($row = mysql_fetch_assoc($result))
            {
                $WriterName = $row['WriterName'];
                print("<option value = " . $row['WriterID'] . ">$WriterName\n");

            }

            print("</select>\n");
            print("<a href=\"insert_writer.php\">If Writer not in list, add here</a>\n");
            print("<br>\n");

        $result = @mysql_query("select PublisherID, PublisherTitle from dbase.publisher2");
            print("Publisher: ");
            print("<select name=\"PublisherTitle\">\n");
            while ($row = mysql_fetch_assoc($result))
            {
                $PublisherTitle = $row['PublisherTitle'];
                print("<option value = " . $row['PublisherID'] . ">$PublisherTitle<br\n");

            }
            print("</select>\n");
            print("<a href=\"insert_publisher.php\">If Publisher not in list, add here</a><br>\n");
            mysql_close($con);

        <input type="Submit" value="Submit">

   </form>

 print("<a href=\"demo13.php\">Back to Main</a><br>\n");
 print("<a href=\"add.php\">Add Records Page</a><br>\n")

QUERY

        //retreiving the form text fields and assigning a variable to them
        $SeriesName=$_POST['SeriesName'];
        $SeriesGenre=$_POST['SeriesGenre'];
        $NumberOfVolumes=$_POST['NumberOfVolumes'];
        $MainWriter=$_GET['WriterID'];
        $SeriesPublisher=$_GET['PublisherID'];

        //using the aformentioned variables for the credentials in order to access the database
        $con = mysql_connect(localhost,$username,$password);
        mysql_select_db($database) or die("Unable to select database");

        $query = "SELECT writer2.WriterID FROM writer2
                  WHERE series2.MainWriter = writer2.WriterID";

        $MainWriter = mysql_query($query);



        $query = "SELECT publisher2.PublisherID FROM publisher2
                  WHERE series2.SeriesPublisher = publisher2.PublisherID";

        mysql_query($query);

        $SeriesPublisher = mysql_query($query);

        //Using SQL code to insert the information into the database.
        $query = "INSERT INTO series2 (SeriesName,SeriesGenre,NumberOfVolumes,MainWriter,SeriesPublisher)
                  VALUES('$SeriesName','$SeriesGenre','$NumberOfVolumes','$MainWriter','$SeriesPublisher')";

        //running the SQL code and closing the database connection.
      mysql_query($query);

      if (mysql_affected_rows($con) == -1)
      {
          print("An error has occured. Record insert failed " . mysql_error() . "<br\n");
      }
      else
      {
          print("<b>Record entered successfully</b><br>\n");
          print("$SeriesName<br>\n" .
                "$SeriesGenre<br>\n" .
                "$NumberOfVolumes<br>\n" .
                "$WriterName<br<\n" .
                "$PublisherTitle");
   print("ID for this record: " . mysql_insert_id() ."<br>\n");
      }       
      mysql_close($con);

      print("<a href=\"demo13.php\">Back to Main</a><br>\n");
      print("<a href=\"insert_series.php\">Add Another Series</a><br>\n");
      print("<a href=\"add.php\">Add Records Page</a><br>\n")

Ответы [ 4 ]

2 голосов
/ 19 мая 2011

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

т.е. <option value="1">John Smith</option>

Ваш текущий код выдаст <option value = 1>John Smith</option>, что является неверной разметкой.

У вас могут быть другие проблемы, но ваш код немного linguini.

1 голос
/ 19 мая 2011

Я думаю, что вы ссылаетесь на эту строку кода:

 print("<option value = " . $row['PublisherID'] . ">$PublisherTitle<br\n");

, который ужасно сломан, давайте попробуем это вместо этого:

echo "<option value='". $row['PublisherID']."'>".$PublisherTitle."</option>";

Нет необходимости в <br /> после него (особенно если вы не закрыли его, это не тот элемент, который требует такого рода возврата после него. Это передаст PublisherID в действие формы как $ _REQUEST ['PublisherTitle'], это должно быть то же самоеи для вашего WriterName один. Вам также не хватает тонны конечных тегов и т. д., только к вашему сведению ..

1 голос
/ 19 мая 2011

Вы делаете это:

$MainWriter=$_GET['WriterID'];

Но ваш выбранный тег:

<select name="WriterName">

Что приводит к созданию $ _GET ['WriterName']. Вы должны переименовать выбранное в «WriterID».

0 голосов
/ 20 мая 2011

Спасибо за помощь всем, с кодом, а также указанием на различные ошибки.А также за то, что я указал на мои проблемы с макетом без насмешек (я учу себя).

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

print("Publisher: ");
print("<select name=\"PublisherTitle\">\n");
while ($row = mysql_fetch_assoc($result))
{
    $PublisherTitle = $row['PublisherTitle'];
    print("<option value=\"" . $row['PublisherID'] . "\">$PublisherTitle<br />\n");

(То же самое с моим автором выбора)

И на странице запроса

$MainWriter=$_REQUEST['WriterName'];
$SeriesPublisher=$_REQUEST['PublisherTitle'];
...