es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar el HTML que se encuentra dentro de un bucle foreach si el arreglo está vacío?

Tengo el siguiente código en mi página y funciona cuando hay datos en la variable $getbanking. Pero si $getbanking está vacío, estoy obteniendo el siguiente error:

Advertencia: Argumento no válido para foreach()

Tengo que ejecutar el siguiente código al menos una vez si $getbanking está vacío. De esta manera se mostrará la opción de carga de archivos al usuario.

<?php 
  $getbanking = unserialize($info['banking_details']); 
?>

<?php 
  $i=1;
  foreach ($getbanking as $bankdoc => $b) {   
?>
<div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12">
  <div class="documentUploadWrap">
    <label>Banco <?php echo $i; ?></label>
    <div class="upload<?php if(!empty($b)) { echo " imgext="" uploaded="" ";="" }=""></div>">
      <input type="hidden" name="banking[<?php echo $bankdoc; ?>]" value="<?php echo $b; ?>">
      <input type="file" name="banking[<?php echo $bankdoc; ?>]" class="fileupload noofbank" accept="image/png, image/jpeg, application/pdf, .doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">
      <div class="uploadInfo">
        <div class="uploadicon"></div>
        <p>Arrastra tu imagen aquí o <span>navega</span></p>
        <span>Compatible con: JPEG, PNG, DOC, PDF</span>
      </div>
      <div class="previewFile">
        <a href="uploads/<?php echo $b; ?>" target="_blank">
          <div class="previewFileIcon text-center"></div>
        </a>
        <p class="fileNamePreview"><?php echo $b; ?></p>
      </div>
      <?php if($i>=2) { ?>
      <div class="close-box close-box-bank"><img src="assets/images/x-circle.svg"></div>
      <?php } ?>
    </div>
  </div>

<?php $i++; } ?>
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema ocurre porque el bucle foreach está intentando iterar sobre un array vacío, lo cual no es posible. Para evitar este problema, puedes agregar una verificación para ver si el array está vacío antes de ejecutar el bucle.

    Una forma de hacer esto es utilizando la función empty(). Puedes modificar el código de la siguiente manera:

    <?php 
      $getbanking = unserialize($info['banking_details']); 
    
      // Verifica si el array está vacío
      if (empty($getbanking)) {
        // Si el array está vacío, mostrar la opción de carga al usuario
        // Puedes agregar tu código HTML aquí
      } else {
        // Si el array no está vacío, ejecutar el bucle foreach
        $i=1;
        foreach ($getbanking as $bankdoc => $b) { ?>
          <div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12">
            <div class="documentUploadWrap">
              <label>Banco <?php echo $i; ?></label>
              <div class="upload_doc <?php if(!empty($b)) { echo " imgext="" uploaded="" ";="" }=""></div>">
                <input type="hidden" name="banking[<?php echo $bankdoc; ?>]" value="<?php echo $b; ?>">
                <input type="file" name="banking[<?php echo $bankdoc; ?>]" class="fileupload noofbank" accept="image/png, image/jpeg, application/pdf, .doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">
                <div class="uploadInfo">
                  <div class="upload_icon"></div>
                  Arrastra tu imagen aquí, o <span>navega</span>
                  <span>Formatos admitidos: JPEG, PNG, DOC, PDF</span>
                </div>
                <div class="previewFile">
                  <a href="uploads/<?php echo $b; ?>" target="_blank">
                    <div class="previewFileIcon text-center"></div>
                  </a>
    
                  <p class="fileNamePreview"><?php echo $b; ?></p>
                </div>
                <?php if($i>=2) { ?>
                <div class="close-box close-box-bank"><img src="assets/images/x-circle.svg"></div>
                <?php } ?>
              </div>
            </div>
    
          <?php $i++; } ?>
      }
    ?>
    

    De esta manera, el código dentro del bloque if se ejecutará solo cuando el array $getbanking esté vacío, y el bucle foreach se ejecutará solo cuando el array no esté vacío.

Comments are closed.