2016-04-19 4 views
0

Der folgende Code ist mit einer lokalen Datenbank verbunden, die Kundeninformationen enthält. Zunächst sollte die Seite den Namen und das Land des Kunden anzeigen, aber nach dem Klicken auf den Namen weitere Informationen für diesen bestimmten Kunden anzeigen.JavaScript-Funktion innerhalb von PHP, um weitere Informationen zu zeigen (Datenbankabfrage)

Das Problem mit diesem Code unten ist, dass es immer nur die ersten Kundeninformationen anzeigen wird, egal welcher Name angeklickt wird. Kann jemand sehen, wo ich vielleicht falsch liege? Muss ich für jede Schaltfläche (Kundenname) eine ID erstellen? Bedenken Sie, dass sich viele Kunden in der Datenbank befinden und ich denke, dass eine ID für jede Datenbank sehr schwierig zu implementieren wäre, insbesondere wenn die Datenbank geändert wird.

<DOCTYPE html!> 
<html> 
    <head> 
    <link rel="stylesheet" type="text/css" href="a3.css"> 
</head> 
<body> 
    <div class="nav"> 
     <?php include 'nav.php'; 
     ?> 
    </div> 
    <?php include 'dbconfig.php'; 
    $sql ='SELECT * FROM `customers` ORDER BY `customers`.`country` ASC'; 
    $q = $conn->query($sql); 
    $q->setFetchMode(PDO::FETCH_ASSOC); 
    ?> 
    <div class = "main"> 
     <table> 
      <?php while ($r = $q->fetch()): ?> 
       <tr> 
        <td><button onclick = "showCustomer();"/><?php echo ($r['customerName'])?></td> 
        <td><?php echo ($r['country'])?></td> 
       </tr> 
       <tr id ="extra" style="display:none"> 
        <td><?php echo ($r['customerNumber'])?></td> 
        <td><?php echo ($r['contactLastName'])?></td> 
        <td ><?php echo ($r['contactFirstName'])?></td> 
        <td><?php echo ($r['phone'])?></td> 
        <td><?php echo ($r['addressLine1'])?></td> 
        <td><?php echo ($r['addressLine2'])?></td> 
        <td><?php echo ($r['city'])?></td> 
        <td><?php echo ($r['state'])?></td> 
        <td><?php echo ($r['postalCode'])?></td> 
        <td><?php echo ($r['salesRepEmployeeNumber'])?> </td> 
        <td><?php echo ($r['creditLimit'])?></td> 
       </tr> 
      <?php endwhile; ?> 
     </table> 
     </div> 

     <div class="foot"> 
     <?php include 'foot.php'; ?> 
     </div> 
     <script> 



     function showCustomer() { 
      var showForm=document.getElementById('extra'); 
      if (showForm.style.display="none") { 

       showForm.style.display =""; 
       alert('ok'); 
       console.log(showForm); 
      } 
      else if (showForm.style.display=""){ 
       showForm.style.display ="none"; 
      } 
     } 
    </script> 
</body> 
</html> 
</DOCTYPE> 
+0

Eine ID muss eindeutig sein. Generieren Sie eine eindeutige ID für jedes versteckte Element und übergeben Sie die eindeutige ID an die JavaScript-Funktion. –

+0

Ihre '' '' '' Elemente werden innerhalb einer PHP '' while''' Schleife erzeugt. Also, wenn Sie 10 Kunden haben, haben Sie 10 '' '' '' Elemente mit der gleichen ID "extra" – kkaosninja

+0

Also sollte ich die Tabelle außerhalb der While-Schleife erstellen? Ich habe über 50 Kunden. würde das nicht bedeuten, für jeden eine Tabelle zu erstellen? – Shauna

Antwort

0

Alle Ihre <tr> die gleiche id="extra" haben. Wie vorgeschlagen, benötigen Sie für jede eine andere "ID", und zwar: Ich habe eine Variable $i (Zeile 18) erstellt, die direkt nach der while (Zeile 20) als Parameter im Aufruf für showCustomer eingefügt wird (Zeile 23), eingefügt am Ende der ID "extra" (Zeile 27), schließlich unten, wo die Funktion showCustomer deklariert ist, wird der Parameter "index" am Ende der ID "extra" eingefügt.

<DOCTYPE html!> 
<html> 
    <head> 
    <link rel="stylesheet" type="text/css" href="a3.css"> 
</head> 
<body> 
    <div class="nav"> 
     <?php include 'nav.php'; 
     ?> 
    </div> 
    <?php include 'dbconfig.php'; 
    $sql ='SELECT * FROM `customers` ORDER BY `customers`.`country` ASC'; 
    $q = $conn->query($sql); 
    $q->setFetchMode(PDO::FETCH_ASSOC); 
    ?> 
    <div class = "main"> 
     <table> 
      <?php $i = 0; 
        while ($r = $q->fetch()): 
        $i++;   // UNIQUE INDEX FOR EACH CUSTOMER. 
      ?> 
       <tr> 
        <td><button onclick = "showCustomer('<?php echo $i;?>');"/> 
          <?php echo ($r['customerName'])?></td> 
        <td><?php echo ($r['country'])?></td> 
       </tr> 
       <tr id ="extra<?php echo $i;?>" style="display:none"> 
        <td><?php echo ($r['customerNumber'])?></td> 
        <td><?php echo ($r['contactLastName'])?></td> 
        <td ><?php echo ($r['contactFirstName'])?></td> 
        <td><?php echo ($r['phone'])?></td> 
        <td><?php echo ($r['addressLine1'])?></td> 
        <td><?php echo ($r['addressLine2'])?></td> 
        <td><?php echo ($r['city'])?></td> 
        <td><?php echo ($r['state'])?></td> 
        <td><?php echo ($r['postalCode'])?></td> 
        <td><?php echo ($r['salesRepEmployeeNumber'])?> </td> 
        <td><?php echo ($r['creditLimit'])?></td> 
       </tr> 
      <?php endwhile; ?> 
     </table> 
     </div> 

     <div class="foot"> 
     <?php include 'foot.php'; ?> 
     </div> 
     <script> 



     function showCustomer(index) { // UNIQUE INDEX AS PARAMETER. 
      var showForm=document.getElementById('extra' + index); // USING INDEX. 
      if (showForm.style.display="none") { 

       showForm.style.display =""; 
       alert('ok'); 
       console.log(showForm); 
      } 
      else if (showForm.style.display=""){ 
       showForm.style.display ="none"; 
      } 
     } 
    </script> 
</body> 
</html> 
</DOCTYPE> 
+0

Vielen Dank, es hat perfekt funktioniert. – Shauna

Verwandte Themen