2015-10-28 2 views
1

У меня есть форма внутри php, которая отображается только при входе пользователя в систему, это означает, что только зарегистрированные пользователи могут создавать новый блог-почтовый ящик на моем сайте, форма выглядит это:Форма внутри PHP echo не будет POST любых данных

<?php 
     if(isset($_SESSION['username'])){ ?> 

     <section class="post"> 
      <h3>Make a new post:</h3> 
      <p> Before posting anything, make sure you have read the <a id="pagelink" href="rules.html"> rules </a> 
      <form action="../php/post_up.php" id="newpost" method="POST"> 
       <table id="post"> 
        <tr> 
         <td> Title: </td> 
         <td id="post_cell"> <input type="text" name="post_title"/> </td> 
        </tr> 
        <tr> 
         <td> Content: </td> 
         <td id="post_cell"> <textarea name="post_content" form="newpost" rows="10" cols="50"></textarea> </td> 
        </tr> 
        <tr> 
         <td> 
          <input type="submit" name="submit_post" value="Submit"> 
         </td> 
        <tr> 
       </table> 
      </form> 
     </section> 
     <?php 
      } 

      require("../php/load_up.php"); 
     ?> 

После этого код передается на этот скрипт:

<?php 
session_start(); 

require_once("../php/db.php"); 

if(!isset($_SESSION['userid'])){ 
    header("Location: ../blog/userpost.php"); 
    die(); 
} 

if(isset($_POST['submit_post'])){ 
    if(isset($_POST['post_title']) && isset($POST['post_content'])){ 
     if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){ 

      $userid = $_SESSION['userid']; 

      $title = strip_tags($_POST['post_title']); 
      $content = strip_tags($_POST['post_content']); 

      $title = stripslashes($title); 
      $content = stripslashes($content); 

      $title = mysqli_real_escape_string($title); 
      $content = mysqli_real_escape_string($content); 

      $sql_store_post = "INSERT INTO userpost (title,content,userid) VALUES ('$title','$content','$userid')"; 

      mysqli_query($db, $sql_store_post); 

      header("Location: ../blog/userpost.php"); 
      die(); 

     } else { 
      echo("The posts are empty");  
     } 
    } else { 
     echo("The posts are not set"); 
    } 
} 

elseif(isset($_POST['submit_comment'])){ 

} 

else { 
    echo("Seems like submit has not been set?"); 
    //header("Location: ../blog/userpost.php"); 
} 

>

странная вещь, что isset($_POST['submit_post']) возвращает истину, однако две следующие должности бо? th возвращает false, что приводит к ошибкам в моем коде.

PS: require("../php/load_up.php"); предназначен для отображения сообщений, которые уже были сделаны и не важны при размещении данных.

+0

Можете ли вы 'var_dump ($ _ POST)'? –

+0

Вместо '! $ _ POST ['post_title'] ==" "' use '! Empty (trim ($ _ POST ['post_title']))'. – Script47

+0

Кстати, когда вы сравниваете строки, вам нужно использовать [strcmp()] (http://php.net/manual/ru/function.strcmp.php) –

ответ

1

Простая опечатка,

isset($POST['post_content'])){ 

к,

isset($_POST['post_content'])){ 
1

Кроме того, ваш опечатка для $POST['post_content'] для POST superglobal, который должен читаться как $_POST['post_content'] с подчеркиванием между $ и POST:

Этот фрагмент кода:

$title = mysqli_real_escape_string($title); 
$content = mysqli_real_escape_string($content); 

mysqli_real_escape_string() требует базы данных connnection

$title = mysqli_real_escape_string($db, $title); 
$content = mysqli_real_escape_string($db, $content); 

В не делать этого, вы будете выброшены что-то похожее на это:

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in (path to file) on line x

Plus, убедитесь, что сеанс был запущен внутри всех страниц используя сеансы. Вы не показали это в своем первом коде.

Вы также можете проверить наличие ошибок по вашему запросу.

Добавив or die(mysqli_error($db)) в mysqli_query().

отчетность

Ошибки бросила бы вам неопределенное переменный $ уведомление:

и недостающий параметр дб для вашей функции побега бросил бы вам другую ошибку:

Изменить:

mysqli_query($db, $sql_store_post); 

к:

$query = mysqli_query($db, $sql_store_post); 

if($query){ 
    echo "Success"; 
} 

else{ 
    echo("Error description: " . mysqli_error($db)); 
} 

, чтобы проверить, если запрос был успешным или нет.


Неясно, что внутри require_once("../php/db.php");

Убедитесь, что вы действительно успешно подключен к базе данных и используя тот же MySQL API, как ваш запрос.

  • Различные API не смешиваются.

Sidenote:

Эти заявления,

if(isset($_POST['post_title']) && isset($_POST['post_content'])){ 
     if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){ 

может быть сужен до просто:

if(!empty($_POST['post_title']) && !empty($_POST['post_content'])) 

и избавлении от if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){

и связанные с ним закрытие } скобка.