2017-08-15 2 views
0

Ich habe ein Problem wahrscheinlich aufgrund meiner mangelnden Erfahrung.PROBLEME Erstellen einer Suchseite PHP und MYSQL

Ich bekomme die Daten erfolgreich aus der MySQL-Datenbank und es füllt erfolgreich das zweite DROPDOWN-Menü.

Das Problem ist ... wenn ich auf "Validieren" klicke, um die Daten in der Variablen zu senden und aufzuzeichnen, bereinigt es die vorherige ausgewählte Option. Ich kann die ausgewählten Optionen nicht in Variablen aufzeichnen.

<?php 
$location = ""; 
$locationf = ""; 
$system = ""; 
$systemf = ""; 

$conn = mysqli_connect('localhost', 'root', 'test', 'SRSBASE') 
     or die('Cannot connect to db'); 

$result = $conn->query("select distinct SUB_ACCOUNT from SRSLOAD"); 

if (isset($_POST["selec"]["account"])) { 
    $location = $_POST["selec"]["account"]; 
    $locationf = $location; 
    $locationf = sprintf('%s', $locationf); 
} 

echo "Location: $locationf"; 

$conn2 = mysqli_connect('localhost', 'root', 'test', 'SRSBASE') 
     or die('Cannot connect to db'); 

$result2 = $conn2->query("select distinct SYSTEMNAME from SRSLOAD where SUB_ACCOUNT='$locationf'"); 

if (isset($_POST["selec"]["system"])) { 
    $system = $_POST["selec"]["system"]; 
    $systemf = $system; 
} 

echo "System: $systemf"; 

$post_at = ""; 
$post_at_to_date = ""; 
$post_at_todate = ""; 

$queryCondition = ""; 
if (!empty($_POST["search"]["post_at"])) { 
    $post_at = $_POST["search"]["post_at"]; 
    list($fiy, $fim, $fid) = explode("-", $post_at); 

    $post_at_todate = date('YY-mm-dd'); 
    if (!empty($_POST["search"]["post_at_to_date"])) { 
     $post_at_to_date = $_POST["search"]["post_at_to_date"]; 
     list($tiy, $tim, $tid) = explode("-", $_POST["search"]["post_at_to_date"]); 
     $post_at_todate = "$tiy-$tim-$tid"; 

    //TESTING SELECTED TARGETS 
    //echo $post_at; 
    //echo "/"; 
    //echo $post_at_todate; 
    } 

    //$queryCondition .= "WHERE RDATE BETWEEN '$fiy-$fim-$fid' AND '" . $post_at_todate . "'"; 
    $queryCondition .= "WHERE RDATE BETWEEN '$post_at' AND '" . $post_at_todate . "'"; 
} 

//$sql = "SELECT * from SRSLOAD " . $queryCondition . " ORDER BY post_at desc"; 
//$sql = "select * from SRSLOAD where rdate between '$post_at' AND $post_at_todate;" 

$sql = sprintf("SELECT * FROM SRSLOAD WHERE RDATE BETWEEN '%s' AND '%s' AND SYSTEMNAME='%s' AND SUB_ACCOUNT='%s'", $post_at, $post_at_todate, $systemf, $locationf); 

