2017-03-08 119 views
0

我真的無法在網絡上的任何位置找到解決方案,因爲我的問題有點獨特。PHP下拉列表中選擇的值未插入數據庫中

我做了兩個單選按鈕,Division和External。單擊時,Division單選按鈕顯示下拉列表,External選項顯示輸入文本框。

這是我製作的代碼。

<html> 
<head> 
    <title> Submit a Contract </title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 



<script type="text/javascript"> 
function ShowHideDiv() { 
    var client1 = document.getElementById("client1"); 
    var client2 = document.getElementById("client2"); 
    var division = document.getElementById("division"); 
    var external = document.getElementById("external"); 

    division.style.display = client1.checked ? "block" : "none"; 
    external.style.display = client2.checked ? "block" : "none"; 
} 

function showfield(name){ 
if(name=='Other')document.getElementById('div1').innerHTML='<input type="text" name="client_details" value="" />'; 
else document.getElementById('div1').innerHTML=''; 
} 
</script> 
</head> 

<body> 
<form method="post" action="" enctype="multipart/form-data"> 

<label for = "client1"> 
     <input type="radio" name="client_type" id = "client1" value="Division" onclick="ShowHideDiv()"/> Division 
    </label> 
    <label for ="client2"> 
     <input type="radio" name="client_type" id = "client2" value="External" onclick="ShowHideDiv()"/> External 
    </label>  
    <br><br> 
<div id="division" style="display:none"> 
    Division: 
     <select name="client_details" onchange="showfield(this.options[this.selectedIndex].value)"> 
     <option value="">Choose Division...</option> 
     <option value="Distribution">Distribution</option> 
     <option value="Transmission">Transmission</option> 
     <option value="Generation">Generation</option> 
     <option value="Procument">Procument</option> 
     <option value="Other">Others</option> 
     </select> 
     <br><br> 
     <div id="div1"></div> 
    </div> 

    &nbsp 

    <div id="external" style="display:none"> 
    External: 
    <input type="text" name="client_details" value=""/> 
    </div> 
    <br><br>  
    <input type="submit" name="submit" value="Submit"/> 
    </form>  
</body> 

</html> 

這是PHP代碼。

<?php 
require("config.php"); 

if(isset($_POST['submit'])) 
{ 
$client_type = isset($_POST ['client_type']) ? $_POST['client_type'] :null; 
$client_details = isset($_POST ['client_details']) ? $_POST['client_details'] :null; 

$sql = "SELECT * FROM contracts"; 
$query = "INSERT INTO contracts 
(
`client_type`, 
`client_details`) VALUES (
           '$client_type', 
           '$client_details')" ; 

if ($con->query($query) === TRUE) 
{ 
echo "<br><br> New record created successfully"; 

echo $query; 


} 
else { 
echo "Error: " . $query . "<br>" . $con->error; 
} 

$con->close(); 
} 
?> 

外部單選按鈕和輸入文本框,兩個值的成功在數據庫中插入工作正常。 External 但是對於部門,它只插入值Division。 Division

這是什麼我做錯了?

+0

您也給這個''文本框輸入了相同的名字。所以請更改名稱並再次檢查。 –

+0

我已經這樣做過,但它仍然給出了相同的結果 – MechaMetalHead

+0

只是重命名'name =「client_details」'並再次檢查你得到什麼? –

回答

1

試試這個:

我已經把條件類型代碼的開始,改變下拉的名稱。

你的PHP代碼

<?php 
require("config.php"); 
if(isset($_POST['submit'])) 
{ 
echo $client_type = isset($_POST ['client_type']) ? $_POST['client_type'] :null; 
if($client_type == 'Division'){ 
$client_details = isset($_POST ['client_details1']) ? $_POST['client_details1'] :null; 

} 
else{ 
$client_details = isset($_POST ['client_details']) ? $_POST['client_details'] :null; 

} 

echo $query = "INSERT INTO contracts 
(
`client_type`, 
`client_details`) VALUES (
           '$client_type', 
           '$client_details')" ; 
if ($con->query($query) === TRUE) 
{ 
echo "<br><br> New record created successfully"; 

echo $query; 


} 
else { 
echo "Error: " . $query . "<br>" . $con->error; 
} 

$con->close();         
} 

?> 

你的HTML代碼

<html> 
<head> 
    <title> Submit a Contract </title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 



<script type="text/javascript"> 
function ShowHideDiv() { 
    var client1 = document.getElementById("client1"); 
    var client2 = document.getElementById("client2"); 
    var division = document.getElementById("division"); 
    var external = document.getElementById("external"); 

    division.style.display = client1.checked ? "block" : "none"; 
    external.style.display = client2.checked ? "block" : "none"; 
} 

function showfield(name){ 
if(name=='Other')document.getElementById('div1').innerHTML='<input type="text" name="client_details" value="" />'; 
else document.getElementById('div1').innerHTML=''; 
} 
</script> 
</head> 

<body> 
<form method="post" action="" enctype="multipart/form-data"> 

<label for = "client1"> 
     <input type="radio" name="client_type" id = "client1" value="Division" onclick="ShowHideDiv()"/> Division 
    </label> 
    <label for ="client2"> 
     <input type="radio" name="client_type" id = "client2" value="External" onclick="ShowHideDiv()"/> External 
    </label>  
    <br><br> 
