Tengo una gran variable de cadena php. Quiero poner php if / else condition dentro de él, por lo que los botones de edición y eliminación se mostrarán solo al autor del comentario y no a todos, pero mi código no funciona. Usé dos puntos para definir la condición if / else, pero no funciona. La condición regular si / de otra manera tampoco funciona.

Aquí está mi código php:

$user_id = $_SESSION['user_id'];

$if = "if ($user_id == $row['user_id']): ";

$else = "else: ";

$endif = "endif; ";

foreach($result as $row)
{
 $output .= '
<div class="panel panel-default">
  <div class="panel-body">'.$row["comment"].'</div>

  <div class="panel-footer">

     '. $if .'

     <form  class="input-group form-row" action="comment_delete1.php" method="post" enctype = "multipart/form-data">
        <div class="input-group-prepend">
         <input type="hidden" name="comment_id" id="comment_id" value="'.$row["comment_id"].'" />
         <input type="hidden" name="user_id" id="user_id" value="'.$row["user_id"].'" />
         <input type="submit" name="submit" id="submit" class="submit btn btn-default" value="Delete" />
        </div>
      </form>   

      <button type="button" class="btn btn-default edit" id="'.$row["comment_id"].'" >Edit</button>  

    '. $else .'

      <button type="button" class="btn btn-default reply" id="'.$row["comment_id"].'" >Reply</button>

    '. $endif .'

    </div>
</div>
 ';
}
echo $output;

-3
Brian 24 feb. 2020 a las 20:23

2 respuestas

La mejor respuesta

Aquí está la solución:

Si ponemos condiciones dentro de php string o heredoc, php las tratará como string y las mostrará en la pantalla como string. Entonces no podemos tener condiciones dentro de la cadena.

Puse las condiciones if else fuera de la variable de cadena php, y creé dos variables de cadena php, una con botones de borrar y editar, y la otra sin botones de borrar y editar. Entonces, if el user_id es igual al ID de usuario de la sesión, se mostrará la variable de cadena php con los botones de borrar y editar. Y, else if el user_id no es igual al ID de usuario de la sesión, se mostrará la variable de cadena php sin botones de eliminación y edición. La variable de cadena php se repetirá al final de todas las condiciones.

Aquí está el código php:

$user_id = $_SESSION['user_id'];

foreach($result as $row) {

   if ($row['user_id'] === $user_id) {

$output .= '
<div class="panel panel-default">
  <div class="panel-body">'.$row["comment"].'</div>

  <div class="panel-footer">
     <form  class="input-group form-row" action="comment_delete1.php" method="post" enctype = "multipart/form-data">
        <div class="input-group-prepend">
         <input type="hidden" name="comment_id" id="comment_id" value="'.$row["comment_id"].'" />
         <input type="hidden" name="user_id" id="user_id" value="'.$row["user_id"].'" />
         <input type="submit" name="submit" id="submit" class="submit btn btn-default" value="Delete" />
        </div>
      </form>   

      <button type="button" class="btn btn-default edit" id="'.$row["comment_id"].'" >Edit</button>  
      <button type="button" class="btn btn-default reply" id="'.$row["comment_id"].'" >Reply</button>
    </div>
</div>
 ';

    } else if ($row['user_id'] !== $user_id) {

$output .= '
<div class="panel panel-default">
  <div class="panel-body">'.$row["comment"].'</div>

  <div class="panel-footer">
      <button type="button" class="btn btn-default reply" id="'.$row["comment_id"].'" >Reply</button>
  </div>
 </div>
 ';
    }
}

echo $output;

0
Brian 25 feb. 2020 a las 20:26

Para hacer esto correctamente, se debe evaluar la condición:

foreach($result as $row)
{
 $output .= '
<div class="panel panel-default">
  <div class="panel-body">'.$row["comment"].'</div>

  <div class="panel-footer">';

if ($user_id == $row['user_id']) {

     $output .=  '<form  class="input-group form-row" action="comment_delete1.php" method="post" enctype = "multipart/form-data">
        <div class="input-group-prepend">
         <input type="hidden" name="comment_id" id="comment_id" value="'.$row["comment_id"].'" />
         <input type="hidden" name="user_id" id="user_id" value="'.$row["user_id"].'" />
         <input type="submit" name="submit" id="submit" class="submit btn btn-default" value="Delete" />
        </div>
      </form>   

      <button type="button" class="btn btn-default edit" id="'.$row["comment_id"].'" >Edit</button>';

} else {

      $output .= '<button type="button" class="btn btn-default reply" id="'.$row["comment_id"].'" >Reply</button>
    </div>
</div>
 ';
    }
}
echo $output;

Esta no es una buena manera de hacer esto y debería considerar refactorizar su código para que sea mucho más ordenado y fácil de leer.

0
Jay Blanchard 24 feb. 2020 a las 17:33