$result3 = mysqli_query($conn, $sql); 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Storage Report System - Search</title> 
     <script src="jquery-1.9.1.js"></script> 
     <link rel="stylesheet" href="jquery-ui-1.11.4.css"> 

     <style> 
      .table-content{border-top:#CCCCCC 4px solid; width:50%;} 
      .table-content th {padding:5px 20px; background: #F0F0F0;vertical-align:top;} 
      .table-content td {padding:5px 20px; border-bottom: #F0F0F0 1px solid;vertical-align:top;} 
     </style> 
    </head> 
    <body> 

     <h2 style='font-family:arial'>Storage Report System - Search</h2> 

     <form name='sname' id='sname' action='' method='POST'> 
      <select id='select' name="selec[account]" value="<?php echo $location; ?>" > 
       <option value='-1'>--Select the Location--</option> 

       <?php 
       while ($row = $result->fetch_assoc()) { 
        unset($sub_acc); 
        $sub_acc = $row['SUB_ACCOUNT']; 
        echo '<option value="' . $sub_acc . '">' . $sub_acc . '</option>'; 
       } 
       ?> 

      </select> 
      <input type='submit' value='Validate' /> 
     </form> 

     <form name='sname' id='sname' action='' method='POST' > 
      <select id='system' name="selec[system]" value="<?php echo $system; ?>" > 

       <option value='-1'>--Select the System--</option> 
       <?php 
       while ($row2 = $result2->fetch_assoc()) { 

        unset($syst); 
        $syst = $row2['SYSTEMNAME']; 
        echo '<option value="' . $syst . '">' . $syst . '</option>'; 
       } 
       ?> 
      </select> 
      <input type='submit' value='Validate' /> 
     </form> 

     <div class="demo-content"> 
      <form name="frmSearch" method="post" action=""> 
       <p class="search_input"> 
        <input type="text" placeholder="From Date" id="post_at" name="search[post_at]" value="<?php echo $post_at; ?>" class="input-control" /> 
        <input type="text" placeholder="To Date" id="post_at_to_date" name="search[post_at_to_date]" style="margin-left:10px" value="<?php echo $post_at_to_date; ?>" class="input-control" /> 
        <input type="submit" name="go" value="Search" > 
       </p> 
       <?php if (!empty($result3)) { ?> 
        <table class="table-content"> 
         <thead> 
          <tr> 
           <th width="30%"><span>SYSTEM NAME</span></th> 
           <th width="50%"><span>DATE</span></th> 
           <th width="20%"><span>HSM</span></th> 
          </tr> 
         </thead> 
         <tbody> 
          <?php 
          while ($row3 = mysqli_fetch_array($result3)) { 
           ?> 
           <tr> 
            <td><?php echo $row["SYSTEMNAME"]; ?></td> 
            <td><?php echo $row["RDATE"]; ?></td> 
            <td><?php echo $row["HSM_MCDS"]; ?></td> 

           </tr> 
           <?php 
          } 
          ?> 
         <tbody> 
        </table> 
       <?php } ?> 
      </form> 
     </div> 
     <script src="jquery-ui-1.10.3.js"></script> 
     <script> 
      $.datepicker.setDefaults({ 
       showOn: "button", 
       buttonImage: "datepicker.png", 
       buttonText: "Date Picker", 
       buttonImageOnly: true, 
       dateFormat: 'yy-mm-dd' 
      }); 
      $(function() { 
       $("#post_at").datepicker(); 
       $("#post_at_to_date").datepicker(); 
      }); 
     </script> 
    </body> 
</html> 

Antwort

0

Es ist, weil Sie zwei Formen dort haben. Jedes Formular hat sein eigenes select und submit. Wenn Sie auf Senden klicken, wird nur das entsprechende Formular mit Auswahl gesendet. Wenn Sie Daten von beiden Selects haben möchten, müssen Sie beide Selects in einem Formular mit einem Submit haben. So etwas wie dieser Code:

<form name='sname' id='sname' action='' method='POST'> 
    <select id='select' name="selec[account]" value="<?php echo $location; ?>" > 
     <option value='-1'>--Select the Location--</option> 
     <?php 
     while ($row = $result->fetch_assoc()) { 
      unset($sub_acc); 
      $sub_acc = $row['SUB_ACCOUNT']; 
      echo '<option value="' . $sub_acc . '">' . $sub_acc . '</option>'; 
     } 
     ?> 
    </select> 

    <select id='system' name="selec[system]" value="<?php echo $system; ?>" > 
     <option value='-1'>--Select the System--</option> 
     <?php 
     while ($row2 = $result2->fetch_assoc()) { 
      unset($syst); 
      $syst = $row2['SYSTEMNAME']; 
      echo '<option value="' . $syst . '">' . $syst . '</option>'; 
     } 
     ?> 
    </select> 
    <input type='submit' value='Validate' /> 
</form> 
+0

Hallo von Eiche, Vielen Dank für Ihre Antwort. Das Problem ist, dass ich die erste Vorlage benötigen würde, um das zweite Dropdown-Menü zu füllen. So über diese Einschränkung wissen kann ich in zwei Lösungen denken: 1- Erstellen Sie eine HTML-Datei und eine PHP-Datei für jedes Dropdown-Menü (einige Ideen, aber nicht sicher, wie zu tun). 2- Verwenden Sie eine Sprache, die es mir erlaubt, den Wert in einer PHP-Variable abzurufen, ohne zu senden, sondern nur auszuwählen. (am wahrscheinlichsten, aber ich habe nicht viel Ahnung, wie zu tun ist) –

+0

Ich verstehe nicht genau Ihren Anwendungsfall. Warum müssen Sie zuerst das zweite Menü auffüllen? Was ist der Anwendungsfall? Mit mehr Infos kann ich vielleicht etwas weiter vorschlagen. –

+0

Klar, lass mich klarstellen: Ich baue eine einfache "Suchseite". Dazu würde ich 4 Informationen benötigen, 1- Der Servername, 2- Der Standort, 3- Das Anfangsdatum, 4- das Enddatum. Ich würde den Benutzern einige Nutzungsbeispiele aus einer Datenbank bringen. Wenn ich die erste Dropdown-Auswahl einreiche, werden alle Systeme von einem bestimmten Standort aus aufgerufen. Ich sollte das System in einer Variablen reservieren, die Position in einer anderen Variablen, dann die Daten, so dass ich eine endgültige MySQL-Auswahl treffen würde, um die Antwort für den Benutzer bereitzustellen. –