2017-06-16 5 views
-2

Ich entwickle ein Kommentar-System für meine Social Media, aber Kommentare werden in die Datenbank eingefügt, auch wenn es leer ist.So will ich nichts passieren, wenn Kommentarfeld leer ist, möchte ich nicht echo jede Nachricht oder die Übermittlung des Kommentars.Senden verhindern, wenn das Eingabefeld leer ist

Dies ist mein 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> 
+2

Mögliche Duplikat von [Wie verhindern Absenden des Eingabefeldes Wert des HTML-Formular, wenn es leer] (https://stackoverflow.com/a/8029581/6521116) –

+0

nur den Kommentar überprüfen Feldwert ist leer oder nicht vor dem Einfügen in DB. Wenn es da ist, dann füge sonst nichts ein. –

+0

In Anbetracht der Tatsache, dass Sie in Ihrem Code bereits bedingte Prüfungen vornehmen, wie es ist, müssen Sie einfach eine if -Anweisung schreiben, die prüft, ob diese Eingabe leer ist. Wenn nicht, fahren Sie fort. Wenn ja, nicht weitermachen. Ehrlich gesagt bin ich erstaunt, dass Sie diesen Code geschrieben haben und immer noch fragen mussten, ob das Formular nicht gesendet werden soll, wenn die Eingabe leer ist. –

Antwort

0

dieses Attribut hinzufügen auf das richtige Eingabefeld: <input required: required;> dass es für Sie beheben soll :-)

http://w3c.github.io/html/sec-forms.html#the-required-attribute für weitere Informationen

+0

Ich habe dies bereits kommentiert, noch, sollten Sie diese Überprüfung auf der Server-Seite nach dem Bereinigen der Daten abgerufen werden ... –

+0

Ah Mist, tut mir leid, ich falsch gelesen was du meinst xD – D3nj1

+0

ich werde das gleiche tun, um niemanden zu verwirren : D – D3nj1

0

eine Demo inklusive sehen unten. Das erste Formular wird eine Fehlermeldung anzeigen, wenn es gesendet wird - Attribut required - (die Sie wahrscheinlich nicht möchten) und das zweite Formular gibt keine Rückmeldung - Attribut required aber novalidate für das Formular.

<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>

+0

Wie zu der anderen Antwort kommentiert, ist das Attribut allein nicht genug und wird möglicherweise nicht überall verstanden. Sie sollten Ressource mit Ihrer Antwort verknüpfen, um es wert zu machen;) –

Verwandte Themen