2017-12-01 11 views
-1

HTML 폼에서 정보를 가져와 내 로컬 호스트에있는 MySQL 데이터베이스 (XAMPP 사용)에 업로드하는 프로그램을 작성하려고합니다. . 코드에서 볼 수 있듯이XAMPP MySQL 데이터베이스에 PHP 삽입 문으로 인해 테이블이 업데이트되지 않음

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <link rel="stylesheet" href="styles/main.css"> 
     <meta charset="utf-8"> 
     <title>Presentation Registration</title> 
     <script type="text/javascript"> 
     function Submit() 
     { 
      // I put input validation stuff here, but left it out to simplify code for reading 
      document.getElementById("myForm").submit(); 
     } 
    </script> 
</head> 

<body> 
    <form id="myForm" action="actionPage.php" method="post"> 
    <TABLE> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot1" value="Slot1">12/9/15, 6:00 PM – 7:00 PM</TD> 
      <TD> 
      <?php 
      $con = mysqli_connect('localhost','username','password', 'myDB'); 

      $query = "SELECT * FROM reserve"; 

      $result = mysqli_query($con, $query); 

      $row = mysqli_fetch_array($result); 
      echo $row["Open Seats"]." "; 
      ?> 
      Seats Remaining</TD> 
     </TR> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot2" value="Slot2">12/9/15, 7:00 PM – 8:00 PM</TD> 
      <TD><?php 
       $row = mysqli_fetch_array($result); 
       echo $row["Open Seats"]." "; 
       ?> 
       Seats Remaining</TD> 
     </TR> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot3" value="Slot3">12/9/15, 8:00 PM – 9:00 PM</TD> 
      <TD><?php 
       $row = mysqli_fetch_array($result); 
       echo $row["Open Seats"]." "; 
       ?> 
       Seats Remaining</TD> 
     </TR> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot4" value="Slot4">12/10/15, 6:00 PM – 7:00 PM</TD> 
      <TD><?php 
       $row = mysqli_fetch_array($result); 
       echo $row["Open Seats"]." "; 
       ?> 
       Seats Remaining</TD> 
     </TR> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot5" value="Slot5">12/10/15, 7:00 PM – 8:00 PM</TD> 
      <TD><?php 
       $row = mysqli_fetch_array($result); 
       echo $row["Open Seats"]." "; 
       ?> 
       Seats Remaining</TD> 
     </TR> 
     <TR> 
      <TD><input type="radio" name="TimeSlot" class="TimeSlot" id="Slot6" value="Slot6">12/10/15, 8:00 PM – 9:00 PM</TD> 
      <TD><?php 
       $row = mysqli_fetch_array($result); 
       echo $row["Open Seats"]." "; 
       ?> 
       Seats Remaining</TD> 
     </TR> 
    </TABLE> 
    <button type="button">Student List</button> 
    <TABLE> 
     <TR> 
      <TD>UMID&nbsp</TD> 
      <TD><input type="text" class="inputText" id="UMID" name="UMID"></TD> 
     </TR> 
     <TR> 
      <TD>First Name&nbsp</TD> 
      <TD><input type="text" class="inputText" id="fName" name="fName"></TD> 
     </TR> 
     <TR> 
      <TD>Last Name&nbsp</TD> 
      <TD><input type="text" class="inputText" id="lName" name="lName"></TD> 
     </TR> 
     <TR> 
      <TD>Project Title&nbsp</TD> 
      <TD><input type="text" class="inputText" id="projectTitle" name="projectTitle"></TD> 
     </TR> 
     <TR> 
      <TD>E-Mail&nbsp</TD> 
      <TD><input type="text" class="inputText" id="email" name="email"></TD> 
     </TR> 
     <TR> 
      <TD>Phone Number&nbsp</TD> 
      <TD><input type="text" class="inputText" id="phone" name="phone"></TD> 
     </TR> 
    </TABLE> 
    <button type="button" OnClick=Submit()>Submit</button> 
    </form> 

</body> 
</html> 

, 내가 제출 기능에 액션 태그를 사용하여이 작업을 수행하려면, 나는 데이터에 걸릴 양식과 같이 데이터베이스에 삽입 할를 만드는 HTML 사용했다 "actionPage.php"를 실행하여 실행할 수 있습니다. 그 프로그램의 내부 코드는 다음과 같습니다

