2017-02-02 19 views
2

私はフォームを持っています。そこには、テキストボックスの下にチェックボックスのリストがあります。各チェックボックスをクリックすると、データベースからのチェックボックスに従ってサブデータが表示されます。私がしたいのは、データをデータベースに渡すことです。それはすでに行われています。しかし問題は、すべてのサブチェックボックスの値がデータベースに送られないことです。最後に選択したメインカテゴリのサブカテゴリだけを他の投稿データと一緒にデータベースに渡します。私はinsert.phpファイル内のセッション配列のために間違っていると思います。セッション変数を新しくポストデータに上書きします(チェックボックスの値)。私はそれが間違っているものを見つけることができませんでした。PHPのセッション配列の上書きを避ける方法

私は、最高の表現をするためにシンプルなフォームを作った。

config.phpの

<?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $db = "mydb"; 

// Create connection 
    $conn = mysqli_connect($servername, $username, $password,$db); 

// Check connection 
    if (!$conn) { 
     die("Connection failed: " . mysqli_connect_error()); 
     } 
?> 

form.php

<body> 
<div class="form1"> 
<form action="passData.php" method="post"> 

    <input type="text" name="name" placeholder="Name"/><br> 
    <input type="text" name="age" placeholder="age"/><br> 
    <input type="text" name="address" placeholder="address"/><br> 
    <input type="checkbox" name="favourite" value="1"/>sports 
    <input type="checkbox" name="favourite" value="2"/>fruits 
    <input type="checkbox" name="favourite" value="3"/>colors 
    <div> 
     <button class="btn btn-primary" type="submit" name="submit" id="submit">Submit</button> 
    </div> 
</form>  
</div> 

    <!--modal--> 
<div id="myModal" class="modal fade" role="dialog"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal">&times;</button> 
     <h4 class="modal-title">Modal Header</h4> 
     </div> 
     <div class="modal-body"> 

     </div> 
     <div class="modal-footer"> 
     <button class="btn btn-primary btn-fill" id="submit" onclick="submit();" name="submit" >save</button> 

     </div> 
    </div> 
    </div> 
</div><!--modal is finished--> 


</body> 

画像1

enter image description here

ここでは0

画像2

enter image description here

modal.php

<?php 
    if($_POST['value']){ 
     $value = $_POST['value']; 
     include("config.php"); 

     $sql = "SELECT sub_categories FROM favourite WHERE category_id=".$value." "; 
     $res = mysqli_query($conn,$sql); 
     while($row = mysqli_fetch_array($res)){ 
     echo "<input class='category' type='checkbox' name='category[]' value ='".$row['sub_categories']."'/>".$row['sub_categories']; 
     echo "<br>"; 

     } 
} 


?> 

私はモーダル、選択したチェックボックスの値を保存ボタンをクリックしたときに、私のjsファイルは

$(document).ready(function(){ 
    //model 
    $("input[type=checkbox][name=favourite]").on('change',function(){ 
    if(this.checked) { 

     var value = $(this).val(); 
     $.ajax({ 
      url:"modal.php", 
      type:"POST", 
      data:{value:value}, 
      success:function(modalBody){ 
       $("#myModal .modal-body").html(modalBody); 
       $("#myModal").modal('show'); 

      } 

     }); 
    } 
     }); 
}); 



function submit() { 

    var insert = []; 
    $('.category:checked').each(function(){ 
      insert.push($(this).val()); 
     }); 

    insert = insert.toString(); 
      $.ajax({ 
      url:'insert.php', 
      type:'POST', 
      data:{insert:insert}, 
      success:function(){ 
      alert('success'); 
      $("#myModal").modal('hide'); 
     } 
    }); 

} 

ですinsert.phpファイルに渡してセッションvaに保存するライバル。

insert.php送信ボタンををクリックした後、すべてのポストデータは、私がお見せしようpassData.php

passData.php

<?php 
session_start(); 

include('config.php'); 

if(isset($_POST['submit'])){ 
    $name=$_POST['name']; 
    $age=$_POST['age']; 
    $address=$_POST['address']; 

$sql= "INSERT INTO students(name,age,address,favourite) VALUES('$name', 
     '$age', 
     '$address', 
     '".$_SESSION['insert']."');" ; 
$result=mysqli_query($conn,$sql); 
} 


?> 

に渡す

<?php 
if (!isset($_SESSION['insert'])) { 
$_SESSION['insert'] =[]; 
} 
$insert = $_POST['insert']; 
array_push($_SESSION['insert'], $insert); 
?> 

私の考えは、あなたが理解できることを願っています。

答えて

1

最後に私は自分自身を解決しました。

インサートを次のように

insert.phppassData.phpは修正されなければなりません。このでは、PHP

<?php 
session_start(); 

    if (!isset($_SESSION['insert'])) { 
    $_SESSION['insert'] = array(); 
    } 
    $insert = $_POST['insert']; 
    array_push($_SESSION['insert'], $insert); 

    $list = implode(",", array_filter($_SESSION['insert'])); 

    $_SESSION['final'] = $list; 

?> 

passData.php

<?php 
session_start(); 

include('config.php'); 

if(isset($_POST['submit'])){ 
    $name=$_POST['name']; 
    $age=$_POST['age']; 
    $address=$_POST['address']; 



     $sql= "INSERT INTO students(name,age,address,favourite) 
    VALUES('$name', 
      '$age', 
      '$address', 
      '".$_SESSION['final']."');" ; 
    $result=mysqli_query($conn,$sql); 

    } 

unset($_SESSION['final']); 
session_destroy(); 


?> 

私は文字列に配列を変換し、それを変数に割り当てます。セッション変数に入力します。

0

PHP $ _SESSIONスーパーグローバルを上書きしている場合は、それを別のオブジェクトにコピーして作業してください。すなわち:

<?php 
    if(!empty($_SESSION)){ 
     $session = array(); 
     foreach($_SESSION as $key => $data){ 
      if($key == 'elements_i_dont_want_to_copy'){ 
       continue; 
      } 
      // Elements I do want to copy: 
      $session[$key] = $data; 
     } 
    } 
    ## Rest of your logic should now use $session, you can manipulate 
    ## any elements in $session without destroying any elements of 
    ## your $_SESSION. 
    ## Pass back what you need from $session to $_SESSION if required 
?> 
関連する問題