2014-12-04 4 views
0

저는 PHP를 처음 사용하면서도 계속 저의 머리를 쓰려고합니다. 이 양식은 데이터가 데이터베이스로 전송되었다고 말하지만 데이터베이스가 비어있는 것처럼 보이면 오류가 나타나지 않습니까? 내 코드에 문제가 있습니까?보내지는 말은 있지만 데이터가 없습니다. 데이터베이스에 나타납니다

참고 :이 양식은 SQL Injection으로 보호되지 않습니다.


HTML


<?php 
session_start(); 
?> 
<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>Page Form</title> 
     <link rel="stylesheet" href="style.css" /> 
    </head> 
    <body> 
     <div class="container"> 
      <div class="main"> 
       <h2>PHP Page 3 Form</h2><hr/> 
       <span id="error"> 

       </span> 
       <form action="page4_insertdata.php" method="post"> 

        <label>Company Name :<span>*</span></label><br /> 
        <input name="company_name" type="text" placeholder="Joes Cleaner" required> 
        <br /> 

        <label>Ref :<span>*</span></label><br /> 
        <input name="ref" type="text" placeholder="H123" required> 
        <br /> 

        <label>Website :<span>*</span></label><br /> 
        <input name="website" type="text" placeholder="www.google.com" required> 
        <br /> 

        <label>Email :<span>*</span></label><br /> 
        <input name="email" type="email" placeholder="[email protected]" required> 
        <br /> 

        <label>Telephone :<span>*</span></label><br /> 
        <input name="tel" type="text" placeholder="07123456789" required> 
        <br /> 

        <label>Message :<span>*</span></label><br /> 
        <input name="message" id="message" type="text" size="500" required> 
        <br /> 



        <input type="reset" value="Reset" /> 
        <input name="submit" type="submit" value="Submit" /> 

       </form> 
      </div> 

     </div> 
    </body> 
</html> 

PHP


<?php 
session_start(); 
?> 
<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>PHP Multi Page Form</title> 
     <link rel="stylesheet" href="style.css" /> 
    </head> 
    <body> 
     <div class="container"> 
      <div class="main"> 
       <h2>PHP Multi Page Form</h2><hr/> 

       <?php 

          $servername = "localhost"; 
          $db_database = 'form'; 
          $username = "root"; 
          $password = ""; 

          // Create connection 
          $conn = new mysqli($servername, $username, $password); 

          // Check connection 
          if ($conn->connect_error) { 
           die("Connection failed: " . $conn->connect_error); 
          } 
          echo "DB Connected successfully. "; 


          $company_name = $_POST['company_name']; 
          $ref = $_POST['ref']; 
          $website = $_POST['website']; 
          $email = $_POST['email']; 
          $tel = $_POST['tel']; 
          $message = $_POST['message']; 


          $sql = "INSERT INTO detail (company_name,ref,website,email,tel,message) 
          VALUES ('$company_name','$ref','$website','$email','$tel','$message')"; 

          if($sql){ 
          echo " Database Sent."; 
          } 
          else { 
          echo "ERROR to insert into database"; 
          }; 
       ?> 
      </div> 

     </div> 
    </body> 
</html> 
+2

:

당신은 할 필요가있다. –

+0

** 위험 ** : [방어벽] (http://stackoverflow.com/questions/)이 필요한 [SQL 주입 공격] (http://bobby-tables.com/) ** **에 취약합니다. ** 60174/best-way-to-prevent-sql-injection-in-php)을 사용하십시오. – Quentin

+0

나는 먼저 그것을 작동 시키려고 노력하는 Im을 안다. – jl5660

답변

2

변경 다음 코드를

if($sql){ 
echo " Database Sent."; 
} 
else { 
echo "ERROR to insert into database"; 
}; 

에 :

$result = $conn->query($sql); 
if($result){ 
    echo " Database Sent."; 
} 
else { 
    echo "ERROR to insert into database"; 
}; 

이 방법은 당신이 실제로 쿼리를 수행하고 쿼리의 실패에 확인하는 ...

쿼리 조금 더 안전하려면 다음을 수행하십시오 :

$sql = " 
    INSERT INTO detail (
     company_name, 
     ref, 
     website, 
     email, 
     tel, 
     message 
    ) 
    VALUES (
     '" . mysqli_real_escape_string($company_name) . "', 
     '" . mysqli_real_escape_string($ref) . "', 
     '" . mysqli_real_escape_string($website) . "', 
     '" . mysqli_real_escape_string($email) . "', 
     '" . mysqli_real_escape_string($tel) . "', 
     '" . mysqli_real_escape_string($message) . "' 
    )"; 

$sql 인스턴스화 및 쿼리 실행 ($conn->query())을 바꿔서 매개 변수 바인딩을 사용하십시오. i 번째 다음

$stmt = $conn->prepare("INSERT INTO detail (company_name,ref,website,email,tel,message) VALUES (?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('ssssss', $company_name, $ref, $website, $email, $tel, $message); 
$stmt->execute(); 

당신이 방문하여 mysqli와 매개 변수를 바인딩에 읽을 수 PHP: mysqli_stmt::bind_param - Manual

전체 코드 :

<?php 
session_start(); 
?> 
<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>PHP Multi Page Form</title> 
     <link rel="stylesheet" href="style.css" /> 
    </head> 
    <body> 
     <div class="container"> 
      <div class="main"> 
       <h2>PHP Multi Page Form</h2><hr/> 

       <?php 

          $servername = "localhost"; 
          $db_database = 'form'; 
          $username = "root"; 
          $password = ""; 

          // Create connection 
          $conn = new mysqli($servername, $username, $password, $db_database); 

          // Check connection 
          if ($conn->connect_error) { 
           die("Connection failed: " . $conn->connect_error); 
          } 
          echo "DB Connected successfully. "; 

          $stmt = $conn->prepare("INSERT INTO detail (company_name,ref,website,email,tel,message) VALUES (?, ?, ?, ?, ?, ?)"); 
          $stmt->bind_param('ssssss', 
           $_REQUEST['company_name'], 
           $_REQUEST['ref'], 
           $_REQUEST['website'], 
           $_REQUEST['email'], 
           $_REQUEST['tel'], 
           $_REQUEST['message'] 
          ); 

          if($stmt->execute()) { 
           echo " Database Sent."; 
          } else { 
           echo "ERROR to insert into database: " . $stmt->error; 
          }; 
       ?> 
      </div> 

     </div> 
    </body> 
</html> 
0

당신은 실제로 당신이 변수 $를 설정하고, 쿼리를 보내는이 arent sql = "INSERT ....." 항상 참입니다. 당신은 실제로 쿼리를 실행하지 있습니까

$result = $mysqli->query($sql); 


if ($result......) 
관련 문제