2017-06-16 1 views
-2

Je développe un système de commentaire pour mes médias sociaux, mais les commentaires sont insérés dans la base de données même si elle est vide. Donc je ne veux rien faire si le champ commentaire est vide, je ne veux pas n'importe quel message ou en soumettant le commentaire.Empêcher de soumettre si le champ de saisie est vide

C'est mon 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

double possible de [Comment éviter de soumettre la valeur de champ de saisie de formulaire HTML si elle vide] (https://stackoverflow.com/a/8029581/6521116) –

+0

il suffit de cocher le commentaire La valeur du champ est vide ou non avant l'insertion dans DB. si c'est là alors insérez sinon ne faites rien. –

+0

Considérant que vous faites déjà une vérification conditionnelle dans votre code tel qu'il est ... il vous suffit d'écrire une instruction if qui vérifie que cette entrée est vide. Sinon, continuez. Si oui, ne poursuivez pas. Sincèrement, je suis étonné que vous ayez écrit ce code et que vous deviez vous enquérir de ne pas laisser le formulaire soumettre si l'entrée est vide. –

Répondre

0

Ajouter cet attribut au champ d'entrée correct: <input required: required;> qui devrait corriger pour vous :-)

voir http://w3c.github.io/html/sec-forms.html#the-required-attribute pour plus d'informations

+0

J'ai déjà commenté ceci, encore, vous devriez traiter cette vérification sur le côté de serveur après avoir nettoyé les données récupérées ... –

+0

Ah merde, désolé j'ai mal lu ce que vous vouliez dire xD – D3nj1

+0

je ferai la même chose pour ne confondre personne : D – D3nj1

0

Inclus une démo au dessous de. Le premier formulaire affichera un message d'erreur quand il est soumis - attribut required - (que vous ne voulez probablement pas) et la seconde forme ne donne aucun retour - attribut required mais novalidate pour le formulaire.

<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

Comme l'a commenté l'autre réponse, l'attribut en lui-même n'est pas suffisant et peut ne pas être compris partout. Vous devriez lier la ressource à votre réponse pour la faire valoir;) –