2017-09-07 4 views
0

IF 문 내에서 데이터베이스를 업데이트하려고하지만 작동하지 않는 것 같습니다. email_sent가 1로 변경되지 않습니다. 내 진술이 맞습니까?IF 문에서 데이터베이스 업데이트

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
$item=$row1['item']; 
$location=$row1['location']; 
$quantity=$row1['quantity']; 
$threshold=$row1['threshold']; 
$emailSent=$row1['email_sent']; 
} 


if ($quantity <= $threshold && $emailSent == 0) { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
email_sent = '1' WHERE id = '$id' "); 
} else { 
mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
id = '$id' "); 
} 
+0

email_sent 정수 또는 문자열입니까? ''1 ''은 문자열이기 때문입니다. 당신은 단지 '1'을 사용해야합니다 –

+0

@JuanCarlosOropeza 그게 문제가 아니에요, MySQL은 자동으로 타입을 변환합니다 –

+0

어쩌면 당신은 더 나은 이해를 위해 전체 스크립트를 보여 주어야합니다. 예를 들어 $ n_quantity 변수의 출처는 어디입니까? –

답변

1

너무 빨리 루프를 닫습니다. 당신은 단지 루프의 마지막 값 점점 다음 $n_quantity 변수에

$result2 = mysql_query ("SELECT * FROM stock_control WHERE id = '$id' "); 

while ($row1 = mysql_fetch_array($result2)) 
{ 
    $item=$row1['item']; 
    $location=$row1['location']; 
    $quantity=$row1['quantity']; 
    $threshold=$row1['threshold']; 
    $emailSent=$row1['email_sent']; 

    if ($quantity <= $threshold && $emailSent == 0) { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysql_query("UPDATE stock_control SET quantity=quantity - '$n_quantity' WHERE 
     id = '$id' "); 
    } 
} 
+0

그래서 그것은 데이터베이스를 업데이트하지만, 다음 IF가 작동하는 데 충분한 시간이 없습니다. 나는 그것을 준비하고 이메일을 보낸 다음이 코드를 if ($ emailSent == 1) { $ message = implode ("\ r \ n", $ message); mysql_query ("UPDATE stock_control SET email_sent = 2 WHERE id = '$ id'") ;; } – Coops

+0

아니요, 잘못 설명해 죄송합니다. 타이밍 문제는 아닙니다. INSIDE while 루프에서 DB를 업데이트해야합니다. 동안 ..{ ... }. 나는 루프를 둘러싸 기 위해 while 문을 닫았습니다. –

0

확인을 제대로 정의하지 않는 것 같습니다. 대신 $quantity을 찾으셨습니까?

테이블의 한 행 (주어진 id가있는 행)만을 다루기 때문에 while 루프가 필요하지 않을 수 있습니다. 그렇지 않으면 더 많은 행이 있으면 주어진 while 루프가 너무 일찍 닫혔습니다.

SELECT *은 너무 많은 열을 선택할 수 있으므로 불리 할 수 ​​있습니다. 또한 msyql_query의 사용은 권장되지 않으므로 mysqli_query 또는 PDO를 사용해야합니다.

$result2 = mysqli_query($con,"SELECT item, location, quantity, threshold, email_sent from stock_control where id = '$id'"); 

list($item,$location,$quantity,$threshold,$emailSent) = mysqli_fetch_array($result2); 

if ($quantity <= $threshold && $emailSent == 0) { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity', 
     email_sent = '1' WHERE id = '$id' "); 
    } else { 
     mysqli_query($con,"UPDATE stock_control SET quantity=quantity - '$quantity' WHERE id = '$id' "); 
    } 
0

해상도는 시간 쿼리에 관련된 때문에 내가 연결을 닫고 DB를 쿼리 내 HTML 후 새 연결을 열 필요했다 : 그래서 다음은 $con가 데이터베이스 연결라고 가정하면, 도움이 될 수 있습니다 .

귀하의 의견에 많은 감사 드리며 앞으로도 계속 도움이 될 것입니다.

:)