2016-04-15 3 views
1

Haben einige db-informationen, die ich versuche, in einige modale zu bekommen.php wählen fetch while loop in bootstrap modal

Problem scheint zu sein, dass das modale immer nur die Variablen aus der letzten while-Schleife ergreift. Wird das ganze PHP auf einer Seite zuerst ausgeführt? Auch wenn es nicht heißt?

Also ich weiß, es gibt wahrscheinlich einfachere Möglichkeiten, dies zu tun mit get_results() und fetch_array und fetch_row, aber diese scheinen nicht für mich in PHP 5.5 arbeiten.

Auch habe ich irgendwo gelesen, um AJAX zu verwenden. Nun, da ich noch nie Ajax benutzt habe, ist das etwas, was ich untersuchen sollte?

<div class="col-md-4"> 
    <?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

    require ($_SERVER['DOCUMENT_ROOT'].'/db-connect.php'); 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    //echo $conn->host_info . "\n"; 

    if ($stmt = $conn->prepare("SELECT time, title, tool, descript, thumbpath, smallpath, mediumpath, largepath FROM websites ORDER BY id DESC LIMIT 1")){ 

     //$stmt->bind_param('s',$id); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $stmt->bind_result($time, $title, $tool, $descript, $thumbpath, $smallpath, $mediumpath, $largepath); 

     while ($stmt->fetch()) { 


     } 

     $stmt->free_result(); 
     $stmt->close(); 
    } 

    $conn->close(); 
    ?> 

    <img class="img-responsive" title="<?php echo $tool; ?>" data-toggle="modal" data-target="#modalPort" sizes="100vw" src="<?php echo $thumbpath; ?>" srcset="<?php echo $smallpath; ?> 500w, <?php echo $mediumpath; ?> 1000w, <?php echo $largepath; ?> 1500w" alt="Portfolio Site"> 
    <span class="time line-height-small"><?php echo $time; ?></span> 
</div> 

Die Variable ist hier in Ordnung. Das Problem ist, dass ich das gleiche PHP-Skript ein paar Mal mit den gleichen bind_result-Variablen ausgeführt habe. Ich möchte nicht wirklich Variablen für jedes Modal ändern.

Modal:

<!-- Website Modals--> 
<div class="modal fade" id="modalPort" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true"> 
<div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
      <h4 class="modal-title" id="portfolioModallabel"><?php echo $title; ?></h4> 
     </div> 
     <div class="modal-body text-center"> 
      <img class="img-responsive center-block" src="<?php echo $thumbpath; ?>" sizes="100vw" srcset="<?php echo $smallpath; ?> 500w, <?php echo $mediumpath; ?> 1000w, <?php echo $largepath; ?> 1500w" alt="Portfolio Site"> 
      <p class="line-height-small"><?php echo $descript; ?></p> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 
    </div> 
</div> 

Antwort

0

Eine Möglichkeit ist modal innerhalb while ($stmt->fetch()) { } setzen beide modale Triggertaste zuweisen und sich die data-target="#modalPort<?php echo $id;?>" in modal Auslöseknopf unique id

Hinweis modal und id="modalPort<?php echo $id;?>" in modales HTML

<?php while ($stmt->fetch()) { ?> 
    <button data-toggle="modal" data-target="#modalPort<?php echo $id;?>" class="btn btn-default">Modal</button> 

    <div class="modal fade" id="modalPort<?php echo $id;?>" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <h4 class="modal-title" id="portfolioModallabel"><?php echo $title; ?></h4> 
      </div> 
      <div class="modal-body text-center"> 
       <img class="img-responsive center-block" src="<?php echo $thumbpath; ?>" sizes="100vw" srcset="<?php echo $smallpath; ?> 500w, <?php echo $mediumpath; ?> 1000w, <?php echo $largepath; ?> 1500w" alt="Portfolio Site"> 
       <p class="line-height-small"><?php echo $descript; ?></p> 
      </div> 
      <div class="modal-footer"> 
       <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
      </div> 
     </div> 
    </div> 
    </div> 
<?php } ?> 

Alternative Wenn Sie mit Ajax tun wollen, setzt modale HTML außerhalb der while loop, fügen <?php echo $id;?> als Daten-Triggertaste data-id="<?php echo $id;?>"

<?php while ($stmt->fetch()) { ?> 
    <button data-toggle="modal" data-target="#modalPort" data-id="<?php echo $id;?>" class="btn btn-default">Modal</button> 
<?php } ?> 

Modal event Zuhörer modal Attribut den data attribute Wert zu erhalten und später Verwenden Sie in der Ajax-Methode, um die entsprechenden Zeilendaten in modal anzuzeigen

get_data.php wird

<?php 
    //Include database connection 
    if($_POST['dataid']) { 
    //run query against `dataid` 
?> 
    <div class="modal-header"> 
     <h4 class="modal-title" id="portfolioModallabel"><?php echo $title; ?></h4> 
    </div> 
    <div class="modal-body text-center"> 
     <img class="img-responsive center-block" src="<?php echo $thumbpath; ?>" sizes="100vw" srcset="<?php echo $smallpath; ?> 500w, <?php echo $mediumpath; ?> 1000w, <?php echo $largepath; ?> 1500w" alt="Portfolio Site"> 
     <p class="line-height-small"><?php echo $descript; ?></p> 
    </div> 
    <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    </div> 
<?php } ?> 

und Modal HTML wird (außerhalb der Schleife)

<div class="modal fade" id="modalPort" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div id="content"></div> //display data output via ajax 
     </div> 
    </div> 
</div> 
+0

Dank eine ganze Reihe für die Hilfe Shehary! –