2016-06-24 3 views
1

フォーム提出を介してmysql連想型(多対多)表にデータを挿入しようとしています。基本的には、このページを使用して、1対多の「製品」に「レッドフラグ」を関連付けます。PHP - 連想表に挿入

Screenshot of input form

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); 

?> 

実行されると、コードが正常に完了BUT prod_RFテーブルのRF_IDの値は常にゼロです。これは、私がコメントを外すと

echo $value4; 

の行が表示されるため、期待値が画面に表示されます。何らかの理由で、SQLクエリ($ sql3)への入力と同じ値($ value4)を使用しようとすると、何かが失敗します。

私はこのすべてにかなり新しいので、任意の提案ありがとう。

+0

'$ value3 = $ _POST ['prod_id'];' $ value4 = ''; 'を定義し、 –

+0

をチェックしてみてください...うまくいきませんでした。しかし、ありがとう! – Ben

答えて

1

これを行うより良い方法は、最後の挿入IDを取得するためにMySQL関数を使用して、2番目のクエリをスキップできるようにすることです。

$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 

これでコードからコードを削除する必要があります。

+0

あなたは学者で、紳士です。私は一日中この問題を抱えていました。あなたのコードは魅力的に働きました(そして10行以上のコードのように削除されました!)。ありがとう! – Ben

+0

心配する必要はありません。 –

0

$value4は、$sql3文字列が作成されるまで定義されていません。 $value4を定義した後で$sql3と定義してみてください。