클라이언트 용 로컬 목록 사이트를 편집 할 수있는 웹 페이지를 만듭니다. mysql과 php에서 INSERT ... ON DUPLICATE KEY UPDATE
구문을 사용하고 있습니다.중복 키 업데이트에 삽입하면 0의 값이 반환됩니다.
편집-명부-exec.php
<?
//Array to store validation errors
$errmsg_arr = array();
//Validation error flag
$errflag = false;
$member_id = $_SESSION['MEMBER_ID'];
$userresult = mysqli_query($link, "SELECT username
FROM members
WHERE member_id = '$member_id'");
$row = mysqli_fetch_array($userresult);
$username = $row['username'];
//run a for loop to check for duplicates
for ($i=1; $i < 10; $i++) {
$selectbox = $_POST['listing'.$i];
for ($j=1; $j < 10; $j++) {
if ($j != $i) {
if ($_POST['listing'.$j] === $selectbox && $_POST['listing'.$j] != "") {
$errmsg_arr[] = "Duplicate listing source '$selectbox'";
$errflag = true;
break;
}
}
}
}
//if there are input validations redirect back to main page
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: edit-listings.php");
exit();
}
//run loop to define post variables
for ($k=1; $k < 10; $k++) {
${'listing'.$k} = mysqli_real_escape_string($link, $_POST['listing'.$k]);
${'listing'.$k.'_site'} = mysqli_real_escape_string($link, $_POST['listing'.$k.'_site']);
}
//insert listings into local_listings table for the user
$qry = "INSERT INTO local_listings (
member_id,
username,
listing1,
listing1_site,
listing2,
listing2_site,
listing3,
listing3_site,
listing4,
listing4_site,
listing5,
listing5_site,
listing6,
listing6_site,
listing7,
listing7_site,
listing8,
listing8_site,
listing9,
listing9_site)
VALUES (
'$member_id',
'$username',
'$listing1',
'$listing1_site',
'$listing2',
'$listing2_site',
'$listing3',
'$listing3_site',
'$listing4',
'$listing4_site',
'$listing5',
'$listing5_site',
'$listing6',
'$listing6_site',
'$listing7',
'$listing7_site',
'$listing8',
'$listing8_site',
'$listing9',
'$listing9_site')
ON DUPLICATE KEY UPDATE
listing1 = '$listing1',
listing1_site = '$listing1_site',
listing2 = '$listing2',
listing2_site = '$listing2_site',
listing3 = '$listing3',
listing3_site = '$listing3_site',
listing4 = '$listing4',
listing4_site = '$listing4_site',
listing5 = '$listing5',
listing5_site = '$listing5_site',
listing6 = '$listing6',
listing6_site = '$listing6_site',
listing7 = '$listing7',
listing7_site = '$listing7_site',
listing8 = '$listing8',
listing8_site = '$listing8_site',
listing9 = '$listing9',
listing9_site = '$listing9_site'";
$result = mysqli_query($link, $qry);
if (mysqli_affected_rows($result) < 1) {
$errmsg_arr[] = "Unable to insert listings for $username";
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
header ("location: edit-listings.php");
}
elseif (mysqli_affected_rows($result) === 1) {
$_SESSION['RESULT'] = "New listings for '$username' inserted successfully";
header ("location: edit-listings-success.php");
}
elseif (mysqli_affected_rows($result) === 2) {
$_SESSION['RESULT'] = "Listings for '$username' have been updated";
header ("location: edit-listings-success.php");
}
?>
데이터가 성공적으로 local_listings
테이블에 삽입되지만 mysqli_affected_rows
항상 0
의 값을 반환 : 아래는 코드입니다. 새 행을 삽입하는 경우 1
값을 반환하거나 단순히 업데이트하는 경우 2
값을 반환해야합니다. 왜 이런 일이 일어나고 있는거야?
하십시오을 데이터베이스 테이블의 컬럼에 대한 몇 가지 의미있는 이름을 사용합니다. – Lion
여러 열의 가능한 옵션을 가진 각각의 열거 형 필드이고 각 열은 다른 사이트에있을 수 있기 때문에 이름이 같은 열이 있습니다 – ZeLoubs