2014-01-16 3 views
1

를 삽입하지, 지금은 내가 mysqli에 대한 연결을 변경하기 전에Mysqli 난 그냥 mysqli MySQL에서 변경된 데이터

그것은 괜찮 았는데 (이 빈 필드를 삽입) 데이터를 삽입하지 않습니다.

그 이유는 무엇입니까?

<?php 

$mysqli = new mysqli("localhost", "root", "", "opdracht"); 

/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 


    if($_POST['action'] == 'button'){ // als de knop is ingedrukt insert dan 
    if(filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) && preg_match('#\.[a-z]{2,6}$#i', $_POST['email'])){ 

     $voornaam = mysqli_real_escape_string($_POST['voornaam']); 
     $achternaam = mysqli_real_escape_string($_POST['achternaam']); 
     $email = mysqli_real_escape_string($_POST['email']); 
     $telefoonnummer = mysqli_real_escape_string($_POST['telefoonnummer']); 

     $query = mysqli_query($mysqli,"insert into 
      `form` (`id`,`voornaam`, `achternaam`, `email`, `telefoonnummer`) 
      values ('','".$voornaam."', '".$achternaam."', '".$email."', '".$telefoonnummer."')") 
      or die(mysqli_error($mysqli)); 

     $subject = 'Een email van '.$voornaam.''; 
     $headers = 'MIME-Version: 1.0' ."\r\n"; 
     $headers .= "Content-type: text/html; charset=utf-8\r\n"; 
     // opmaak mail 
     $content = '<html><header><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </header><img src="http://www.tekstbureaudevulpen.nl/wp-content/uploads/2010/11/Webparking_logo.png"/><body>'; 
     $content .= '<p>Je hebt een mail van:</p>'; 
     $content .= $voornaam; 
     $content .= ' '; 
     $content .= $achternaam; 
     $content .= '<p>'.$telefoonnummer.'</p>'; 
     $content .= '</body></html>'; 

     mail($email, $subject, $content, $headers); // Verstuurd de mail 
     error_log(E_ALL); 
} 
    } 
?> 
+0

mysqli_query (....) 끝에 세미콜론을 잊어 버렸습니다. –

+0

아니예요. –

+0

mysqli로 전환하여 SQL injection에주의를 기울 였다면, 여전히 mysqli의 절차 접근 방식을 사용하고 있기 때문에 많은 이점을 얻지 못할지 모른다. – asprin

답변

6

이제 문자열 이스케이프 처리에도 연결 핸들이 필요합니다. 다음 필요한 모든이 형식

$voornaam = mysqli_real_escape_string($mysqli,$_POST['voornaam']); 
             ^

$voornaam = mysqli_real_escape_string($_POST['voornaam']); 
    $achternaam = mysqli_real_escape_string($_POST['achternaam']); 
    $email = mysqli_real_escape_string($_POST['email']); 
    $telefoonnummer = mysqli_real_escape_string($_POST['telefoonnummer']); 

를 업데이트 할 수 그러나 당신은 여전히도 새로운 API로 이동 한 후 쿼리를 이스케이프 문자열로 연주되어서는 안된다, 왜 준비 사용하지 진술? 훨씬 안전하고 더 많은 혜택을 얻습니다.

$voornaam = mysqli_real_escape_string($mysqli, $_POST['voornaam']); 
$achternaam = mysqli_real_escape_string($mysqli, $_POST['achternaam']); 
$email = mysqli_real_escape_string($mysqli,$_POST['email']); 
$telefoonnummer = mysqli_real_escape_string($mysqli, $_POST['telefoonnummer']); 

또한 내가 연결을위한 변수로 $ mysqli를 사용하지 것이다 :

+0

더 큰 계획에서 OP는 어쨌든 수동 이탈을해서는 안됩니다. –

+0

그는 정말로 $ voornaam = $ mysqli-> real_escape_string ($ _ POST [ 'voornaam']); ' – MueR

+0

으로 업데이트해야합니다. 맞지만 제시된 것에 대한 수정을 제안 할 수만 있습니다 –

0

당신은 변수 설정에있는 MySQL의 연결을 놓치고있어. Con 또는 Connection이 선호됩니다.