2016-06-24 17 views
1

Ich versuche, über ein Formular eine MySQL-assoziativ (viele zu viele) Tabelle zu füllen einreichen. Grundsätzlich versuchen Sie, diese Seite zu verwenden, um eine "Rote Fahne" mit eins-zu-vielen "Produkten" zu verbinden.PHP - Insert in assoziative Tabelle

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

?> 

Wenn er ausgeführt wird, schließt der Code erfolgreich aber der Wert von rf_id in prod_RF Tabelle ist immer Null. Das ist seltsam, denn wenn ich die Zeile auszeichne, wird der erwartete Wert auf dem Bildschirm ausgegeben. Aus irgendeinem Grund, wenn ich den gleichen Wert ($ value4) als Eingabe in einer SQL-Abfrage ($ sql3) zu verwenden versuchen, nicht etwas.

Vielen Dank für alle Anregungen, wie ich bin ziemlich neu in diesem alles.

+0

kurz nach '$ value3 = $ _POST [ 'prod_id'];' definieren '$ value4 = '';' und überprüfen –

+0

diese Versuchte ... hat nicht funktioniert. Trotzdem danke! – Ben

Antwort

1

Ein besserer Weg, dies zu tun ist, um die MySQL-Funktion verwenden, um den letzten Einsatz-ID zu erhalten, so dass Sie die zweite Abfrage überspringen.

$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 

Das sollte einen schönen Brocken von PHP aus Ihrem Code entfernen.

+0

Sie Sir, sind ein Gelehrter und ein Gentleman. Ich habe den ganzen Tag mit diesem Problem herumgewirbelt und dein Code hat wie ein Zauber funktioniert (und entfernt wie 10 Zeilen Code!). Vielen Dank! – Ben

+0

Keine Sorgen, froh zu helfen –

0

Es sieht aus wie $value4 ist nicht definiert, bis die $sql3 Zeichenfolge in Handarbeit gemacht wurde. Versuchen Sie definieren $sql3, nachdem Sie $value4 definiert haben.