2016-06-24 4 views
1

Я пытаюсь заполнить ассоциативную таблицу (многие для многих) mysql через форму submit. В принципе, попытка использовать эту страницу для связывания «красного флага» с одним-ко-многим «продуктом».PHP - Вставить в ассоциативную таблицу

Screenshot of input form

ФОРМА

<?php 

require 'connect-db.php'; 

$sql = "SELECT ID, prod_name FROM catalog"; 
$result = mysqli_query($mysqli, $sql); 
?> 

<!DOCTYPE html> 
<html lang="en"> 

<head> 
<meta charset="utf-8"> 
<title></title> 
</head> 

<body> 

<p><strong>Add Red Flag:</strong></p> 

<form action="addRedFlag.php" method="post" id="rfForm"> 
<p>Description: 
<br/><textarea rows="4" cols="50" name="rfDescription" form="rfForm"></textarea> 
<p>Severity: <br/> 
<input type="radio" name="severity" value="minor"/>Minor<br/> 
<input type="radio" name="severity" value="moderate"/>Moderate<br/> 
<input type="radio" name="severity" value="major"/>Major<p/> 
<select name="prod_id"> 
    <option value="">Choose a product</option> 
    <?php while($row = mysqli_fetch_assoc($result)){ ?> 
    <?php $id = $row['ID']; ?> 
    <?php $title = $row['prod_name']; ?> 
    <option value="<?php echo $id; ?>"><?php echo $title; ?></option> 
    <?php } ?> 
</select> 
<p/><input type="submit" value="Submit" name="submit" /></form><br> 

<a href="captureRedFlag.php"> Reset Form </a><br> 
<a href="displayRedFlag.php"> View Red Flag List</a><br> 
<a href="../../index.html"> Home</a> 

</body> 

</html> 

PHP HANDLER

<?php 

// connect to the database 
include("connect-db.php"); 

$value1 = $_POST['rfDescription']; 
$value2 = $_POST['severity']; 
$value3 = $_POST['prod_id']; 

$sql = "INSERT INTO redFlag (description, severity) VALUES ('$value1', '$value2')"; 
$sql2 = "SELECT ID FROM redFlag WHERE (description = '$value1')"; 
$sql3 = "INSERT INTO prod_RF (cat_id, rf_id) VALUES ('$value3', '$value4')"; 

$result1 = mysqli_query($mysqli, $sql); 
$result2 = mysqli_query($mysqli, $sql2); 

if ($result1) 
{ 
    if ($result2) 
    { 
     $row = mysqli_fetch_assoc($result2); 
     $value4 = $row['ID']; 
//  echo $value4; 
     $result3 = mysqli_query($mysqli, $sql3); 
     if ($result3) 
     { 
      echo "success"; 
     } 
     else {echo "Error: " . $sql . "<br>" . mysqli_error($mysqli);} 
    } 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($mysqli); 
} 

mysqli_close($mysqli); 

?> 

При выполнении кода завершается успешно, но значение RF_ID в prod_RF таблицы всегда равен нулю. Это странно, потому что, когда я раскомментирую

echo $value4; 

линия, ожидаемое значение печатается на экране. По какой-то причине, когда я пытаюсь использовать то же значение ($ value4) в качестве входа в SQL-запрос ($ sql3), что-то не удается.

Спасибо за любые предложения, поскольку я довольно новичок в этом.

+0

сразу после '$ value3 = $ _POST ['prod_id'];' define' $ value4 = ''; 'и check –

+0

Пробовал это ... не работал. Спасибо хоть! – Ben

ответ

1

Лучший способ сделать это - использовать функцию MySQL для получения последнего идентификатора вставки, чтобы вы могли пропустить второй запрос.

$sql = "INSERT INTO redFlag (description, severity) VALUES ('$value1', '$value2')"; 
$sql3 = "INSERT INTO prod_RF (cat_id, rf_id) VALUES ('$value3', LAST_INSERT_ID())"; 

$result1 = mysqli_query($mysqli, $sql); 
$result2 = mysqli_query($mysqli, $sql3); 
// the $result2 query will insert the rf_id 
// so you can test this result to see if it's all successful 

Это должно удалить хороший фрагмент PHP из вашего кода.

+0

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

+0

Не беспокойтесь, рад помочь –

0

Похоже, что $value4 не определен до тех пор, пока не была создана строка $sql3. Попробуйте определить $sql3 после того, как вы определили $value4.

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