<div id="division" style="display:none"> 
    Division: 
     <select name="client_details1" onchange="showfield(this.options[this.selectedIndex].value)"> 
     <option value="">Choose Division...</option> 
     <option value="Distribution">Distribution</option> 
     <option value="Transmission">Transmission</option> 
     <option value="Generation">Generation</option> 
     <option value="Procument">Procument</option> 
     <option value="Other">Others</option> 
     </select> 
     <br><br> 
     <div id="div1"></div> 
    </div> 

    &nbsp 

    <div id="external" style="display:none"> 
    External: 
    <input type="text" name="client_details" value=""/> 
    </div> 
    <br><br>  
    <input type="submit" name="submit" value="Submit"/> 
    </form>  
</body> 

</html> 
+0

我認爲這是好的,如果你想改變客戶端的價值,那麼也可以 –

+0

非常感謝@prakeshtank和其他人的幫助!它終於在這段時間後工作! :) – MechaMetalHead

+0

@MechaMetalHead:很高興它的工作! –

0

通過普拉卡什罐版本是正確的,甚至更好。我發佈這個解決方案,所以你知道還有其他的方式去解決,並在筆記中向我解釋你做錯了什麼。

<html> 
     <head> 
      <title> Submit a Contract </title> 
      <meta charset="UTF-8"> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0"> 



     <script type="text/javascript"> 
     function ShowHideDiv() { 
      var client1 = document.getElementById("client1"); 
      var client2 = document.getElementById("client2"); 
      var division = document.getElementById("division"); 
      var external = document.getElementById("external"); 

      division.style.display = client1.checked ? "block" : "none"; 
      external.style.display = client2.checked ? "block" : "none"; 
     } 

     function showfield(name){ 
     if(name=='Other')document.getElementById('div1').innerHTML='<input type="text" name="client_details" value="" />'; 
     else document.getElementById('div1').innerHTML=''; 
     } 
     </script> 
     </head> 

     <body> 

     <form method="post" action="" enctype="multipart/form-data"> 

     <label for = "client1"> 
       <input type="radio" name="client_type" id = "client1" value="Division" onclick="ShowHideDiv()"/> Division 
      </label> 
      <label for ="client2"> 
       <input type="radio" name="client_type" id = "client2" value="External" onclick="ShowHideDiv()"/> External 
      </label>  
      <br><br> 
     <div id="division" style="display:none"> 
      Division: 
      <!-- client_details has to be changed to client_detailsDiv as after clicking "submit" data from Division and External were put in to the same variable "client_details" so even if External was empty PHP though that it's suppose to be empty and as long as external 
      DO NOT MIX TWO TYPES OF FORM TYPES AS ONE VARIABLE = DON'T GIVE THEM THE SAME name - in other words you can't give same name for SELECT and TEXT and so on.--> 
       <select name="client_detailsDiv" onchange="showfield(this.options[this.selectedIndex].value)"> 
       <option value="">Choose Division...</option> 
       <option value="Distribution">Distribution</option> 
       <option value="Transmission">Transmission</option> 
       <option value="Generation">Generation</option> 
       <option value="Procument">Procument</option> 
       <option value="Other">Others</option> 
       </select> 
       <br><br> 
       <div id="div1"></div> 
      </div> 

      &nbsp 

      <div id="external" style="display:none"> 
      External: 
      <!--client_details has to be changed to client_detailsExt for reason described above--> 
      <input type="text" name="client_detailsExt" value=""/> 
      </div> 
      <br><br>  
      <input type="submit" name="submit" value="Submit"/> 
      </form>  
     </body> 

     </html> 


     <?php 
     require("config.php"); 

     if(isset($_POST['submit'])) 
     { 
     $client_type = isset($_POST ['client_type']) ? $_POST['client_type'] :null; 
     /* 
$client_details = isset($_POST ['client_details']) ? $_POST['client_details'] :null; 
     above functions was wrong as I already explained it got $_POST['client_type'] for the External - PHP works the way that it gets variable from the first $_POST['same_name'] and then from second $_POST['same_name'] and then overwrites value of first $_POST['same_name'] and for this reason it displayed only value for External and none for Division as when user set External, Division was empty. So if you would switch form for External as first and put form for Division as second then you wouldn't get variable from External but from Division. 
     $client_details = isset($_POST ['client_details']) ? $_POST['client_details'] :null; 

     so what we need to do is to to put this code: 
     */ 
     if(!empty($_POST['client_detailsDiv'])) {$client_details = $_POST['client_detailsDiv'] ? $_POST['client_detailsDiv'] :null;} 
     else {$client_details = $_POST['client_detailsExt'] ? $_POST['client_detailsExt'] :null;} 
     // at fist we make sure that client_detailsDiv is not empty, if it's not than we set client_detailsDiv as $client_details. But if it's empty we use else statement to 

     $sql = "SELECT * FROM contracts"; 
     $query = "INSERT INTO contracts 
     (
     `client_type`, 
     `client_details`) VALUES (
             '$client_type', 
             '$client_details')" ; 

     if ($con->query($query) === TRUE) 
     { 
     echo "<br><br> New record created successfully"; 

     echo $query; 


     } 
     else { 
     echo "Error: " . $query . "<br>" . $con->error; 
     } 

     $con->close(); 
     } 
     ?> 
+0

謝謝@emil的解釋! – MechaMetalHead

相關問題