2014-12-04 3 views
0

필자는 PDO 래퍼 클래스를 사용하려고하며 일반적으로 SQL 주입에 대한 적절한 보안을 위해 우수 사례로 사용하고 있습니다. MySQL에 POST 할 양식을 채우는 데 필요한 깨끗한 기초 지식을 배우려고합니다.PDO를 올바르게 사용하여 MySQL에 POST 할 양식 만들기?

그래서 내 양식에서 데이터를 MySQL 테이블에 삽입했지만 제출 후 새로 고침시 여러 레코드를 사용하고있었습니다. 그런 다음 프로세서를 작성하는 더 깨끗한 방법을 연구했지만 지금은 테이블에 삽입하는 데 문제가 있습니다. 프로세서와 "class.db.php"파일간에 불일치가 있는지 확실하지 않은가요?

"how-to 's"를 (를) 찾지 못했습니다. 내가 뭘 잘못하고 있는지 이해하려고 노력하고, 모범 사례에 대한 답을 원합니다. 내가 본 모든 것은지도 전체에 있습니다. 참고로 내가 여기 처음 시작

http://webdevelopingcat.com/php-mysql-tutorial-for-beginners-inserting-rows-with-pdo/ 그럼 당신은 클래스 구현의 기초를 들어, https://code.google.com/p/php-pdo-wrapper-class/ 프로젝트를 구글 만약 내가 포함하고있어 문서의 상단에 : 나는 어디에 있어요 여기

입니다.

<?php 
include("class.db.php"); 
$version = "1.0.2"; 
$released = "December 9, 2010"; 
?> 

그러면 몸 안에 간단한 형태.

<?php 
if (empty($_POST)){ 
?> 

<form name='registration' action='success.php' method='POST'/> 
<label for 'FName'>First Name: </label> 
<input type="text" name="FName" /> 

<label for 'LName'>Last Name: </label> 
<input type="text" name="LName" /> 

<label for 'Age'>Age: </label> 
<input type="number" name="Age" /> 

<label for 'Gender'>Gender: </label> 
<input type="text" name="Gender" /> 

<button type="submit">Submit</button> 
</form> 

마지막으로 양식 프로세서 또한 본문 내에 있습니다.

<?php 
} else { 
//process the form here 
// 
// Connect to database 
$db = new db("mysql:host=localhost;dbname=pdodb", "root", "root"); 

$form = $_POST; 
$first = $form[ 'FName' ]; 
$last = $form[ 'LName' ]; 
$myage = $form[ 'Age' ]; 
$gen = $form[ 'Gender' ]; 

$sql = "INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:first, :last, :myage, :gen)"; 

$query = $db->prepare($sql); 
$query->execute(array(':first'=>$first, ':last'=>$last, ':myage'=>$myage, ':gen'=>$gen)); 

} 
?> 

MANUAL way works. 양식이 success.php 때문에 삽입 코드가 성공이 있는지 확인하려면 게시되는 것을 방지-PHP-SQL 주입-와-PDO 준비된를-문

// Create array of data to insert 
$insert = array(
"FName" => "John", 
"LName" => "Doe", 
"Age" => 26, 
"Gender" => "male" 
); 
// Insert the array into the table 
$db->insert("mytable", $insert); 
+0

이봐, 난 완전히 질문을 이해 모르겠어요. 여전히 여러 번 제출하는 데 문제가 있습니까? 그렇다면 양식과 프로세서를 다른 파일에 넣고 POST/REDIRECT/GET 메서드를 사용하는 것이 좋습니다. http://en.wikipedia.org/wiki/Post/Redirect/Get – versalle88

+0

지금은 아닙니다. . 하지만 고맙겠습니다. 내 문제는, 그것도 데이터베이스에 삽입하지 않을 것입니다. 나는 그것을 한순간에하고 있었지만, 사용 된 코드는 끔찍했고 어수선했다. 이 접근법은 깨끗해 보이지만 POST를 만드는 데 문제가 있습니다. – JonnyBorg

+0

"PDO 래퍼 클래스를 사용하려고합니다 ..."오 오. [Laravel] (http://laravel.com/)과 같이 현대적인 [개발 프레임 워크] (http://codegeekz.com/best-php-frameworks-for-developers/)를 사용하지 못하도록하는 것이 있습니까? 응용 프로그램을 구축하기위한 훨씬 강력한 기반을 제공합니까? – tadman

답변

2

: 대한 참조 된 culttt.com 게시 할 수 있습니다. PHP 파일 :

<?php 
// Get POST data 
$first = (!empty($_POST['FName']) ? $_POST['FName'] : ''); 
$last = (!empty($_POST['LName']) ? $_POST['LName'] : ''); 
$myage = (!empty($_POST['Age']) ? $_POST['Age'] : ''); 
$gen = (!empty($_POST['Gender']) ? $_POST['Gender'] : 0); 

try { 
    // Connect to db 
    $db = new db('mysql:dbname=pdodb;host=localhost', 'root', 'root'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    // Set SQL 
    $sql = 'INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:first, :last, :myage, :gen)'; 
    // Prepare query 
    $query = $db->prepare($sql); 
    // Execute query 
    $query->execute(array(':first' => $first, ':last' => $last, ':myage' => $myage, ':gen' => $gen)); 
} catch (PDOException $e) { 
    echo 'Error: ' . $e->getMessage(); 
} 

감사합니다,

앤드류

+0

class.db.php 파일 안의 db가이를 참조하지 않습니까? – JonnyBorg

+0

다음은 class.db.php 파일의 내용입니다.'클래스 db는 PDO를 확장합니다 { \t private $ error; \t private $ sql; \t private $ bind; \t private $ errorCallbackFunction; \t private $ errorMsgFormat; \t 공용 기능 __construct ($ DSN, $ 사용자 = ""$ passwd 파일 = "") { \t \t $ 옵션 = 배열 ​​( \t \t \t PDO :: ATTR_PERSISTENT => 진정한 \t \t \t PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION \t \t); \t \t 시도 { \t \t \t 부모 :: __ 구조 ($의 DSN, $ 사용자, $ passwd를, $ 옵션); \t \t} 캐치 (PDOException $으로 전자) { \t \t \t $ this-> 오류 = $ 전자>의 getMessage(); \t \t \t} – JonnyBorg

+0

해당 클래스를 사용하기위한 답이 업데이트되었습니다. 그러면 오류가 표시됩니까? – versalle88

-2
<?php 
// Get POST data 
$first = (!empty($_POST['FName']) ? $_POST['FName'] : ''); 
$last = (!empty($_POST['LName']) ? $_POST['LName'] : ''); 
$myage = (!empty($_POST['Age']) ? $_POST['Age'] : ''); 
$gen = (!empty($_POST['Gender']) ? $_POST['Gender'] : 0); 

try { 
    // Connect to db 
    $db = new PDO('mysql:dbname=pdodb;host=localhost', 'root', 'root'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    // Set SQL 
    $sql = 'INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:first, :last, :myage, :gen)'; 
    // Prepare query 
    $query = $db->prepare($sql); 
    // Execute query 
    $query->execute(array(':first' => $first, ':last' => $last, ':myage' => $myage, ':gen' => $gen)); 
    $db= null; 
} catch (PDOException $e) { 
    echo 'Error: ' . $e->getMessage(); 
    $db= null; 
} 
관련 문제