2014-04-25 3 views
0

데이터베이스에 내 양식을 보내는 데 문제가 있습니다. 문제를 해결하기 위해 한 시간 동안 노력했습니다. 내 코드를 "echo mysqli_error(); 하지만 오류가 발생하지 않았으며, 단순히 데이터베이스에 새 데이터가 부족했습니다 (제출 양식이 정보를 전송하는 페이지를 다시로드하지 않는 것처럼 보입니다). 데이터베이스는 config.php, connectDB.php 및 header.php를 사용하여 나머지 페이지에서도 작동하므로 데이터베이스 설정에 문제가 없습니다. 나는 헤더()와 페이지를 다시로드하지 않기 때문에 오류가 "isset ($ _ POST [ 'submit']) 내에 있다고 생각하지만 나머지 경우에는 대충 코드를 제공하고 있습니다. (나는이 문제를 해결 한 후 폼 유효성 검사 다음 단계이며,이 코드가 SQL 인젝션에 대해 보호되지 않습니다 알고) 다음 SQL 전에 다른 웹 페이지PHP 코드가 데이터베이스에 데이터를 입력하지 않습니다.

<?php 
require_once ("Includes/config.php"); 
require_once ("Includes/connectDB.php"); 
include("Includes/header.php"); 
if (isset($_POST['submit'])){ 
       $name = $_POST['name']; 
       $email = $_POST['email']; 
       $content = $_POST['content']; 
       $query = "INSERT INTO requests (name, email, content) VALUES (?, ?, ?)"; 

       $statement = $databaseConnection->prepare($query); 
       $statement->bind_param('sss', $name, $email, $content); 
       header('Location: /index.php'); 

       $statement->execute() 
       $statement->store_result(); 
       setcookie("nameErr"," ", time()+3600); 
       setcookie("emailErr"," ", time()+3600); 
       setcookie("contentErr"," ", time()+3600); 
       setcookie("contentSucc","Announcement Request Successful", time()+3600); 
       header('Location: /request.php'); 

} 
?> 
<div id="main"> 
     <ol> 
      <li> 
       <label for="name">Name:</label> 
       <input type="text" name="name" value="" id="name" /> 
       <span class="error">* <?php if (isset($_COOKIE["nameErr"])){echo $_COOKIE["nameErr"];}?></span> 
      </li> 
      <li> 
       <label for="email">Email:</label> 
       <input type="text" name="email" value="" id="email" style = "position: relative; left: 3px;"/> 
       <span class="error" style = "position: relative; left: 3px;">* <?php if (isset($_COOKIE["emailErr"])){echo $_COOKIE["emailErr"];}?></span> 
      </li> 
      <li> 
        <label for="content">Requested Announcement:</label><br> 
        <textarea rows="18" cols="140" name="content" id="content"></textarea> 
        <br> 
        <span class="error"> <?php if (isset($_COOKIE["contentErr"])){echo $_COOKIE["contentErr"];}?></span> 
        <span class="error"> <?php if (isset($_COOKIE["contentSucc"])){echo $_COOKIE["contentSucc"];}?></span> 
      </li> 
     </ol> 
     <input type="submit" name="submit" value="Submit " style = "position: relative; left: 40px;" /> 
     <!-- onclick="window.location='request.php';" --> 
     <p> 
      <a class="cancel" href="index.php" style = "position: relative; left: 40px;">Cancel</a> 
     </p> 
</div> 
+2

 $statement->bind_param('sss', $name, $email, $content); header('Location: /index.php'); $statement->execute() 

... –

+0

이것은 당신이 코드를하려고 할 때 발생하는 것입니다 3 시간의 수면. 미안하지만 편집 해 볼게. 고맙습니다! – AGentleRose

+1

'header()'호출이'execute()'바로 전에 의심 스럽습니다. 서버 오류 로그에 뭐라고 써 있니? –

답변

1
  1. 귀하의 리디렉션이 실행됩니다.
  2. 줄 끝 부분에 세미콜론이 없습니다.
  3. <input> 태그 주변에 <form>이 없습니다.
  4. SQL 주입을 중지하기 위해 다른 작업을 많이해서는 안됩니다. MySQLi를 올바르게 사용하는 한, 귀하의 벌금.

변경 당신은 어디서든`

`선언을하지 않는 것이

  $statement->bind_param('sss', $name, $email, $content); 
      $statement->execute(); 
      $statement->close(); 

      header('Location: /index.php'); 
+0

나는 정확한 대답을 하겠지만 저스틴은 실제로 그것을 얻었다. 나는 폼을 정의하는 것을 잊었다. 이 헤더()는 if 문을 사용하여 코드가 무슨 일이 일어나는지 확인하기 위해 테스트 해주는 흔적이었다. – AGentleRose

관련 문제