-1

I developing a comment system for my social media, but comments are inserted into database even if it's empty.So i want nothing to happen if comment field is empty,i don't want to echo any message or submitting the comment.

This is my code

    <?php 
    // Get id of post
    if(isset($_GET['post_id'])) {

        $post_id = $_GET['post_id'];
    }

    $user_query = mysqli_query($con, "SELECT added_by, user_to FROM posts 
    WHERE id='post_id'");
    $row = mysqli_fetch_array($user_query);

    $posted_to = $row['added_by'];
    $user_to = $row['user_to'];

    if(isset($_POST['postComment' . $post_id])) {

        $post_body = $_POST['post_body'];
        $post_body = mysqli_escape_string($con, $post_body);
        $date_time_now = date("Y-m-d H:i:s");
    $insert_post = mysqli_query($con, "INSERT INTO comments VALUES ('', 
    '$post_body', '$userLoggedIn', '$posted_to', '$date_time_now', 'no', 
    '$post_id')");

    if($posted_to != $userLoggedIn) {

        $notification = new Notification($con, $userLoggedIn);
        $notification->insertNotification($post_id, $posted_to, "comment");
    }

    if($user_to != 'none' && $user_to != $userLoggedIn) {

        $notification = new Notification($con, $userLoggedIn);
        $notification->insertNotification($post_id, $user_to, 
        "profile_comment");
    }

    $get_commenters = mysqli_query($con, "SELECT * FROM comments WHERE 
    post_id='$post_id'");
    $notified_users = array();
    while($row = mysqli_fetch_array($get_commenters)) {

        if($row['posted_by'] != $posted_to && $row['posted_by'] != $user_to
            && $row['posted_by'] != $userLoggedIn && 
        !in_array($row['posted_by'], $notified_users)) {

            $notification = new Notification($con, $userLoggedIn);
            $notification->insertNotification($post_id, $row['posted_by'], 
           "comment_non_owner");

            array_push($notified_users, $row['posted_by']);

        }

    }



    echo "<p>Comment Posted! </p>";
    }

    ?>

   <form action="comment_frame.php?post_id=<?php echo $post_id; ?>" 
   id="comment_form" name="postComment<?php echo $post_id; ?>" 
    method="POST">
    <textarea name="post_body" placeholder="Add a comment"></textarea>
    <input type="submit" name="postComment<?php echo $post_id; ?>" 
     value="Comment"> 

 </form>

 <!-- Load Comments -->
 <?php 
 $get_comments = mysqli_query($con, "SELECT * FROM comments WHERE 
 post_id='$post_id' ORDER BY id ASC");
 $count = mysqli_num_rows($get_comments);

 if ($count != 0) {

    while($comment = mysqli_fetch_array($get_comments)) {

        $comment_body = $comment['post_body'];
        $posted_to = $comment['posted_to'];
        $posted_by = $comment['posted_by'];
        $date_added = $comment['date_added'];
        $removed = $comment['removed'];

        //Timeframe

        $date_time_now = date("Y-m-d H:i:s");
        $start_date = new DateTime($date_added); // Time of Post
        $end_date = new DateTime($date_time_now); // Current time
        $interval = $start_date->diff($end_date); // Difference between 
        dates
        if($interval->y >= 1) {
            if($interval == 1)
                $time_message = $interval->y . " year ago"; // 1 year ago
            else
                $time_message = $interval->y . " years ago"; // 1+ year ago
        }
        else if ($interval-> m >= 1) {

            if($interval->d == 0) {
                $days = " ago";
            }
            else if($interval->d == 1) {
                $days = $interval->d . " days ago";
            }
            else {
                $days = $interval->d . " days ago";
            }

             if($interval->m == 1) {
                $time_message = $interval->m . " month". $days;
             }
             else {

                $time_message = $interval->m . " months". $days;
             }
        }
        else if($interval->d  >=1) {
            if($interval->d == 1) {
                $time_message = "Yesterday";
            }
            else {
                $time_message = $interval->d . " days ago";
            }
        }
        else if($interval->h >= 1) {
            if($interval->h == 1) {
                $time_message = $interval->h . " hour ago";
            }
            else {
                $time_message = $interval->h . " hours ago";
            }
        }
        else if($interval->i >= 1) {
            if($interval->i == 1) {
                $time_message = $interval->i . " minute ago";
            }
            else {
                $time_message = $interval->i . " minutes ago";
            }
        }
        else {
            if($interval->s < 30) {
                $time_message = "Just now";
            }
            else {
                $time_message = $interval->s . " seconds ago";
            }
        }

        $user_obj = new User($con, $posted_by);
        ?>
        <div class="comment_section">
        <a href="<?php echo $posted_by?>" target="_parent"><img src="<?php 
         echo $user_obj->getProfilePic(); ?>" title="<?php echo $posted_by; 
         ?>" style="float:left;" height="30"></a>
        <a href="<?php echo $posted_by?>" target="_parent"> <b><?php echo 
        $user_obj->getFirstAndLastName(); ?> </b> </a>
        &nbsp;&nbsp;&nbsp;&nbsp; <?php echo $time_message . "<br>" . 
        $comment_body; ?>
        <hr>
        </div>
        <?php

     } 
     }

    else {

    echo "<center><br><br>No comments to show</center>";
     }

    ?>



  </body>
  </html>
Arno
  • 35
  • 1
  • 7
  • 2
    Possible duplicate of [How to prevent submitting the HTML form's input field value if it empty](https://stackoverflow.com/a/8029581/6521116) – LF00 Jun 16 '17 at 06:47
  • just check the comment field value is empty or not before inserting into DB. if it is there then insert otherwise do nothing. – Saroj Jun 16 '17 at 06:47
  • Considering you're already doing conditional checking throughout your code as it is... you simply need to write an if statement that checks for that input being empty. If not, proceed. If so, do not proceed. Truthfully I am amazed you wrote this code and still had to inquire about not letting the form submit if the input is empty. – Jason Bassett Jun 16 '17 at 06:55
  • You could also use the attribute required on textarea http://w3c.github.io/html/sec-forms.html#the-required-attribute , **where understood** form should not be sent and treated untill it is filled :) – G-Cyrillus Jun 16 '17 at 06:57

2 Answers2

1

Add this attribute to the correct input field: <input required: required;> that should fix it for you :-)

see http://w3c.github.io/html/sec-forms.html#the-required-attribute for more information

G-Cyrillus
  • 101,410
  • 14
  • 105
  • 129
D3nj1
  • 95
  • 10
0

Included a demo below. The first form will display an error message when it is submitted - attribute required - (which you probably don't want) and the second form doesn't give any feedback - attribute required but novalidate for the form.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
   <textarea required onsubmit="return false;"></textarea><br>
   <input type="submit" value="submit">
</form><br><br>

<form novalidate onsubmit="return false;">
   <textarea required></textarea><br>
   <input type="submit" value="submit">
</form>
Gerard
  • 15,418
  • 5
  • 30
  • 52
  • As commented on the other answer, the attribute on its own is not enough and might not be understood every where . You should link ressource to your answer to make it worth it ;) – G-Cyrillus Jun 16 '17 at 07:13