2012-07-28 4 views
0

jquery 함수를 사용하여 새 레코드를 쓰려고합니다.삽입이 MySQL에서 작동하지 않습니다

$.post("insertuser.php",$("#rohanStart").serialize(),function(data){ 
    alert(data); 
}); 

이것이 작동하는 것 같습니다. echo'ed statmenet으로 경고를받습니다. 문제는 값이 데이터베이스에 기록되지 않는다는 것입니다. Query Statement에 잘못된 점이 있습니까? 먼저 jQuery를 또는 어떤 프레임 워크를 사용하지 않는

mysql_query("INSERT INTO ajax_demo1(FirstName,LastName,Unit,Group,photo) 
     VALUES (
      '".$arr['FirstName']."', 
      '".$arr['LastName']."', 
      '".$arr['Unit']."', 
      '".$arr['Group']."', 
      '".$arr['photo']."' 
     )"); 

echo $arr['Group']; 
+0

클라이언트와 웹 서버 (AJAX 부분) 간의 통신 또는 웹 서버와 데이터베이스 (MySQL 부분) 간의 통신 중 하나를 선택하십시오. 이렇게하려면 기본적인 디버깅 기술이 필요합니다. 그것을 써. – tdammers

+0

'print_r ($ arr);을 실행하십시오. –

+2

또한 변수를 직접 쿼리에 삽입하고 있습니다. 이것은 용서 할 수 없습니다 - 그것은 SQL injection에 대한 모든 종류의 문을 열었습니다. 그리고 그것은 또한 잘못되었습니다 (누군가의 성이 "O'Brien"이라면?). 매개 변수화 된 쿼리에 대해 배워서 사용하십시오 (힌트 : mysql_XXXX API는 이들을 제공하지 않으므로 mysqli 또는 PDO로 전환해야합니다). 실패하면, 최소한 쿼리에 삽입하기 전에 변수에 mysql_real_escape_string을 실행하면됩니다. 총알 증거는 아니지만 뭔가 있습니다. – tdammers

답변

1

, 그들은 DOM 따라서 스크립트에서 모호성 엄청난 양의 추가와 함께 제대로 작동하지 않는 독점적 인 마이크로 소프트의 JScript innerHTML을 방법에 의존하고있다.

둘째, 데이터베이스에 들어가는 데이터를 올바르게 이스케이프 처리하지 못하는 경우 심각한 보안 문제입니다.

셋째, 데이터베이스 쿼리에 대한 접근 방식은 오류 처리를 고려하지 않고 쿼리를 직접 내버려두고 최선의 결과를 얻기를 바랍니다.

언제든지 쿼리의 번호를 매기고 아래 나와있는대로 묶어야합니다. 오류 외에도 데이터베이스 구조를 사용하여 조건을 미리 설정하는 것이 좋습니다. 먼저 성공하면 실행해야하며 그 다음에는 들여 쓰기를 늘리지 못합니다 (단 한 개의 공간으로이 탭은 5 개의 화면을 가로로 스크롤 할 때 낭비하지 않습니다). 자신의 코드에서 자신이 어디에 있는지 시각화 할 수 있습니다.

$query1 = "SELECT * FROM table_name WHERE something='value'"; 
$result1 = mysql_query($query1); 

if ($result1) 
{ 
$row1 = mysql_fetch_assoc($result1); 
} 
else {mysql_error_report($query1,mysql_error(),__FUNCTION__);} 

메인 헤더가 포함 된 경우 당신은 SQL의 오류를 기록하는 데 사용할 수있는 보편적 인 MySQL의 오류 처리 기능을 가져야한다 (당신이 메인 헤더가 올바른 AJAX를 제외한 모든 요청에 ​​포함되어 있나요? DO).

다음은 범용 데이터베이스 오류 처리기입니다. HTTP, JavaScript, PHP 및 SQL 오류에 대한 관리 오류 로그가 있어야 방문자가 불편을 겪는 대신 문제를 검토하고 수정할 수 있습니다.

function mysql_error_report($q,$e,$f) 
{ 
if (isset($_SESSION['database'])) 
{ 
    if (isset($_SESSION['id_member'])) {$id = $_SESSION['id_member'];} else {$id = 0;} 
    if (isset($_SESSION)) {$session = mysql_real_escape_string(session_id());} else {$session = 0;} 
    $ip = mysql_real_escape_string(getenv('REMOTE_ADDR')); 

    $query = mysql_real_escape_string($q); 
    $error = mysql_real_escape_string($e); 
    $function = mysql_real_escape_string($f); 
    if (isset($_SESSION['type'])) {$type = mysql_real_escape_string($_SESSION['type']);} else if (isset($_SESSION['cms_browser'])) {$type = 'Browser';} else {$type = 'Unknown';} 
    if (isset($_SERVER['REQUEST_URI'])) {$url = $_SERVER['REQUEST_URI'];} else {$url = '';} 
    if (isset($_SERVER['HTTP_USER_AGENT'])) {$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);} else {$ua = '';} 

    $query1 = "INSERT INTO log_errors_sql (id_session, type, id_user, date, ip, function, mysql_error, mysql_query, url, user_agent) VALUES ('$session', '$type', '$id', NOW(), INET_ATON('$ip'), '$function', '$error', '$query', '$url', '$ua')"; 
    $result1 = mysql_query($query1); 

    if (!$result1) {mysql_error_report_mail($q,$e,$f,$ua);} 
} 
else {mysql_error_report_mail($q,$e,$f);} 
} 

이러한 접근 방식을 사용하면 코딩 방법을 더욱 엄격하게 강화할 수 있습니다. 모호성을 원하지 않으면 코딩에 대한 주관성이 낮을수록 코드가 더 많이 처리 될 수 있기 때문에 코드에 대해 총체적인 단서가되고 싶습니다.

공백 또한 매우 느립니다.

이 ...

INSERT INTO ajax_demo1(FirstName,LastName,Unit,Group,photo) 

이 같은 포맷해야합니다 ...

INSERT INTO ajax_demo1(FirstName, LastName, Unit, Group, photo) 
당신이 지출하지 않은 경우 즉, 중요처럼 공백을 유지하는 이유 당신은 요청할 수 있습니다

("고급 찾기 & 바꾸기"를 찾아보십시오, 그것은 와인/리눅스에서 작동하고 원주민 리눅스 콘솔 명령 성능 현명하고 싼 싸구려, 정규식 등 지원)에서 쓰레기를 날려 버리고, 눈 깜박 할 사이에 사이트 전체를 대량으로 수정하게됩니다. 왜냐하면 당신의 공백조차도 똑같은 엄격한 접근법이기 때문입니다.

내 충고에 유의하여 AFR (고급 찾기 및 바꾸기)을 사용하여 "mysql_query"의 모든 인스턴스를 검색하고 작성한 모든 서식을 수정하십시오. 약간의 AJAX 알림을 섞어 라. 하나의 alt-tab없이 브라우저에있는 동안 즉시 오류를 볼 수있다. 그게 내가 굴러가는 방법이야.

... 물론 이렇게하면 디버깅이 훨씬 쉬워집니다. 이것은 물고기가 아니며 낚시입니다. 도움이되기를 바랍니다.

+0

자세한 답장을 보내 주셔서 감사합니다. 모든 도움이 필요합니다. 보안 문제를 해결할 것입니다. 지금은 그룹이 예약 된 키워드임을 깨달았습니다. 내가 데이터베이스 컬럼 헤더를 RGroup으로 변경했을 때 작업이 시작되었습니다 :) – rohan

관련 문제