2009-08-26 3 views
0

쇼핑 바구니에 항목을 추가하는 PHP 스크립트를 작성 중입니다. 내 쇼핑 바구니 테이블에는 사용자 ID, 제품 ID, 세션 ID, 메모 및 기타 몇 가지 필드가 있습니다. 필드 중 일부는 비워 둘 수 있습니다. 예 :MySQL에서 변수 존재를 확인하는 간결한 방법 PHP를 사용하는 INSERT QUERY

누군가가 로그인하지 않은 경우 테이블에 세션 ID를 저장하고, 로그인 한 경우 사용자 ID를 추가하여 테이블의 항목과 일치하는 영구적 인 방법을 사용합니다. 사용자. 그럴 경우 사용자 ID를 추가합니다. 는 INSERT 쿼리에 올 때, 나는 이런 식으로 뭔가를 할 수 있습니다

$의 add_sql이 = "sessionBasket (사용자 ID) 가치 ( '삽입'는 isset을 ($ _ SESSION ["용자 ID "]) $ _SESSION [".? userid "] :" ")." ' ";

사람들이 로그인 할 수 있는지 여부에 관계없이 변수 검사 및 분기 작업에 많은 시간을 절약 할 수 있습니다. 항목에 메모를 포함 할 수도 있고 가지 않을 수도 있습니다.

답변

1

Yikes! SQL Injection! 전체 데이터베이스를 잃을 수 있습니다

SQL 삽입에 대한 준비된 문을보아야합니다.

당신은 mysqli 인터페이스를 사용할 필요가 있지만 다음과 같이 진행됩니다

$statement = $db_connection->prepare("insert into ... VALUES(?)"); 
$statement->bind_param("id", $sid); 
$statement->execute(); 

은 SQL 주입 공격을 방지 할 수 있습니다.

적어도 최소한 문자열을 이스케이프 처리해야합니다. 내가 아는

$sid = isset($_SESSION[userid]) ? mysql_real_escape_string($_SESSION[userid])) : ''; 
$add_sql = "insert into ... values($sid)"; 
+0

, 나는 알고있다 - 난 그냥 ㅎ 당신에게 내 문제와 관련 베어 뼈를주고 있었다. 나는 자바 스크립트 패턴 매칭을 수행하고 입력 할 때 불법 문자를 교체 한 다음 PHP 정규식을 실행 한 다음 mysqli_real_escape_string을 실행하고 각 입력을 다듬고 패스하면 htmlspecialchars()를 한 번만 삽입한다. 그래서 데이터베이스를 삽입 할 수 없다고 말하면서 나를 믿으십시오. :) – user97410

+0

하지만 실제로, 당신은 제 질문에 어쨌든 대답했습니다. 나는 그 과제를 별도의 단계로 처리 할 것입니다. – user97410