php - PHPを使用して複数のリストボックス値がMySQLデータベースに挿入されない

原文 php jquery html mysql database

複数のリストボックスの値をデータベースに挿入しようとしていますが、この値がデータベースに挿入されていません。 PHPファイルに問題があると思います

これは私のJavaScriptファイルです

$(document).ready(function() {



       jQuery("#skill-form").validationEngine();



            $("#skill-form").on("submit",function(e) {

                e.preventDefault();

                 if($("#skill-form").validationEngine('validate')) {
                    var form_data = $( "form" ).serialize();
                        $.post( "insert.php",{form_values : form_data},function( data ) {
                        var Data =  jQuery.parseJSON(data);



                  });

       } else {
            return false;
        }


       });

});


これは私のHTMLファイルです

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">

        <link href="css/bootstrap.min.css" rel="stylesheet">


         <link rel="stylesheet" href="css/validationEngine.jquery.css">



    </head>

<body>





 <form class="form-horizontal" role="form" action="#"  method="post" id="skill-form">

  <div class="form-group">

                <br>  <br> <br> <br> <br> <br> <br>
          <label class="col-sm-2 control-label">States:</label>
            <div class="col-sm-6">


<select name="which_state[]" id="which_state" class="form-control" multiple="multiple" data-validation-engine="validate[required]"  data-errormessage-value-missing="Please Select any one option" >
                            <option value="Colorado">Colorado</option>
                            <option value="Florida">Florida</option>
                            <option value="Illinois">Illinois</option>
                            <option value="Michigan">Michigan</option>
                            <option value="Minnesota">Minnesota</option>
                            <option value="Ohio">Ohio</option>
                            <option value="Texas">Texas</option>
                            <option value="Wisconsin">Wisconsin</option>
</select>

</div>

</div>

        <div class="form-group">
          <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-primary" id="register" name="submit">Submit</button>
          </div>


</form>


    <script  src="js/jquery.js"></script>



<script type="text/javascript" src="js/jquery.validationEngine-en.js"></script>

       <script type="text/javascript" src="js/jquery.validationEngine.js"></script>



       <script type="text/javascript" src="js/managestage.js"></script>



</body>
</html>


これは私のPHPファイルです

<?php

  require_once("dbcon.php");

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
    $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

    switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
    }
    return $theValue;
}


if(isset($_POST["form_values"]))
{
     $form_data = urldecode($_POST["form_values"]);

     preg_match_all('#(\w+)=([^&=]*)(?:&|$)#', $form_data, $matches, PREG_SET_ORDER); 
     $result = array();
       $i = 0;    
          foreach ($matches as $m) {
             list(, $key, $value) = $m;
          if (!strlen($value)) { 
             $i = (int)$key;
          } else {
           $result[$i][$key] = $value;
         }
}


        $which_state = $result[0]["which_state"];



      $insertSQL = sprintf("INSERT INTO test1 (States) VALUES (
                %s
            )", 
                           GetSQLValueString(implode(',', $_POST['which_state']), "text"));


        try
        {

          $query_insert = $db->prepare( $insertSQL );
          $result_insert = $query_insert -> execute(array(':which_state'=>$which_state));

        }
    catch(PDOException $ex)
        {

            die("Failed to run query: " . $ex->getMessage());
        } 

}
    ?>
答え
文字列として値を渡すPDOまたはMsqlを使用していると想定して、コードを単純化しました。選択された項目を配列内の文字列として連結し、execute()を使用して配列をデータベースに挿入します。

<?php
if(isset($_POST['submit'])){//to run PHP script on submit
    if(isset($_POST['which_state'])){
        $states = implode(",",$_POST['which_state']);
        $paramArray = array($states);
    }
    $insertSQL = "INSERT INTO test1 (States) VALUES (?)";
    $query_insert = $db->prepare( $insertSQL );
    $result_insert = $query_insert -> execute($paramArray);
}
?>
<form method="POST" action="#">
<select name="which_state[]" id="which_state" class="form-control" multiple="multiple" data-validation-engine="validate[required]"  data-errormessage-value-missing="Please Select any one option" >
                            <option value="Colorado">Colorado</option>
                            <option value="Florida">Florida</option>
                            <option value="Illinois">Illinois</option>
                            <option value="Michigan">Michigan</option>
                            <option value="Minnesota">Minnesota</option>
                            <option value="Ohio">Ohio</option>
                            <option value="Texas">Texas</option>
                            <option value="Wisconsin">Wisconsin</option>
</select>
<input type="submit" name="submit" value="Submit">


クエリの例INSERT INTO test1 (States) VALUES (?)

値の例array(1) { [0]=> string(16) "Florida,Illinois" }
関連記事

javascript - ページネーションの「前へ」および「次へ」エラー

php - PHPでSqlcipher暗号化データベースから行を選択します

php - PHP ImagineインスタンスからImagickインスタンスを取得する

php - as3はPDOを使用してPHPにデータを送信します

php - php site_urlとbase_urlがライブサーバーで機能しない

php - PHPのカールリクエストが間違った値を取得します

php - Google Cloud Bucketへの単純な書き込みを実行できない

php - 前のクエリの値を使用してより多くの結果を取得する

php - php mysql jQueryによる連鎖選択

php - ISO 8601の日付/時刻がHTTP経由で送信され、PHPのDateTimeオブジェクトに作成されたときのエラー