2010-04-23 2 views
0
을지지 않습니다

다음과 같이 내 코드는 다음과 같습니다데이터베이스 INSERT 장소

<?php 
include("config.php"); 

$ip=$_SERVER['REMOTE_ADDR']; 

if($_POST['id']) 
{ 
    $id=$_POST['id']; 
    $id = mysql_escape_String($id); 

    $ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'"); 
    $count=mysql_num_rows($ip_sql); 

    if($count==0) 
    { 
     $sql = "update Messages set up=up+1 where mes_id='$id'"; 
     mysql_query($sql); 

     $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')"; 
     mysql_query($sql_in) or die(mysql_error()); 
     echo "<script>alert('Thanks for the vote');</script>"; 


    } 
    else 
    { 
     echo "<script>alert('You have already voted');</script>"; 
    } 

    $result=mysql_query("select up from Messages where mes_id='$id'"); 
    $row=mysql_fetch_array($result); 
    $up_value=$row['up']; 
    echo "<img src='button.png' width='110' height='90'>"; 
    echo $up_value; 

} 
?> 

내 문제가 삽입 과정이 전혀 발생하지 않는다는 것입니다. script 태그는 경고 상자를 울립니다. img 태그조차 웹 페이지에 표시됩니다. 그러나 삽입 프로세스가 수행되지 않습니다. 설정 파일은 정상입니다. 참고 :이 코드는 PHP 5.3이 설치된 로컬 컴퓨터에서 작동하지만 PHP 5.2가 설치된 서버에서는 작동하지 않습니다.

+0

멍청한 질문을 수정해야합니다,하지만 당신은 성공적으로 두 경우 모두에서 DB에 연결? 이 코드는 여기에 표시되지 않습니다. – Tom

+0

네, 성공했습니다 .. 다시 코드는 내 로컬 서버에서 제대로 작동하지만 내 wwebserver에서 작동하지 않습니다 – reggie

+0

하지만 데이터베이스에 새로운 값이 표시됩니까? – mck89

답변

0

유일한 설명은 $count==0 검사가 거짓이라는 것입니다. 이 해결 방법으로 시도 :

$ip_sql=mysql_query("select count(*) from Voting_IP where mes_id_fk='$id' and ip_add='$ip'"); 
$rc=mysql_fetch_row($ip_sql); 
$count=$rc[0]; 

대신 :

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'"); 
$count=mysql_num_rows($ip_sql); 
+0

다음 경고가 표시되므로 카운트 조건이 제대로 작동합니다. echo " "; 위에서 알 수 있듯이 위의 경고는 if 문 안에 insert 문 바로 아래에 있습니다. – reggie

+0

그렇다면 삽입 쿼리에 다른 가능성이 없습니다 – mck89

+0

그래서 if count = 0 코드가 실행됩니다. – reggie

0

당신이 따옴표와 함께 장난 시도 적이 있습니까? AFAIK, 작은 따옴표 내의 변수가 PHP에서 확장되지 않습니다.

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='".$id."' and ip_add='".$ip."'"); 
+0

큰 따옴표 안에 작은 따옴표를 사용하므로 아무 문제가 없지만 따옴표 문제가 자주 발생하므로 해결책이 될 수 있습니다. – mck89

+0

거의 올바른 - $ str = 'Hello $ planet '는 $ planet 변수의 값을 출력하지 않지만 "Hello'$ planet '"을 사용해야합니다. 첫 번째 예제에서는 문자열이 작은 따옴표로 묶여 있으며, 두 번째 예제는 작은 따옴표가 포함되어 있지만 큰 따옴표로 묶여 있습니다 (변수의 변환 포함). – Fenton

+0

큰 따옴표 안의 작은 따옴표는 다른 문자처럼 취급되므로 $ a가 1이면 " '$ a'"는 '1'입니다. – Fluffy

0

답변과 의견을 보면, 그것은 오래된 학교 도착 시간 : 당신이 찾고있는 무엇

를?

$ id 및 $ ip에 값을 넣고 있습니다. 그 중 하나가 비어 있거나 어떤 식 으로든 결과를 "이상하게"만드는 문자가 포함되어있을 수 있습니다. 실행하려고하는 원시 쿼리를 잘 살펴 봄으로써 변수의 일부가 사안을 뒤엎는 지 확인할 수 있습니다.

첫 번째 쿼리가 성공하면 당신은 확인하지 않는
+0

ok..will try that asap asap – reggie

0

:

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'"); 
$count=mysql_num_rows($ip_sql); 

이 더 ... or die(mysql_error()) 없다,하지만이없는 문제가, 쿼리가 실패하는 경우 때문에, 당신은 "잘못된를 얻을 것 가능성이 높습니다 문 핸들 "형식 오류 즉시 후 mysql_num_rows() 호출 할 때 입력하십시오.

SELECT COUNT(*) FROM Voting_IP 
WHERE (mes_id_fk = $id) AND (ip_add = $ip) 

당신은 검색 값, 단지 행 수 중 하나를 사용하지 않는, 그래서 일을 아무 문제가 없다 "* 선택"문체 팁, 나는 다음과 같이 첫 번째 쿼리를 다시 작성 좋을 것 데이터베이스가 적어도 가능한 모든 값에 대해 일부 처리를 수행하도록합니다. 이 시스템이 매우 많은 투표 수와 IP로 확장되면 count() 버전을 사용하는 것이 더 효율적입니다.

삽입이 수행되지 않지만 어느 것이 alert()이 발생하는지는 말하지 않습니다. 이는 삽입 쿼리에 오류가 있거나 첫 번째 쿼리가 0을 반환하고 삽입 쿼리가있는 전체 블록이 건너 뛰었습니다.

수동으로 업데이트/삽입 쿼리를 실행 해 보셨습니까? 업데이트가 성공했는지 여부는 아직 확인하지 않았습니다. 이후에 or die(mysql_error())이 없기 때문입니다. 아마도 외래 키 오류, 구문 오류 등이 있습니다.

0

ID를 기반으로 항목을 업데이트하는 경우 카운트가 0이 아닌 경우 업데이트하고 삽입하려는 것입니다. 0보다 큰, ..또는

1은 간단하게 밖으로 복용 == 0, 그것을

if($count) 
{ 
    $sql = "update Messages set up=up+1 where mes_id='$id'"; 
    mysql_query($sql); 

    $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')"; 
    mysql_query($sql_in) or die(mysql_error()); 
    echo "<script>alert('Thanks for the vote');</script>"; 


}