0

だから私はこのトピックで私のフォームのいくつかの JavaScript の問題を理解することを終えました: How Can I Insert Multiple Rows Into a DB from my HTML Form from my HTML Forms Dynamically?

しかし、そのような複数の部分からなる質問があったため、新しいトピックを作成するよう求められました。以下は、私が立ち往生している場所で使用し、複数の行を追加する機能を備えたフォームをデータベースに送信し、それらの HTML 行を SQL データベースの行にそれぞれ追加できるようにしたい新しいコードです。

プレビュー: http://cl.ly/image/0K0Z202O1Q3e/Screen%20Shot%202013-03-14%20at%203.00.19%20PM.png

HTML

<html>
<header>
<link rel="stylesheet" href="style.css" type="text/css">
<script type="text/javascript" language="javascript" src="/jquery/js/jquery-1.9.1.js">      
</script>
<script src="http://www.mapquestapi.com/sdk/js/v7.0.s/mqa.toolkit.js?   
key=Gmjtd%7Cluua2q6bn9%2C8g%3Do5-lzbsh"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<title>Central Office Company Survey</title>
</header>
<body onload="get_company_name();">
<h1>Central Office Company Survey</h1>
<div id='map' style='width:0px; height:0px; position:absolute'></div>

<input type="hidden" id="co_city" name="co_city">
<input type="hidden" id="co_state" name="co_state">
<input type="hidden" id="co_zipcode" name="co_zipcode">

<table>
<th>Company</th>
<th>CO Name</th>
<th>Get Current Location</th>
<th>Lat</th>
<th>Long</th>
<th>Address</th>
<tr>
    <td><select id="company_name" name="company_name" /></select></td>
    <td><input name="co_name" type="text"></td>
    <td><input type="submit" value="Get GPS" onclick="gpslookup();" /></td>
    <td><input id="co_lat" name="co_lat" type="text" /></td>
    <td><input id="co_long" name="co_long" type="text" /></td>
    <td><input id="co_address" name="co_address" type="text" /></td>
</tr>
</table>
<table id="tabledata">
<thead>
    <th>Select</th>
    <th>Border Location Name</th>
    <th>Cable Location</th>
    <th>Direction of Vault Wall</th>
    <th>Cable Type</th>
    <th>Cable Size (pairs)</th>
    <th>Cable Gauge</th>
    <th>Vertical(s) appeared on Verticals</th>
    <th>Approximate Number of Jumpers</th>
    <th>Are Protectors Still In?</th>
    <th>Metered Distance</th>
    <th class="comments">Central Office Comments</th>
</thead>
<tbody id="input"></tbody>
<tbody id="template">
    <tr>
        <td><input type="checkbox" /></td>
        <td><input name="border_location" type="text" /></td>
        <td><input name="cable_location" type="text" /></td>
        <td><input name="vault_direction" type="text" /></td>
        <td><input name="cable_type" type="text" /></td>
        <td><input name="cable_size" type="text" /></td>
        <td><input name="cable_gauge" type="text" /></td>
        <td><input name="vertical" type="text" /></td>
        <td><input name="jumpers" type="text" /></td>
        <td><input name="protectors" type="text" /></td>
        <td><input name="metered_dist" type="text" /></td>
        <td><input name="comments" type="text" /></td>
    </tr>
</tbody>
</table>
<button id="ActionAddRow">Add Row</button>
<button onclick="deleteRow(); return false;">Delete Row</button>
<button id="ActionSubmit">Submit</button>
</body>
</html>

scripts.js

//Button Functions
$(function () {
var addInputRow = function () {
    $('#input').append($('#template').html());
};

addInputRow();
$('#ActionAddRow').on('click', addInputRow);
$('#ActionSubmit').on('click', function () {
    var data = $('#input tr').map(function () {
        var values = {};
        $('input', $(this)).each(function () {
            values[this.name] = this.value;
        });
        return values;
    }).get();
    $.post('./php/upload_survey.php', {
        json: JSON.stringify(data),
        delay: 1
    }).done(function (response) {
        alert("Thank you. Your form has been submitted.");
        console.log(response);
    });
});
});

//Delete Selected Rows
function deleteRow() {
 try {
    var table = document.getElementById("tabledata");
    var rowCount = table.rows.length;

    for(var i=0; i<rowCount; i++) {
        var row = table.rows[i];
        var chkbox = row.cells[0].childNodes[0];
        if(null != chkbox && true == chkbox.checked) {
            if(rowCount <= 3) {
                alert("Cannot delete all the rows.");
                break;
            }
            table.deleteRow(i);
            rowCount--;
            i--;
        }
    }
}
catch(e) {
    alert(e);
}
};

upload_survey.php

//Assign passed parameters
    $values = json_decode($_POST['json']);

    $stringLogInfo =  "INFO: Location: $co_address CO Name = $co_name !!!\n\n";
    log_audit($logAuditFile, $logModule, $stringLogInfo);

//Parse and store the ini file, this will return an associative array
ini_set("display_errors", "1");
error_reporting(E_ALL);

//Insert Survey Form Information into the database
$sql="INSERT INTO table_name (company_name,...,...) 
VALUES ($values)";

mysql_query($sql) or die ("Unable to Make Query:" . mysql_error());

**これまでのところ、これを機能させようとするたびに JS は正常に起動しますが、Chrome の開発者ツールボックスでエラーが発生します: クエリを作成できません: 列の数が行 1 の値の数と一致しません

これは、js ファイルの次の関数を指します: console.log(response);

4

1 に答える 1

0

PHPにはバッチ挿入のようなものはないと思います。JAVA の addBatch と executeBatch に相当するものはありません。

したがって、それを行う正しい方法は、配列を反復処理し、準備されたステートメントで単一の行を挿入することです。

于 2013-03-14T20:41:30.167 に答える