サブクエリのWHERE条件に基づいて新しいテーブルに挿入しようとするときに問題が発生します。サブクエリを使用してMySQLに複数の行を挿入する
は、私は1つのテーブルと呼ばれているproductoptions 4列LineID、ProductSize、ProductColourを持っている、ProductIDの
私は価格、第二のテーブルはproductprice 2列LineIDがあり呼ばれてい
私のアプリケーションはPHP postメソッドを使用して、単純なフォームからユーザー入力 'productID'を受け入れます。必要なのは、フォームにユーザーが指定したproductIDに基づいてproductpliceテーブルに新しい行を挿入して、productoptionsテーブルに存在するすべてのLineIDに対して新しい行を挿入することです。
私のPHPコードは以下の通りです:
if (isset($_POST['btn-add-price'])) {
$productID = mysqli_real_escape_string($con, $_POST['productID']);
$price = mysqli_real_escape_string($con, $_POST['price']);
if(empty($productID)) {
$error = true;
$num_error_two = "Please enter a value";
}
if(!is_numeric($productID)) {
$error = true;
$value_error_two = "Data entered was not numeric";
}
if(empty($price)) {
$error = true;
$num_error_three = "Please enter a value";
}
if(!is_numeric($price)) {
$error = true;
$value_error_three = "Data entered was not numeric";
}
if (!$error) {
if(mysqli_query($con, "INSERT INTO productprice (LineID,Price) VALUES(SELECT(LineID FROM productoptions WHERE LineID = '" . $productID . "'), '" . $price . "')")) {
$successmsg = "Successfully Added!";
} else {
$errormsg = "Product already exists!";
}
}
}
フォームコード:
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" class="col span-1-of-2 product-submit-form-form">
<div class="row">
<div class="col span-1-of-3">
<label for="name">Product ID</label>
</div>
<div class="col span-2-of-3">
<input type="text" name="productID" id="productID" placeholder="Product ID" required><br>
<span class="text-danger"><?php if (isset($value_error_two)) echo $value_error_two; ?></span>
<span class="text-danger"><?php if (isset($num_error_two)) echo $num_error_two; ?></span>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label for="name">Price</label>
</div>
<div class="col span-2-of-3">
<input type="text" name="price" id="price" placeholder="Price" required><br>
<span class="text-danger"><?php if (isset($value_error_three)) echo $value_error_three; ?></span>
<span class="text-danger"><?php if (isset($num_error_three)) echo $num_error_three; ?></span>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label> </label>
</div>
<div class="col span-2-of-3">
<input type="submit" value="Add" name="btn-add-price">
</div>
</div>
</form>
現在、これは、$ ERRORMSG
が、私もこの正しい方法に近づいてるスロー?私はちょうどPHPになって穏やかであり、私はいくつかの分野で私の理解が不足していると感じることができます!
提案を改正コード:
if (isset($_POST['btn-add-price'])) {
$productIDTwo = mysqli_real_escape_string($con, $_POST['productIDTwo']);
$price = mysqli_real_escape_string($con, $_POST['price']);
//name can contain only alpha characters and space
if(empty($productIDTwo)) {
$error = true;
$num_error_two = "Please enter a value";
}
if(!is_numeric($productIDTwo)) {
$error = true;
$value_error_two = "Data entered was not numeric";
}
if(empty($price)) {
$error = true;
$num_error_three = "Please enter a value";
}
if(!is_numeric($price)) {
$error = true;
$value_error_three = "Data entered was not numeric";
}
if (!$error) {
if(mysqli_query($con, "INSERT INTO productprice (LineID,Price) SELECT(LineID, " . $price . " FROM productoptions WHERE LineID = '" . $productIDTwo . "')")) {
$successmsg = "Successfully Added!";
} else {
$errormsg = "Product already exists!";
}
}
}
これはまだ$のERRORMSGをスローします - 私は、SQLクエリ上記の$ successmsgを追加し、持つ問題であるように見えるんので、ブラウザに表示されませんSQLコードではなくフォーム入力エラーですか?
正しいコード:
if (isset($_POST['btn-add-price'])) {
$productIDTwo = mysqli_real_escape_string($con, $_POST['productIDTwo']);
$price = mysqli_real_escape_string($con, $_POST['price']);
//name can contain only alpha characters and space
if(empty($productIDTwo)) {
$error = true;
$num_error_two = "Please enter a value";
}
if(!is_numeric($productIDTwo)) {
$error = true;
$value_error_two = "Data entered was not numeric";
}
if(empty($price)) {
$error = true;
$num_error_three = "Please enter a value";
}
if(!is_numeric($price)) {
$error = true;
$value_error_three = "Data entered was not numeric";
}
if (!$error) {
if(mysqli_query($con, "INSERT INTO productprice (LineID,Price) SELECT LineID, " . $price . " FROM productoptions WHERE ProductID = '" . $productIDTwo . "'")) {
$successmsg = "Successfully Added!";
} else {
$errormsg = "Product already exists!";
}
}
}
間違った場所でSELECTとLineIDの間に開いたかっこがあると思いますか?'' $ price。 '') "' –
私はあなたとは思えません。( "LineID、Price")サブクエリが必要です。 'select into select'を使います。古い例、http://stackoverflow.com/questions/30290438/insert-data-to-table-at-once-which-retrieve-from-mysql-select-command/30290474#30290474また、 'Product already exists! 'の前に、エラーが重複していて何か他ではないことを確認する必要があります。 – chris85