2016-05-22 4 views
0

私はHTMLフォームでチェックボックスを使用して、投稿によってmy sqlデータベースに送信しようとしています。しかし、チェックボックスがckeckedであるかどうかにかかわらず、私はいつも0を得る。入力チェックボックスは常にPOSTで0を返します

これはHTML形式です:

<form action = "MediaList2.php" method = "POST"> 
     <li><input type="checkbox" name="gradea" value="1"> CPC for Grade A websites<br><input type='hidden' value='0' name='gradea'></li> 
     <li><input type="checkbox" name="gradeb" value="1"> CPC for Grade B websites<br><input type='hidden' value='0' name='gradeb'></li> 
     <li><input type="checkbox" name="gradec" value="1"> CPC for Grade C websites<br><input type='hidden' value='0' name='gradec'></li> 
     <li><input type="text" name="clicksno" placeholder="if you want a specific number for your clicks please mention it here ">Number of Clicks<br></li> 
     <li> Duration<input type="text" name="start_date" class="form-control" id="start_date" placeholder="yyyy-mm-dd" /> <span> TO </span> <input type="text" name="end_date" class="form-control" id="end_date" placeholder="yyyy-mm-dd" /> 
</li> 
     <li> Budget <input type ="text" name ="budget" required></li> 

      <button type= "submit">Submit</button> 
      </form> 

これは私のPHPコードです:

try{ 
    // receiving the post params 
    $gradea= $_POST['gradea']; 
    $gradeb= $_POST['gradeb']; 
    $gradec= $_POST['gradec']; 
    $clicksno= $_POST['clicksno']; 
    $start_date = $_POST['start_date']; 
    $end_date = $_POST['end_date']; 
    $budget = $_POST['budget']; 
    if($budget > $_SESSION['totalcampaignbudget']) 
    { 
       echo "Your CPC budget should not be bigger than your total budget!"; 
       exit(0); 
    } 
    $user = $db->storeinCPC($gradea , $gradeb, $gradec, $clicksno, $start_date, $end_date, $budget, $campaignname, $email); 

、これはPHPで私のstorinCPC機能である:

のシングルを見てみると
public function storeinCPC($gradea , $gradeb, $gradec, $clicksno, $start_date, $end_date, $budget, $campaignname, $email) 
    {                   // Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
                         // Check connection 
                         if ($conn->connect_error) 
                         { 
                         die("Connection failed: " . $conn->connect_error); 
                         }                    
    $q1 = "SELECT * from CPC where tocampaign = '$campaignname' AND toperson = '$email' " ; 
    $res1 = $conn -> query($q1); 
    $count = $res1 ->num_rows; 
    if($count != null) 
    { 
     $query = "UPDATE CPC set clicksno ='$clicksno' , GradeA = '$gradea', GradeB='$gradeb', GradeC = '$gradec',budget='$budget', tocampaign='$campaignname', startdate='$start_date', enddate='$end_date', toperson='$email', updated_at = NOW() WHERE toperson = '$email' AND tocampaign = '$campaignname'"; 
    } 
    else if($count ==0) 
    { 
    $query = "INSERT INTO CPC (clicksno , GradeA, GradeB, GradeC,budget, tocampaign, startdate, enddate, toperson, created_at, updated_at) VALUES ('$clicksno', '$gradea', '$gradeb' , '$gradec', '$budget', '$campaignname', '$start_date', '$end_date', '$email', NOW(), NOW())"; 
    } 
    $result = $conn->query($query); 
    } 
+0

あなたのコードはSQLインジェクションが可能です。あなたは本当にそれを修正すべきです。準備されたステートメントとバインドされたパラメータは、ユーザーが提供するすべてのデータに使用します。 – Mike

+0

なぜですか? –

答えて

2

これらの入力行は、あなたの主な問題を明確に理解しています:

<li><input type="checkbox" name="gradea" value="1"> CPC for Grade A websites<br><input type='hidden' value='0' name='gradea'></li> 

は、あなたが名前gradeaでチェックボックスの入力フィールドを作成したことがわかり、右後の最初の1を上書きvalue='0'と同じ名前の隠し入力フィールドを作成しますか?

+0

隠し値を追加して、チェックボックスがチェックされていなくても値を送信するようにしました!この方法が間違っていると、どうすればいいですか? – Neshat

+0

'$ gradea = isset($ _ POST ['gradea']);'は '$ gradea'をブール値にします。あるいは、1または0が必要な場合、 '$ gradea = isset($ _ POST ['gradea'])? 1:0; '。 – Mike

+1

チェックボックスの前に隠れた入力を入れる必要があります。チェックボックスをオンにすると、送信されたときに非表示の入力値がオーバーライドされます。そうでない場合は、隠し値が代わりに送信されます。 –

関連する問題