2013-04-01 2 views
0

Я пытаюсь реализовать страницу, на которой пользователь вводит комментарий, и отображается прямо на той же странице. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда вы переходите на страницу, на этой странице нет комментариев (есть комментарии). Это мой sceneario я имею:с проблемами с php_self

  1. Я иду на страницу, и нет никаких комментариев, я ввести комментарий «привет», и он получает отображается сразу.
  2. Я перехожу на другую страницу, а затем возвращаюсь на страницу комментариев и комментариев нет. (Комментарий «привет» должен быть уже показан)
  3. Я ввожу комментарий «привет» и оба комментария «привет» "и„привет“прибудет отображаются

Я не могу решить эту проблему ..

Это мой код, его довольно долго

<?php 
session_start(); //starts or continues the session 
require_once('functions.php'); //needed for some function calls 
error_reporting(E_ALL^E_NOTICE); 
?> 

<!DOCTYPE html> 
<html lang = "en"> 

<head> 
<script type = "text/javascript" src = "functions.js"></script> 
<link href="style.css" rel="stylesheet" type="text/css">  
</head> 

<body> 

<?php 
GetUserLayout($_SESSION['userId'], $_SESSION['superUser']); 

?> 

    <div id = "shareyouridea_form" class = "post"> 
     <h1> Share your post</h1>  
     <!-- used for the form --> 
     <form id = "idea_form" method = "post" 
     action = "<?php echo $PHP_SELF;?>" 
    onkeypress = "return DisableEnterKey(event);"> 
     <table> 
     <caption> 
     <strong> 
      <br /> Share post form: 
     </strong> 
     </caption> 
     <tr class = "spacearound"> <!-- input for bright idea --> 
       <td> &emsp;Post: </td> 
       <td> 
      <textarea form = "idea_form" name = "b_idea" rows = "12" 
      cols = "85" title = "Please describe your product idea" 
      id = "bright_idea" maxlength = "1000" 
      onkeypress = 
      "return InputLimiter(event, 'lettersSpacePunctuation');"> 
      </textarea> 
       </td> 
       </tr> 
    </table> 

     <p> 
     &emsp;&emsp;&emsp;&nbsp; 
     <input type = "reset" value = "Reset" /> 
     &emsp;&emsp;   
     <input type = "submit" value = "Share Idea!" 
     title = "complete form first to submit" 
     id = "submit_button" 
     name = "add_comment" 
       onmousedown = "IsIdeaFormCompleted();" /> 
    </p> 
      </form> <!-- end idea_form -->    
     </div> 
    </div> <!-- end of ShareYourIdea_middle --> 
    <script> 
     DisplayFooter(); 
</script> 

<?php 
    if(isset($_POST['add_comment'])){ // if add comment was pressed 

    // get variables 
$name = $_SESSION['firstName']; 
    $empId = $_SESSION['userId']; 
    $idea = $_POST['b_idea']; 

    // CONNECTING TO OUR DATABASE 
$db = mysqli_connect(dbHost, dbUser, dbPassword, dbName); 

    if (mysqli_connect_errno()) { //if connection to the database failed 
echo("<p id = 'greatideadescription'> 
      Connection to database failed: " . 
     mysqli_connect_error($db) . "</p>"); 
exit("goodbye"); 
    } //by now we have connection to the database 


// WE WRITE OUR QUERY TO INSERT POST INFO TO DATABASE 
$query = "INSERT INTO posts(postId,empl_Id,post,postDate) 
     VALUES('','$empId','$idea',NOW())"; 
    $result = mysqli_query($db, $query); 



    } 

?> 

<?php 
    // WE DO A QUERY TO SHOW ALL COMMENTS IN THE PAGE 
$query = "SELECT firstName,lastName, post, 
     date_format((date_add(postDate,interval -7 hour)),'%a, %M, %d, %Y at %I:%i%p') as  mydatefield 
     FROM users INNER JOIN posts ON userId = empl_Id 
     ORDER BY postDate DESC"; 

$result = mysqli_query($db,$query); 
if (!$result) { //if the query failed 
    echo("<p id = 'greatideadescription'> 
    Error, the query could not be executed: " . 
    mysqli_error($db) . "</p>"); 
    mysqli_close($db);} 

if (mysqli_num_rows($result) == 0) { //if no rows returned 
    echo("<div id = 'blogs'> 
      <div id ='name'> 
      No posts detected 
      </div> 
     </div> 
     <div class='fb-like' data-href='http://jacobspayroll.zxq.net/index/blog.php' data-send='true' data-width='450' data-show-faces='true'></div> 
    "); 
    mysqli_close($db); //close the database 
    exit("</table></div></form></div></div> 
     <script>DisplayFooter();</script></body></html>"); 
     } //by now we know that we have some products purchases returned 
    $numRows = mysqli_num_rows($result); //gets number of rows 
    $numFields = mysqli_num_fields($result); //gets number of fields 
    //prints the data in the table 

    while($row = mysqli_fetch_assoc($result)){ 
    $posted = $row['post']; 
    $message = wordwrap($posted,5); 
    echo 
    '<div id ="blogs"> 
     <table id = "blog_id"> 
      </br> 
      <div id = "name"> 
      <strong>'.$row['firstName'] . '&nbsp;' .$row['lastName']. 
      '</strong> 
      &nbsp;: ' .$message . 
      '<br/> 
      </div> 
      <div id ="date">'. 
      $row['mydatefield'] . ' 
      </div> 
      <div id ="delete_comment"> 
      Delete this comment 
      </div> 
      <p> 
     </table> 
    </div>';  
} 
    mysqli_close($db); 

    ?> 
    </body> 

    </html> 

ответ

6

у вас есть неправильное использование PHP_SELF

//You must use Server and execution environment information `$_SERVER[]` 

$_SERVER['PHP_SELF']; 

// For your form action like this 
action = "<?php echo $_SERVER['PHP_SELF'];?>" 
+0

в вашей форме действия ... вместо '$ PHP_SELF' он должен быть' $ _SERVER [ 'PHP_SELF'] ' –

+0

спасибо, но я до сих пор с той же проблемой. Когда я впервые доберусь до этой страницы, появляется сообщение об ошибке «Ошибка», запрос не может быть выполнен, и нет сообщений, но я все равно могу опубликовать комментарий, и как только я это сделаю. Я вижу все сообщения. Я хочу, чтобы сообщения всегда показывались. – user2189151

+0

Ваши данные уже были отправлены и отправлены в таблицу базы данных для 'post' –

0

как упоминалось Kail вы получили это неправильно, но вы можете использовать $_SERVER['SCRIPT_NAME'] вместо $_SERVER['PHP_SELF'], то вы можете добавить некоторый скрипт, чтобы получить GET параметры, если вы используете их для вашего скрипта (ов). Если вы используете PHP_SELF, у вас может быть ссылка пользователя на script.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo может выглядеть как action="script.php/"><script>alert('xss')</script> или может быть перенаправлением на сбор файлов cookie, а также, например, на XSS-атаку.

$_SERVER['PHP_SELF'] vs $_SERVER['SCRIPT_NAME'] vs $_SERVER['REQUEST_URI']

XSS Woes

What's the difference between $_SERVER['PHP_SELF'] and $_SERVER['SCRIPT_NAME']?

+0

Не могли бы вы рассказать о преимуществах 'SCRIPT_NAME'? – kero