2011-12-06 2 views
1

양식에서 항목을 읽은 다음 해당 데이터 테이블을 업데이트하고 로그인 한 사용자의 사용자 이름을 첨부해야하는 다음과 같은 PHP가 있습니다. 그러나 어떤 이유로 인해 데이터베이스가 ' t 갱신. mySQL_query 테이블을 업데이트하지 않음

$Date = $_POST["Date"]; 
$Description = $_POST["Description"]; 
$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 
$Username = $_SESSION['username']; 
mysql_connect("localhost", "dbusername", "dbpass"); 
mysql_select_db("dbname",$connect) or die("Unable to select database"); 

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
VALUES ($Date, $Description, $Lat, $Lon, $Username)"); 

if (!mysql_query($sql)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($con); 

echo $Date; 
echo $Description; 
echo $Hour; 
echo $Min; 
echo $Username; 

어떤 도움 당신은 작은 따옴표로 쿼리 입력 변수를 동봉하지 않은

+0

오류 메시지가 표시됩니까? – rdlowrey

+0

아니요 아직 데이터베이스에 새로운 행이 생성되지 않았습니다. 주된 문제는 – MadMoney

+0

mysql 쿼리의 결과와'echo $ sql; '결과를 게시 할 수 있습니까?'SHOW CREATE TABLE tbl_name' 여기서'tbl_name'은 테이블의 이름입니까? –

답변

4

에 미리 감사드립니다. 당신은 쿼리 실패 mysql_error() 불렀다

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
    VALUES ('$Date', '$Description', '$Lat', '$Lon', '$Username')"); 

는, 아마도, 그 첫 번째 날짜 입력 값 근처에 구문 오류가 인쇄.

SQL 삽입 공격으로부터 자신을 보호하려면 쿼리에 전달하기 전에 mysql_real_escape_string()을 사용하여 으로 변수를 이스케이프해야합니다.

$Date = mysql_real_escape_string($_POST["Date"]); 
$Description = mysql_real_escape_string($_POST["Description"]); 
// You might want to check sane bounds for these float values 
// in addition to casting them as floats 
$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 
// Hopefully $Username is already sane, but escape to be safe 
$Username = mysql_real_escape_string($_SESSION['username']); 

mysql_select_db()를 호출, 두 번째 매개 변수는 선택 사항이며, 실제로 당신은 당신의 코드에서 $connect를 정의하지 않았습니다. 나는 당신이 의미 의심 :

$connect = mysql_connect("localhost", "dbusername", "dbpass"); 
mysql_select_db("dbname",$connect) or die("Unable to select database"); 
+0

이렇게해야합니까? $ Date = mysql_real_escape_string ($ _ Post ("Date")) 다른 표현식을 사용해야합니까? 빠른 응답 주셔서 감사합니다 – MadMoney

+0

@ MadMoney 위의 내용을 모두 추가했습니다. –

+0

내가 코드를 업데이트 날짜의 테스트 값 실행 : 2012년 12월 11일 설명 : 예 시간 : 10 분 : 50 를하고는 ExampleUser 이었다 로그인 한 사용자가 웹 사이트 나에게 다음과 같은 오류를 반환 오류 : SQL 구문에 오류가 있습니다. 라인 2에서 ', 10, 50,'근처에서 사용할 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 이것은 float에 문제가 있습니까? 이 문제를 해결해 준 것에 대해 다시 한번 감사드립니다. 나는 이런 종류의 물건들 때문에 너무 길다. – MadMoney

0

음, 여기에 좋은 제안을 많이하지만, 당신이 그것을 게시 된 코드를 하나의 눈부신 문제가있다. 당신은 당신이 쿼리를 작성할 때 각각 $ 위도와 $ 론으로 그 값을 참조하고, 그러나 ... $ 시간 각각 $ 최소라는 이름의 PHP 변수에 게시물에서

$Hour = (float)$_POST["Lat"]; 
$Min = (float)$_POST["Lon"]; 

를 위도와 경도 값을 할당하는 ....

$sql = ("INSERT INTO Table (Date, Description, Hour, Min, Username) 
VALUES ($Date, $Description, $Lat, $Lon, $Username)"); 
당신은 당신이 실제로 $ 위도 또는 $ 론에 값을 할당 할 게시 된 코드에서 아무데도

, 그러나 당신이 당신의 쿼리의 매개 변수에 해당 값을 할당 할. 본질적으로 존재하지 않는 쿼리에서 variable을 호출합니다.

관련 문제