PHP下拉列表中选择的值未插入数据库中

问题描述:

我真的无法在网络上的任何位置找到解决方案,因为我的问题有点独特。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”'并再次检查你得到什么? –

试试这个:

我已经把条件类型代码的开始,改变下拉的名称。

你的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:很高兴它的工作! –

通过普拉卡什罐版本是正确的,甚至更好。我发布这个解决方案,所以你知道还有其他的方式去解决,并在笔记中向我解释你做错了什么。

<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