2009-07-02 4 views
1

저는 처음부터 MySQL/PHP를 가르치려고합니다. 다음 코드는 다양한 자습서 사이트에서 해제되었습니다. 내 웹 호스트에서 제공하는 phpMyAdmin을 사용하고 있습니다.MySQL : 양식 필드의 텍스트를 무시하는 이유는 무엇입니까?

"ID"라는 자동 증가 필드와 "first"(varchar, limit 30, null이 아님) 필드가있는 테이블을 만들었습니다. 그런 다음 "첫 번째"라는 텍스트 필드와 제출 버튼이있는 간단한 양식을 만들었습니다. 상자에 내 이름을 입력하고 제출을 클릭하십시오. ID로 데이터베이스에 행을 만들지 만 "첫 번째"필드는 항상 비어 있습니다.

'$ _POST [첫 번째]'를 몇 가지 똑같은 단어로 바꿔서 시도해 보았습니다. 단어가 테이블에 ID 번호가있는 것으로 나타났습니다. 그것이 실제로 데이터베이스와 대화하는 것을 알고있는 방법입니다. 텍스트 필드를 선택하지 않습니다.

INSERT 문을 실행 한 후에 테이블의 모든 레코드를 표시해야합니다. 모든 ID 번호를 표시 한 다음 "첫 번째"가 있어야하는 곳을 비 웁니다.

또한 INSERT 문을 표시합니다. INSERT INTO : 나는에 대한 단어를 대체 할 때 INSERT INTO tblHurray (ID 먼저) VALUES ('', '')

'$ _POST를 [처음], 에코는 다음과 같습니다 :이 에코 표시는 무엇인가 tblHurray (ID, 첫 번째) VALUES ('', 'words')

이것은 내 첫 번째 질문이므로 관련 정보를 빠뜨린 경우 알려 주시기 바랍니다. 그리고 당신의 도움에 미리 감사드립니다.

<form action="run_input.php" method="post"> 
Name: <input type="text" name="first"> 
<input type="Submit"> 
</form> 

이 "제출"때 실행되는 것입니다 클릭 :

양식입니다

<? 
include("run_connect.php"); // this connects to the database, this works 

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')"; 
mysql_query($step1); 
echo "$step1"; 

echo "<b><center>Database Output</center></b><br><br>"; 

$step2=mysql_query("SELECT * FROM tblHurray"); 

$num=mysql_numrows($step2); 

$i=0; 
while ($i < $num) { 

$firstname=mysql_result($step2,$i,"first"); 
$ID=mysql_result($step2,$i,"ID"); 
echo "$ID: $firstname<br />"; 

$i++; 
} 
?> 

답변

0

이 줄

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')"; 
다음과 같이 할 수

요구 :

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','" . mysql_escape_string($_POST['first']) . "')"; 

항상 배열 키 ([first]가 아니라 [ 'first'])를 인용하는 것이 좋습니다.

SQL 삽입을 방지하기 위해 데이터베이스에 삽입하기 전에 사용자 입력을 항상 이스케이프 처리하는 것이 좋습니다.

또한 HTML 양식의 입력 이름이 PHP 코드와 일치하는지 다시 확인하십시오.

$_POST['first'] 

당신이 정말로 그것을 배울려고하는 경우에, 다음 PHP PDO로 시작하지만

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','".$_POST['first']."')"; 

을 시도

$_POST['First'] 
+0

더 나은 방법은 준비된 문장을 사용하는 것입니다. PDO 또는 mysqli를 확인하십시오. –

+0

mySQL은 4.1의 진술을 준비했습니다 – Mathew

+0

두 분 모두 동의합니다. 한 번에 너무 많은 개념을 도입하고 싶지 않았습니다 :) –

1

같은 하지입니다. 장기간에 걸쳐 문제를 일으키지 않습니다. 특히 매개 변수화 된 쿼리를 사용하면 문제가 발생하지 않습니다.

+0

이것은 작동하지 않았습니다 ... 이전과 똑같은 문제가 발생했습니다 : ( –

+0

print_r ($ _ POST) 출력은 무엇입니까? – rfusca

0

마크 비크 (Mark Biek)는 그것을 단도로 만들었지 만, 부분적인 조정으로 mysql_real_escape_string 함수는 연결과 관련된 문자 집합을 고려하기 때문에 mysql_escape_string 함수보다 낫다.

관련 문제