<?php 
    $con = mysqli_connect('localhost','username','password', 'myDB'); 
    $umid = $_POST['UMID']; 
    $fName = $_POST['fName']; 
    $lName = $_POST['lName']; 
    $projTitle = $_POST['projectTitle']; 
    $eMail = $_POST['email']; 
    $phone = $_POST['phone']; 
    $slotID = "1"; 


    $query = "INSERT INTO student (UMID, fName, lName, projTitle, e-Mail, phone#, SlotID) VALUES ($umid, $fName, $lName, $projTitle, $eMail, $phone, $slotID)"; 

    $result = mysqli_query($con, $query); 

    echo "Database Insertion Complete"; 
?> 

이 모든 것은 두 테이블, 학생 및 예비으로 데이터베이스에 연결합니다. 코드를 실행하고 정보를 입력하면 actionPage.php가 트리거되고 끝에있는 echo 문을 포함하여 모든 코드가 실행됩니다. 그러나 XAMPP에서 보면 학생 표가 업데이트되지 않습니다. 내 코드에 문제가 있습니까? 아니면 다른 문제를 찾아야합니까?

+1

'echo()'를 "데이터베이스 삽입 완료"로 변경하고 어떤 일이 발생하는지 알려주십시오 – musashii

+2

'$ umid = "$ _POST (UMID)";는'$ umid = "$이어야합니다. _POST [ "UMID"]; "나는 믿고 다른 유사한 행에 대해서도 마찬가지이다. 다음으로 SQL injection 공격으로부터 데이터베이스를 보호하기 위해 prepared statement와 paramterised query에 대해 알아야한다 .http : // bobby-tables를 보라. com/당신의 질의를 안전하게 작성하는 방법에 대한 설명과 예제를 보려면 – ADyson

+1

또한 '는 '및 다른 필드에 대해서도 동일합니다. 양식 요소는 "name"속성이 없으면 서버에 제출되지 않습니다.기본 HTML/PHP 양식 자습서를 찾아서주의를 기울이는 것이 좋습니다. 이는 매우 기본적인 오류이기 때문입니다. – ADyson

답변

1

$_POST은 배열입니다. 예를 들어 "UMID"에 액세스하려면 액세스하려면 $_POST['UMID']이어야합니다. 메서드/함수에서만 사용되는 중괄호를 사용합니다.

+0

이 변경 후에도 내 코드가 여전히 작동하지 않지만 올바른 방향으로 나아가는 단계입니다. – Tyrovar

+0

데이터베이스에 연결되었는지 확인 했습니까? 그리고 당신 wuery가 어떤 과실도 던지고 있지 않다는 것을 확인 했는가? mysqli_error 예를 들면? – Tamali

-1

몇 가지 문제 :

1) $umid = "$_POST(UMID)"; 내가 생각 $umid = "$_POST["UMID"];해야한다. 그리고 다른 유사한 라인들도 마찬가지입니다.

2) <input type="text" class="inputText" id="UMID"><input type="text" class="inputText" id="UMID" name="UMID">이어야하며 다른 필드는 동일해야합니다. "name"속성이없는 경우 양식 요소가 서버에 제출되지 않습니다.

3) 쿼리 작성 방법이 잘못되었습니다. 한 가지는 일반적으로 string (varchar) 필드의 입력 값을 작은 따옴표로 묶어야합니다.

보조 점 몇 :

A) 난 당신이 간결함을 위해 생략하여 JS에서 일부 유효성 검사 코드를 확인할 수 있습니다. 좋습니다. 그러나 모든 유효성 검사 코드는 서버 쪽에서 반복되어야합니다. 브라우저에 대해 최소한의 지식을 가진 사람이라면 Javascript를 끄고 양식을 제출하고 모든 유효성 검사를 즉시 무시할 수 있습니다. 데이터가 유효한지 확인하려면 먼저 PHP로 유효성 검증을 구현하십시오. 유효성 검사는 JS가 사용자 환경에 좋지만 데이터를 확인하는 유일한 방법이되어서는 안됩니다.

b) SQL 주입 공격으로부터 데이터베이스를 보호하기 위해 준비된 문과 매개 변수가있는 쿼리에 대해 알아야합니다. 현재 데이터베이스가 공격자에 의해 쉽게 손상 될 수 있습니다. 검색어를 안전하게 작성하는 방법에 대한 설명 및 예는 http://bobby-tables.com을 참조하십시오. 또한 매개 변수화 된 쿼리를 사용하는 경우 위의 3 번 항목에서 설명한 문제의 종류가 자동으로 사라집니다. 매개 변수화 프로세스가이 유형의 구문을 더 이상 염려 할 필요가 없기 때문입니다.