2012-07-23 2 views
1

MySQL 데이터 필드에 (양식의) 값을 어떻게 삽입 할 수 있습니까? 나는이 노력하고있어 :HTML 입력 필드의 값을 MySQL에 어떻게 삽입 할 수 있습니까?

<form action="enviar.php" autocomplete="off" method="post"> 
    <label for="nacimiento" class="youpasswd" data-icon="p"> 
     Fecha de Nacimiento 
    </label> 
    <br> 
    <input id="nacimiento" name="nacimiento" 
      required type="datetime" placeholder="DD/MM/YYYY" /> 
</form> 

enviar.php이 아닌 날짜 필드와 다른 모든 필드에 노력하고 있습니다

$nacimiento= $_POST['nacimiento']; 
mysql_query("INSERT INTO voluntarios(nacimiento) VALUES ('$nacimiento')");` 

을; 그것은 비어 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

는 당신에게 감사

+6

매개 변수가있는 SQL 쿼리를 사용하거나 해킹 당할 수 있습니다. 귀하의 사이트는 현재 SQL 주입에 대해 열려 있습니다. http://bobby-tables.com/ – Lusitanian

+1

을 참조하십시오. mysql_ 함수는 향후 제공되지 않을 예정입니다 (예 : 향후 제거 될 예정 임). mysqli_ 또는 더 나은 여전히 ​​PDO로 전환하십시오. 문제에 관해서는 데이터베이스에서 dd/mm/yyyy 형식의 날짜 문자열을 사용할 수 있습니까? 올바른 형식은 YYYY-MM-DD – fvu

+0

이어야합니다. @Lusitanian에 명시된 바와 같이, 매개 변수화 된 쿼리 (예 : PDO)를 사용하지 않으면 아주 좋은 이유가 있습니다. 그렇지 않으면 다음과 같이 할 수 있습니다 :'$ nacimiento = mysql_real_escape_string ($ _ POST [ 'nacimiento']);' – Andy0708

답변

4

당신 seem to have problems even getting the value from your input field to the server를 사용하여 읽을 수 있습니다. 이것은 먼저 해결해야합니다. Debug (var_dump) $_POST 데이터를 확인하고 무슨 일이 일어나고 있는지 확인하십시오. 도움이 더 필요하면 Provide more code. 당신이 쓴 것에서 볼 때, 나는 가치를 왜 보내지 말아야 하는지를 보지 못합니다.

당신은 당신의 날짜 문자열, 문자열 리터럴 형식 MySQL recognizesconvert 값 도착 후 :

$mysqldate = date('Y-m-d H:i:s', $phpdate); 

그런 다음 mysqli_query를 사용하여 삽입 :

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
$q = $dbh->prepare("INSERT INTO voluntarios(nacimiento) VALUE (:nacimiento)"); 
$q->bindParam(':nacimiento', $mysqldate, PDO::PARAM_STR); 
$success = $q->execute(); 
:

mysqli_query(sprintf("INSERT INTO voluntarios(nacimiento) VALUES ('%s')"), 
         mysql_real_escape_string($mysqldate)); 

이렇게 PDO 사용을

+0

+1 MySQLi 및 PDO 용! –

+0

@Wolfram JSFIDDLE에서 양식의 전체 코드를 확인하십시오. 고마워요 –

+0

var_dump 할 때 변수에 오류가 있다는 것을 알았습니다. 이것은 수정되었습니다. 이제 '$ nacimiento'가 날짜를 가져 와서 데이터베이스에 저장할 수 있습니다. 현재 보안 코드를 수행하기 위해 PDO에 대해 읽고 배우고 있습니다. –

0

사용 STR_TO_DATE 유효한 날짜 형식으로 텍스트를 변환 :

STR_TO_DATE('12/15/2008', '%m/%d/%Y'); 
2

시험 후 $_POST['nacimiento']; 에코하고 아무것도하지 있는지? 또한 전체 SQL 쿼리를 게시하지 않은 것으로 보입니다. 아마도 쿼리에 오류가있는 것입니까?

편집 :가되지 않는 것 같은 오류가 mysql_로 * 기능을 사용하여 SQL injection

$nacimiento= $_POST['nacimiento']; 
mysql_query("INSERT INTO voluntarios(nacimiento) VALUES ('$nacimiento')");` 

정지에 mysql_error


다음 코드는 취약을 사용하는 것 또한 시도하고 볼 수 있었다. PDO가 SQL 삽입으로부터 당신을 보호하는 매개 변수 바인딩을 허용하기 때문에 대신 PHP database objects (PDO)을 사용하십시오.

당신은 PDO here

+1

또는 mysqli를 사용하십시오. 이는 PDO보다 간단합니다. 어느 쪽의 방법 으로든 원시 MySQL 함수는 더 이상 사용되지 않습니다. – Aatch

+0

뭐하는거야 echo $ _POST [ 'nacimiento']; 결과는 비어 있습니다. –

+0

@Aatch - _simpler_는 단지 의견의 문제입니다. 그러나 PDO가 더 널리 채택 된 이유는 무엇입니까? – Kush

1

MySQL expec YYYY-MM-DD 형식 as explained in the manual에서 TS 날짜 리터럴. 받아들이는 것에 대해 꽤 관대하지만, 당신이 제공하는 형식은 받아 들여지지 않을 것입니다.

당신은 멀리 아마 문자열 저글링 얻을 수 있지만, 자신에게 부탁을하고 그것을 바로을 할 수있는 - 즉, PDO prepared statements를 사용합니다. 뿐만 아니라 당신은 쉽게 PHP로 날짜 구문 분석 & 사전 검사를 연기 할 수있을 것입니다, 당신의 코드는 많은 안전하고 미래의 증거가 될 것입니다.

코드는

$stmt = $dbh->prepare("INSERT INTO voluntarios(nacimiento) VALUES (:nacimiento)"); 
$stmt->bindParam(':nacimiento', $nacimiento); 
// WARNING - strtotime strtotime expects '-' separators if you feed it dd-mm-yyyy 
// you should modify that in your form. 
$nacimiento = strtotime($_POST['nacimiento']); 
$stmt->execute(); 
1

문제는 날짜가 SQL 표준 (YYYY-MM-DD)로 포맷해야 가능성이 귀하의 예제에서 요소를 사용하여, 다음과 같이 표시됩니다. 당신이 게시물에 당신에게 올 것 것과 상당히 확신하는 경우

, 당신은이를 사용할 수 있습니다

$formatted_date = date('Y-m-d',strtotime($_POST['nacimiento'])); 

당신이 다음과 같이 뭔가를 사용할 수있는 형식을 확인하려면 다음

preg_match('#^(\d{1,2})/(\d{1,2})/(\d{4})$#', $_POST['nacimiento'], $matches); 
if(count($matches)) 
{ 
    $formatted_date = $matches[3].'-'.str_pad($matches[1],2,0,STR_PAD_LEFT).'-'.str_pad($matches[2],2,0,STR_PAD_LEFT); 
    // Use formatted date in query 
} 
else // handle error 
관련 문제