2013-03-17 2 views
1

나는 작동하지 않는 문에 꽤 표준 MySQL 삽입문을 가지고있다. 이 페이지에 HTML 양식을 게시하고 있으며 정보를 번역하고 표 (pending_jobs)에 삽입하고 있습니다. 그것은 처음으로 일했고 그 이후로 일하지 않았습니다. 나는이 행을 업데이트하려고하지 않고이 코드가 제출 될 때마다 새로운 것을 추가하여 매우 간단 할 것이라고 생각했습니다. 여기 코드는 : 그것은 profile.php 페이지로 리디렉션됩니다INSERT INTO 처음으로 MySQLi 문이 작동하지 않는다.

<?php 
include('includes/connect.php'); 
$id=$mysqli->real_escape_string($_POST['id']); 
$sql = "SELECT * FROM users WHERE id='$id'"; 
$result = $mysqli->query($sql); 
$row = mysqli_fetch_array($result); 

$user_id = $_SESSION['user_id']; 

$company_name = $row['company_name']; 
$date_registered = $row['date_registered']; 
$job_title=$mysqli->real_escape_string($_POST['jobtitle']); 
$job_description=$mysqli->real_escape_string($_POST['jobdescription']); 
$salary=$mysqli->real_escape_string($_POST['salary']); 
$industry_sector=$mysqli->real_escape_string($_POST['industry']); 
$number_people=$mysqli->real_escape_string($_POST['num_people']); 

if(isset($_POST['payment']) && $_POST['payment']=='yes'){ 
$payment_received = 'Yes'; 
} 
else{ 
$payment_received = 'No'; 
} 

$sql_add = "INSERT INTO pending_jobs (company_name, job_title) VALUES ('$company_name', '$job_title')"; 
$result_add = $mysqli->query($sql_add); 

if(isset($result_add)){ 
    session_start(); 
    $id = $row['id']; 
    $_SESSION['user_id'] = $user_id; 
    header('location:profile.php?id='.$id); 
} else { 
echo "<script>alert('".$job_title."');</script>"; 
} 
?> 

그래서 나는 그 $의 result_add이 실제로 겪고 알고 있지만 데이터베이스에서 테이블을 검사 할 때 새로운 행이 없습니다. 왜 새로운 행을 만들지 않을지에 대한 아이디어가 있습니까?

+2

흥미로운 사례 ... 필드를 '고유'로 설정 했습니까? 그것은 침묵하는 실패를 설명 할 것입니다. 오류를 가져 오려고 할 수 있습니다. http://php.net/manual/en/mysqli.error.php –

답변

4

query

$result_add = $mysqli->query($sql_add) or die($mysqli->error); 

을 변경하고 당신이 한 번에 문제를 볼 false 인 경우에도 또한,는 isset()는 true가됩니다. $result_add이 삽입을위한 하나 true 또는 false 될 것입니다 때문에 또한

if (isset($result_add)) { 

항상 true가됩니다.

+0

좋습니다! 그것은 테이블의 구조에 대한 실수였다. company_name 변수가 실수로 기본 색인으로 설정되어 같은 행의 두 개를 처리하지 못하게했습니다. 감사! – MillerMedia

0

고유 한 열 또는 인덱스로 인해이 삽입 문을 막을 수 있습니다. phpmyadmin 또는 mysql 콘솔에서 동일한 삽입을 테스트하기 만하면됩니다. $의 result_add가 :

0

문이 실패 할 경우를 대비하여 오류를 반환하여 잘못된 점을 알 수 있도록하십시오.

$sql = "SELECT * FROM users WHERE id='$id'"; 
$result = $mysqli->query($sql) or die("cannot select from users"); 

$result_add = $mysqli->query($sql_add) or die("cannot insert"); 

(일부는 or trigger_error(mysqli->error.$result_add);을 제안하지만 이것을 테스트하지는 않았습니다).

replace `if(isset($result_add)){` with `if($result_add){ 

표를 보는 것이 좋습니다.