2017-03-08 23 views
0

私の問題は少しユニークなので、Web上のどこにでもソリューションを見つけることができません。PHPドロップダウンリストの選択された値がデータベースに挿入されていません

私は2つのラジオボタンであるDivision and Externalを作りました。クリックすると、Divisionラジオボタンがドロップダウンリストを表示し、Externalラジオボタンが入力テキストボックスを表示します。

これは私が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_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

私は間違っていますか?

+0

この ''テキストボックスにも同じ名前を付けました。名前を変更してもう一度確認してください。 –

+0

私はすでにそれを前にしていましたが、それでも同じ結果を返しました – MechaMetalHead

+0

'name =" client_details "の名前を変更して何が得られたか再度確認しますか? PHPファイルprint_r($ _ POST)の –

答えて

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

関連する問題