PHP Эхо повторяется после запроса - PullRequest
0 голосов
/ 16 января 2020

Я хочу получить оператор SQL Select, который получает значения из базы данных и, если есть какие-либо результаты, отображает форму и результаты в раскрывающемся меню.

В настоящее время он получает значения, но форма отображает количество результатов. Например, если у запроса есть 1 результат, он выводит форму один раз. 2 результата, повторяю форму дважды и так далее. Я хочу, чтобы форма отображалась один раз, но выпадающий список содержит все результаты.

Если бы кто-то мог указать мне правильное направление, это было бы здорово. Thanks

изображение с 2 результатами из базы данных

<?php
            include("conndetails.php");     
            $conn = new mysqli($servername, $username, $password, $dbname);
            $sql    = "SELECT website_name FROM user_websites WHERE username='$_SESSION[user]'"; //Selects all the websites for the user that is logged in. 
            $result = $conn->query($sql);
              if ($result->num_rows > 0) {
                  while ($row = $result->fetch_assoc()) {

    echo '<h2>Download a website</h2>
          <form action="downloads.php" method="get">
          <select id="website_name" name="website_name">
          <option name="website_name">'. $row["website_name"]. '
          </option>
          </select>
          <input type="submit" value="Download">
          </form>
          <br>
          <hr>

          <h2>Upload to a website</h2>
          <form action="upload.php" method="post" enctype="multipart/form-data"> 
          <p>Select file to upload:</p>
          <input type="file" name="zip_file" id="fileToUpload">
          <p>Select a website to upload to:</p>
          <select id="website_upload_name" name="website_upload_name">
          <option name="website_upload_name">'. $row["website_name"]. '
          </option>
          </select>
          <br>
          <br>
          <input type="submit" value="Upload" name="submit" style="position:relative; left: -1px;">
          </form>
          <br>
          <hr>';

             }}
    ?>

Ответы [ 2 ]

1 голос
/ 16 января 2020

Причина, по которой оно отражается столько же раз, сколько и полученные результаты, заключается в том, что вы поместили оператор echo в конструкцию while. Если вы хотите, чтобы эхосигнал отображался только один раз, когда условие оператора if проверено, переместите этот эхосигнал за пределы while и поместите код html для параметров в переменные, которые вы создадите в то время. Здесь я полагаю, что обе комбинации должны иметь те же параметры, что и исходный код:

if ($result->num_rows > 0) {

$options = '';

  while ($row = $result->fetch_assoc()) {

    $options .= '<option name="website_name">'. $row["website_name"]. '</option>';    

  }

  echo '<h2>Download a website</h2>
        <form action="downloads.php" method="get">
          <select id="website_name" name="website_name">' . $options . '</select>
          <input type="submit" value="Download">
         </form>
         <br>
         <hr>

         <h2>Upload to a website</h2>
         <form action="upload.php" method="post" enctype="multipart/form-data"> 
           <p>Select file to upload:</p>
           <input type="file" name="zip_file" id="fileToUpload">
           <p>Select a website to upload to:</p>
           <select id="website_upload_name" name="website_upload_name">' . $options . '</select>
           <br>
           <br>
           <input type="submit" value="Upload" name="submit" style="position:relative; left: -1px;">
         </form>
         <br>
         <hr>';

}
1 голос
/ 16 января 2020

Создайте переменную $options и, возвращая данные, добавьте <option> к переменной. Не помещайте весь свой код html в while.

if ($result->num_rows > 0) {

   //Declare $options
   $options = '';


   while ($row = $result->fetch_assoc()) {
      //Adding <option> to the var $options
      $options .= '<option name="website_name">'. $row["website_name"]. '
          </option>';
    }



    //HTML once, first part
   $html = '<h2>Download a website</h2>
          <form action="downloads.php" method="get">
          <select id="website_name" name="website_name">';

   //Adding <option> to the <select>
   $html .= $options;

   //HTML once, second part
   $html .= '</select>
          <input type="submit" value="Download">
          </form>
          <br>
          <hr>

          <h2>Upload to a website</h2>
          <form action="upload.php" method="post" enctype="multipart/form-data"> 
          <p>Select file to upload:</p>
          <input type="file" name="zip_file" id="fileToUpload">
          <p>Select a website to upload to:</p>
          <select id="website_upload_name" name="website_upload_name">'

    //Adding <option> to the second <select>
    $html .= $options;

    //HTML once, third part
    $html .= '</select>
      <br>
      <br>
      <input type="submit" value="Upload" name="submit" style="position:relative; left: -1px;">
      </form>
      <br>
      <hr>';


  //Printing
  echo $html;


  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...