![](/img/trans.png)
[英]Inserting data from a form to multiple tables in a mysql database using php
[英]MySQL PHP - Inserting form data into tables. Unknown Error
因此,正如標題所述,如果表單通過了一些條件,我將嘗試將數據插入2個表中(用戶已登錄,用戶之前尚未對該產品進行投票,所有字段均已填寫) 。
當條件剛好時,它將數據完美插入兩個表中:
$sql = "SELECT productid FROM votes WHERE username='$username' LIMIT 1";
但是我意識到,如果用戶對任何一種產品進行了投票,那么他們的用戶名將出現在表格中,並且如果不對該產品進行投票,他們將無法通過該條件。 所以我剛剛添加:
$sql = "SELECT productid FROM votes WHERE username='$username' AND productid='$id' LIMIT 1";
現在,如果我嘗試將數據提交到數據庫,它將始終返回“將錯誤插入票表”消息,但不會返回mysql_error(),並且顯然不會在票表中插入新行,但是很奇怪會更新產品表。
我只是不知道發生了什么,所以如果有人可以幫助我診斷問題,我將非常感激! 這是代碼:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if($_POST['slider_surface'] !== "0" && $_POST['slider_edgewear'] !== "0" && $_POST['slider_centering'] !== "0" && $_POST['slider_corners'] !== "0"){
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$slider_surface = $_POST['slider_surface'];
$slider_edgewear = $_POST['slider_edgewear'];
$slider_centering = $_POST['slider_centering'];
$slider_corners = $_POST['slider_corners'];
$id = preg_replace('#[^a-z0-9]#i', '', $_GET['id']);
session_start();
$username = $_SESSION['username'];
//check if user has already voted
mysql_select_db('products');
$sql = "SELECT productid FROM votes WHERE username='$username' AND productid='$id' LIMIT 1";
$query = mysql_query( $sql, $conn );
$uname_check = mysql_num_rows($query);
if ($username){
if ($uname_check < 1) {
$sql = "INSERT INTO votes ".
"(username,productid,votesurface,voteedgewear,votecentering,votecorners,datetime) ".
"VALUES('$username','$id','$slider_surface','$slider_edgewear','$slider_centering','$slider_corners', now())";
$retval = mysql_query( $sql, $conn );
$id='';
// Make sure the _GET product ID is set, and sanitize it
$id = preg_replace('#[^a-z0-9]#i', '', $_GET['id']);
//Retrieves data from MySQL
$data = mysql_query("SELECT * FROM products WHERE id='$id'") or die(mysql_error());
$product = mysql_fetch_array( $data );
$newvotecount = $product['votecount'] + 1;
$newsum_surface = $product['sumsurface'] + $slider_surface;
$newsum_edgewear = $product['sumedgewear'] + $slider_edgewear;
$newsum_centering = $product['sumcentering'] + $slider_centering;
$newsum_corners = $product['sumcorners'] + $slider_corners;
$sql = "UPDATE products SET votecount='{$newvotecount}', sumsurface='{$newsum_surface}', sumedgewear='{$newsum_edgewear}', sumcentering='{$newsum_centering}', sumcorners='{$newsum_corners}' WHERE id='$id'";
$retval2 = mysql_query( $sql, $conn );
if(! $retval){
die('Error inserting into votes table: ' . mysql_error());
}
else if(! $retval2){
die('Error inserting into products table: ' . mysql_error());
}
$grading_error = 'success';
mysql_close($conn);
} else
$grading_error = 'duplicateuser';
} else
$grading_error = 'nouser';
}
else
$grading_error = 'emptyfields';}
?>
將數據插入表時存在問題,因此INSERT
語句必須存在錯誤。 正如@ user2910809在以前的注釋中所說的, sql
計算結果為:
INSERT INTO votes (username,
productid,
votesurface,
voteedgewear,
votecentering,
votecorners,
datetime)
VALUES ('magmar',
'52',
'7',
'6',
'5',
'5',
now())
這句話在語法上是正確的。 因此,如果有錯誤,則必須是插入的值。
正如@ user2910809對他的評論指出,有一個UNIQUE
的密鑰username
欄,它是什么引發錯誤。
因此,解決方案是修改表的索引以允許具有相同username
多行。
編輯 :如注釋中所建議,解決此問題的SQL是: ALTER TABLE votes DROP INDEX username;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.