2017-06-17 2 views
1

Ich versuche, ein Formular zu erstellen, wenn der Benutzer auf eine Schaltfläche auf einem ausgewählten Element klickt. Wenn ich es jedoch versuche, klicke ich auf einen Knopf und es lädt entweder mehrere, oder lädt 1, zeigt aber nur einen Wert, wenn das sinnvoll ist. Hier ist mein Code:Füllen Sie Eingabewerte mit PHP-Variablen mit zugehöriger ID

<?php 

     $sql = "SELECT * FROM services"; 
     $result = $database->query($sql); 

     while ($row = mysqli_fetch_assoc($result)) { 

      $id = $row['id']; 

?> 

      <div class="service_display"> 
       <div class="service_header"><?php echo $row['service_name']; ?></div> 
       <div class="service_desc"><?php echo $row['service_desc']; ?></div> 
       <div class="service_options"> 
        <button type="button" class="additional_files" id="additional_files">Edit</button> 
       </div> 
      </div> 
<?php 
     } 

?> 

ich eine Form haben, die mit jQuery angezeigt wird, wenn die Taste gedrückt wird, und im Versuch, die Werte mit den jeweiligen IDs zu füllen. Hier ist mein Code dafür:

   <div class="show-onclick"> 
        <h3>Edditing service: <?php echo $row['service_name']; ?></h3> 
        <hr> 
        <form action="inc/save_edit.php?id=<?php echo $row['id']; ?>" class="service_editform"> 
         <input type="text" name="service_name" value="<?php echo $row['service_name']; ?>"> 
         <textarea><?php echo $row['service_desc']; ?></textarea> 
        </form> 
       </div> 

ich glaube, das Problem ist, ich nicht zu wissen, wo dieser Code zu setzen, wenn ich es in der while-Schleife setzen, es funktioniert, aber verständlicherweise, ich habe wie 10 Eingang pop Felder up ..

wenn ich es außerhalb der while-Schleife und eine separate Abfrage ausführen, es zu füllen, seine leeren ..

Antwort

0

Wie pro Sie Erklärung des Problems ist klar, dass Sie die Formulare sind Looping zusammen mit der Front-End-Anzeige divs, das ist nicht so eine gute Idee.

Es ist immer besser, ein modales Fenster zu verwenden und dann müssen Sie je nach Klick die Daten darauf laden und dann aufklappen.

Wie auch immer für Ihr Szenario kann es mehr als eine Lösung sein, aber das wird man auch den Zweck dienen:

Setzen Sie das „Show-Onclick“ ganze div innerhalb der „service_display“ div, so dass nun auch sie geschlungen wird ohne Probleme. Jetzt, wenn der Knopf geklickt wird, finden Sie das nächste "service_display" div, es gibt Ihnen das dom Element & dann verwenden Sie das und poppen Sie den darin enthaltenen "show-onclick" div auf.

Folgen Sie den Code unten:

<?php 
     $database = new mysqli("localhost", "root", "", "so"); 
     $sql = "SELECT * FROM services"; 
     $result = $database->query($sql); 

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

      $id = $row['id']; 

?> 

      <div class="service_display" id="sd_<?php echo $row['id']; ?>"> 
       <div class="service_header"><?php echo $row['service_name']; ?></div> 
       <div class="service_desc"><?php echo $row['service_desc']; ?></div> 
       <div class="service_options"> 
        <button type="button" class="additional_files" id="additional_files">Edit</button> 
       </div> 

       <div class="show-onclick"> 
        <h3>Edditing service: <?php echo $row['service_name']; ?></h3> 
        <hr> 
        <form action="inc/save_edit.php?id=<?php echo $row['id']; ?>" class="service_editform"> 
         <input type="text" name="service_name" value="<?php echo $row['service_name']; ?>"> 
         <textarea><?php echo $row['service_desc']; ?></textarea> 
        </form> 
       </div> 
      </div> 
<?php 
     } 

?> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
$(".show-onclick").css("display", "none"); 
    $(document).on("click", ".additional_files", function() { 
     $(".show-onclick").css("display", "none"); 
     var sd_id=$(this).closest('div.service_display').attr("id"); 
     $("#"+sd_id+" .show-onclick").css("display", "block");  
    }); 
}); 
</script> 

Die einzige Änderung, die ich an Ihren Code gemacht ist i ein dynamisches ID-Feld hinzugefügt habe div service_display. Und Ich habe jquery verwendet, um die Formulare der jeweiligen angeklickt Schaltflächen anzuzeigen und auszublenden.

Auch hier habe ich OOP-basierte MySQL verwendet, die nicht obligatorisch ist, ist auch völlig in Ordnung.

+0

Danke, ich habe es in einem modalen Fenster, aber jetzt funktioniert es nur, wenn der erste geloopte Artikel, nicht der Rest .. –

+0

RE: Ihr Update: - Danke! Funktioniert perfekt. Du hast mir gerade Tage von Kopfschmerzen erspart, vielen Dank. :) –

+0

Sie sind herzlich willkommen :-) –

Verwandte Themen