2012-06-19 4 views
0

Моя цель - создать форму ввода (addnew.php), которая позволит мне позже редактировать записи, сделанные с использованием другой формы (edit.php).Использование MySQL и PHP для создания редактируемой базы данных ввода

В настоящее время addnew.php использует несколько текстовых полей и 2 флажка, а то, что я пытаюсь сделать, - это вставить информацию из форм в базу данных MySQL. Информация из текстовых полей вставляется в одну таблицу, а информация из этих флажков вставляется в другую таблицу.

Теперь, однако, я пытаюсь использовать третью таблицу (если необходимо), чтобы сделать таблицу пересечений, которая позволит мне использовать тот же формат, что и в addnew.php, в форме редактирования.

Таким образом, addnew.php будет иметь текстовые поля и флажки, а также будет edit.php, разница в том, что в файле edit.php будет заполнена информация, а в случае флажков , они будут проверены, и у пользователя будет возможность проверить больше полей или снять отметки с уже отмеченных ящиков.

три таблицы, которые я прямо сейчас:

articles: 
id - articletitle - articleorganization - articledate - articleurl 

tags: 
id - tag_contents 

articles_tags: 
id - article_id - tag_id 

И код addnew.php является:

<?php 
function renderForm($articletitle, $articleorganization, $articledate, $articleurl, $articletags) 
{ 
?> 
. . . 
      <td width="20%" align="right"><span class="field">Article Title:</span></td> 
      <td width="80%" align="left"><span class="field"> 
       <input name="articletitle" type="text" value="<?php echo $articletitle; ?>" size="50"/> 
      </span></td> 
      </tr> 
      <tr> 
      <td align="right"><span class="field">Article Author:</span></td> 
      <td align="left"><span class="field"> 
       <input name="articleorganization" type="text" value="<?php echo $articleorganization; ?>" size="50"/> 
      </span></td> 
      </tr> 
      <tr> 
      <td align="right"><span class="field">Access Date:</span></td> 
      <td align="left"><span class="field"> 
       <input name="articledate" type="text" value="MM/DD/YYYY" size="50"/> 
      </span></td> 
      </tr> 
      <tr> 
      <td align="right"><span class="field">Article URL:</span></td> 
      <td align="left"><span class="field"> 
      <input name="articleurl" type="text" value="<?php echo $articleurl; ?>" size="50"/> 
      </span></td> 
      </tr> 
      <tr> 
      <td align="right"><span class="field">Article Tags:</span></td> 
      <td align="left"><span class="field"> 
       <input type="checkbox" name="articletags[]" value="geology" id="articletags_0" /> 
       <input type="checkbox" name="articletags[]" value="astronomy" id="articletags_1" /> 
      </span> 
      </td> 
      </tr> 
      <tr> 
      <td colspan="2" align="center" valign="middle"><input type="submit" name="submit" value="Add this Article" /></td> 
      </tr> 
     </table> 
     . . . 
</html> 
<?php 
} 


include('settings.php'); 

if(count($articletags) > 0) 
{ 
$articletags_string = implode(",", $articletags); 
} 

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 

$articletitle = mysql_real_escape_string(htmlspecialchars($_POST['articletitle'])); 
$articleorganization = mysql_real_escape_string(htmlspecialchars($_POST['articleorganization'])); 
$articledate = mysql_real_escape_string(htmlspecialchars($_POST['articledate'])); 
$articleurl = mysql_real_escape_string(htmlspecialchars($_POST['articleurl'])); 
$articletags = implode(',', $_POST['articletags']); 

if ($articletitle == '' || $articleorganization == '') 
{ 

$error = 'ERROR: Please fill in all required fields!'; 


renderForm($articletitle, $articleorganization); 
} 
    else 
{ 

mysql_query("INSERT INTO articles SET articletitle='$articletitle', 
     articleorganization='$articleorganization', 
     articledate='$articledate', 
     articleurl='$articleurl' ") 

$article_id = mysql_insert_id(); 

mysql_query("INSERT INTO tags SET articletags='$articletags' "); 

$tag_id = mysql_insert_id(); 

mysql_query("INSERT INTO articles_tags SET article_id='$article_id', 
     tag_id='$tag_id' ") 


or die(mysql_error()); 

header("Location:addsuccess.php"); 
} 
    } 
    else 

    { 
    renderForm('','','','',''); 
    } 
?> 

Что я сейчас возникли проблемы с выясняет, что именно делать дальше (после второго INSERT). Я знаю, что мне нужно наладить отношения, но я не могу для жизни понять, как это сделать.

Я предполагаю, что мне нужно хранить теги в таблице tags? Но если это так, как мне получить свой идентификатор и вставить его в качестве тега в статью?

Любая помощь очень ценится.

+0

Вместо того, чтобы делать 2 страницы формы, просто создайте страницу с 1 формой. Это удваивает вашу работу, когда вы должны измениться в будущем. Например, если идентификатор пользователя был отправлен на страницу формы, ваши поля будут заполнены, и ваша форма будет знать, какой именно идентификатор (возможно, через скрытое поле).) Если идентификатор пользователя не загружен, все полевые эхо-сигналы будут отображаться пустым (поскольку вары пусты), а идентификатор пользователя может быть пустым в форме, и ваш php-приемник узнает, что он новый, потому что отсутствует id. (Я предполагаю, что вы, конечно же, обрабатываете ошибки/здравомыслящие/логинские проверки). – colonelclick

ответ

0

Если вы решили использовать эту схему, вы должны использовать таблицу articles_tags в качестве взаимосвязи между записями в таблицах articles и tags (1 .. *). Это означает, что в таблице articles_tags будет указано несколько записей с теми же article_id и разными tag_id для каждого тега, связанного с данным изделием.

Кроме того, вы можете просто сохранить ссылку на то, к какой статье принадлежит тег, добавив поле article_id в таблицу tags.

Пример:

articles  |  tags   |  articles_tags 
id title   id tag_text    a_t_id a_id t_id 
4 Title1   8 Tagblahblah    1  4  8 
5 title2   9 tagccccc    2  4  9 
              3  5  8 

Таким образом, это articles_tags запись означает, что статья с идентификатором 4 имеет метки с идентификаторами 8 & 9. Tag 8 также используется для идентификатора статьи 5.

Это стандартный способ в SQL, чтобы иметь дело со многими для многих отношений (*..*).

+0

Будет ли второй пример, который вы дали работу так же хорошо? Со своей стороны, я хотел бы максимально уменьшить сложность базы данных, не жертвуя удобством использования и масштабируемостью. Целевая среда для этой базы данных составляет около 10 человек, использующих ее (всего, а не одновременно) и занимающих не более тысячи статей с 4-5 тегами каждый. – Fin90

+0

Если мое предположение о том, что есть 1 статья с МНОГО тегами, то да. Если есть вероятность, что 1 тег связан с более чем 1 статьей, тогда нет (вам понадобится таблица «swing»). – blearn

+0

Да, существует возможность использования как одной статьи с несколькими тегами, так и каждого тега, применяемого к нескольким статьям. Поэтому в этом случае мне нужна третья таблица. Я не против. Как вы думаете, вы могли бы привести небольшой пример того, как я буду это делать? Я не могу за всю жизнь обойти логику. – Fin90

0

Вы можете использовать mysql_insert_id() для получения последнего вставленного идентификатора записи.

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