2011-07-27 5 views
2

MySQL 데이터베이스에 2 필드 입력 양식을 만들고 싶습니다. 데이터베이스에 아무런 문제없이 연결할 수 있으며 원하는 경우 게시 할 수도 있지만 양식에 오류가 있습니다.간단한 PHP-MySQL 양식의 문제

<? 
mysql_select_db("copoetry", $con); 
$sql="INSERT INTO Poems (Title, Privacy) 
VALUES 
('$_POST[title]','$_POST[privacy]')"; 

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

<form action="insert.php" method="post"> 
Title: <input type="text" name="title" /> 
Privacy: <select type="text" name="privacy" /> 
    <option value="public">Publico</option> 
    <option value="private">Privado</option> 
</select> 
<input type="submit" /> 
</form> 

이것은 insert.php 파일은 다음과 같습니다

이는 형태이다 (나는 이미이 시점에서 데이터베이스에 연결 그리고 난 그 작동하고 테스트 할 수 있습니다)

내가이 오류를 얻을 제출 누르면 :

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/content/02/6945202/html/copoetry/insert.php on line 2 

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/content/02/6945202/html/copoetry/insert.php on line 7 
Error: 

내가 잘못하고있는 중이 야 무엇을? 감사합니다

+1

어디서 DB에 연결합니까? –

+1

DB 연결이 누락 된 것 외에 쿼리 문자열이 올바르지 않습니다. 이유를 보려면'echo $ sql;'을 수행하십시오. 당신의 의견도 위생적으로 다루는 것을 잊지 마십시오. – JJJ

+0

$ con가 헤더에 정의되어 있습니다. 파일에 직접 PHP 코드를 넣으면 데이터베이스에 빈 행이 기록되어 연결이 작동합니다. 그러나 다른 파일을 쓰면이 오류가 발생합니다. – lisovaccaro

답변

2

귀하의 $con 변수는 mysql_connect();으로 데이터베이스에 대한 연결을 유지해야하며, 어느 시점에서이 행을 제거한 것처럼 보입니다.

EG :

$con = mysql_connect('host', 'user', 'pass') or die(mysql_error()); 

당신이 어쨌든 $ 콘 변수의 제거 얻을 수 있도록 모든 mysql_* 통화가 해당 연결을 사용합니다 성공적으로 이런 짓을하면. 안전 있도록

ALSO 바로 MySQL의에 $_POST, $_GET 또는 $_REQUEST 변수를 삽입, 사용자의 입력을 탈출하는 것을 잊지 마세요 매우 안전하지 않은 것입니다. 최소한 mysql_real_escape_string();에 입력하고 양식이나 쿠키에서 가져온 모든 입력을 실행하십시오.

EG

// Create a shortcut function somewhere early in your script 
function mes($input) { 
    return mysql_real_escape_string($input); 
} 

// SQL Example 
$sql = "INSERT INTO Poems (Title, Privacy) VALUES ('".mes($_POST['title'])."','".mes($_POST['privacy'])."')"; 

참고 문자열 연결 (fullstop를 사용)는 문자열/변수를 분리한다.

+0

헤더에 $ con을 정의 했으므로 삽입 파일에서 다시 정의해야한다는 것을 알지 못했습니다. 감사합니다. – lisovaccaro

+0

또한 정보를 주셔서 감사합니다. mysql_real_escape_string(); ? 코드의 어느 부분에 있어야하는지 전혀 모르겠습니다. 감사합니다 – lisovaccaro

+0

@ Liso22 내 대답을 업데이 트합니다. $ con을 다시 정의 할 필요는 없습니다. 내 생각에 어떤 이유로 든이 스크립트에서는 사용할 수 없습니다. – Dunhamzzz

1

mysql_connect()이 누락되었습니다. 이것을 추가하십시오. $_GET/$_POST/$_REQUEST에서 온 쿼리를 실행하는 것은 매우 안전하지 않습니다.

0

난 당신이() 명령없이 mysql_connect을 지정 잊어 버린 생각하여 DB ;-)

0

에는 접속 없습니다.