I can not generate a SELECT SQL query. I did so a couple does not work.

 <?php if (isset($_POST["user_id"])) { $post_user_id = $_POST["user_id"]; $user_id = $_SESSION['user_id']; $query="SELECT * FROM user_messages JOIN users ON (users.`user_id` = user_messages.`message_to_user_id` OR users.`user_id` = user_messages.`message_from_user_id`) AND message_to_user_id=$user_id AND message_from_user_id=$post_user_id"; $result = mysql_query($query); $post = mysql_num_rows($result); if ($post) { while ($row = mysql_fetch_assoc($result)) { $user_first_name = $row['user_first_name']; $message_content = $row['message_content']; echo '<div>'.$user_first_name.'</div>'.$message_content.'<br>'; } } } ?> 

enter image description here enter image description here

I can not do so

enter image description here

James ( $_SESSION['user_id'] ) is me, and Arthur ( $_POST["user_id"] ) is my friend

  • Show the var_dump variable $ result - MAKADORE
  • Are you debugging your code? Found a stage in which there is a stupor? - MAKADORE

1 answer 1

1) At a minimum, it is necessary to prevent SQL injections , in this case, you can:

 $post_user_id = (int) $_POST["user_id"]; $user_id = (int) $_SESSION["user_id"]; 

2) And add the WHERE predicate query to SQL :

 $query = "SELECT ut.user_first_name AS user_to, uf.user_first_name AS user_from, um.message_content FROM user_messages AS um INNER JOIN users AS ut ON ut.`user_id` = um.`message_to_user_id` INNER JOIN users AS uf ON uf.`user_id` = um.`message_from_user_id` WHERE (um.message_to_user_id = $user_id AND um.message_from_user_id = $post_user_id) OR (um.message_to_user_id = $post_user_id AND um.message_from_user_id = $user_id)"; 

In the request I changed the name of the columns, in the code change

 $user_first_name = $row['user_from']; 

3) Do not use outdated functions, use PDO or at least mysqli_query ()

4) For debugging, you can use xdebug or at least var_dump () . Like so

 $post_user_id = (int) $_POST["user_id"]; $user_id = (int) $_SESSION["user_id"]; $query = "SELECT ..."; $result = mysql_query($query); echo '<pre>'; echo var_dump($post_user_id); echo var_dump($user_id); echo var_dump($result); die('</pre>'); 

UPD

Updated request - http://sqlfiddle.com/#!9/aa893/10/0

  • @KYRAN try debazhit - korytoff
  • @KYRAN so you only have 1 sender and 1 recipient in your request, you need another request, now I’ll update the answer - korytoff
  • so I changed the name of the columns, look - korytoff
  • Thank you brother from the heart !!! - KYRAN