2014-06-19 3 views
-3

나는 PHP &을 처음 사용하고 있으며 오류가 발생하며 쿼리에서 오류가 무엇인지 이해하지 못합니까? 기본적으로 사용자가이 양식을 작성하여 제출하도록 허용합니다. 폼이 제출 된 후에는 myphp에있는 MySQL 데이터베이스로 가야합니다. 삽입 코드가 정상적으로 작동하지만 웹 사이트에서 오류가 발생합니다. MySQL 쿼리의 오류는 무엇입니까?

내가 점점 오전 오류입니다 :

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com), AF_Name = VALUES('Name of A Person'), V_City = VALU' at line 7

그리고 다른 PHP 페이지로 이동 양식을 제출 한 후

. 양식이있는 페이지에 머물러 있기를 원합니다. 이 코드 & 양식은 다른 PHP 페이지에 있습니다.

RF_Name = VALUES('$_POST[RFname])', 
    RL_Name = VALUES('$_POST[RLname]'), 
    R_Email = VALUES('$_POST[sender]'), 
    AF_Name = VALUES('$_POST[AFname]'), 
    V_City = VALUES('$_POST[Vcity]'), 
    V_Country = VALUES('$_POST[Vcountry]'), 
    Time = VALUES('$_POST[time]'), 
    Date = VALUES('$_POST[date]'), 
    Message = VALUES('$_POST[body]') 
+0

'values ​​()'함수를 잘못 사용하고 있습니다. 'fieldname = values ​​(fieldname), 또는'fieldname = $ value_for_field'이어야합니다. –

+0

현재 코드는 [** SQL injection **] (http://stackoverflow.com/q/60174/)에 열려 있습니다. Prepared statements ** [http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php와 함께 [**'mysqli_ *] 또는 [** PDO **] (http : //php.net/pdo)와 [** prepared statements **] (http://php.net/pdo.prepared-statements)를 사용하십시오. –

답변

0

따옴표로 당신의 가치를 동봉 업데이트 :

내 코드입니다 제안 된 R_email 컬럼의 전자

다른 사람들이 당신이 * 기능을 SQL 주입으로부터 자신을 보호하고 업그레이드 mysql_로 볼 필요가 언급했듯이에 Mysqli 또는 PDO 당신이 당신의 쿼리 매개 변수를 살균하지 않을 것을

+0

값이 on duplicate update – exussum

+0

감사합니다. exussm 덕분에 그에 대한 대답이 적절하게 업데이트되었습니다. –

+0

그리고 양식이 다른 양식으로 간다 .. 그걸 내가 도울 수 있니 .. ?? – MaXx

0

이 당신은 가치있는 원하는

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

R_Email = VALUES(R_Email) 
해야한다 :

<?php 

    $con = mysql_connect(host, User_Name, Password, DB_Name); 

if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("user", $con); 

$sql="INSERT INTO request (RF_Name, RL_Name, R_Email, AF_Name, V_City, V_Country, Time, Date, Message) 
    VALUES 
    ('$_POST[RFname]', '$_POST[RLname]', '$_POST[sender]', '$_POST[AFname]', '$_POST[Vcity]', '$_POST[Vcountry]', '$_POST[time]', '$_POST[date]', '$_POST[body]') 
ON DUPLICATE KEY UPDATE 
    RF_Name = VALUES($_POST[RFname]), 
    RL_Name = VALUES($_POST[RLname]), 
    R_Email = VALUES($_POST[sender]), 
    AF_Name = VALUES($_POST[AFname]), 
    V_City = VALUES($_POST[Vcity]), 
    V_Country = VALUES($_POST[Vcountry]), 
    Time = VALUES($_POST[time]), 
    Date = VALUES($_POST[date]), 
    Message = VALUES($_POST[body])"; 

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

mysql_close($con) 
?> 
+0

Sidenote : 전자 메일 주소가 'int'인 것 같지 않으므로 값을 인용해야합니다. –

+0

@ Fred-ii- - 해당 열을 참조하는 중 중복에 대한 구문을 확인하십시오. – exussum

+0

그 안에있는 예는 숫자 ('int's)와'email @ example.com'과 같은 값을 표시하지 않습니다. 오류. –

0

귀하의 문제는 중 . 매개 변수화 된 쿼리와 함께 PDO 또는 mysqli_ *를 사용해보십시오. 이렇게하면 매개 변수가 쿼리에 올바르게 인코딩되고 구문이 엉망이되지 않게됩니다.