-1

複数の入力があります

<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
...and so on (depending on how many they want)

フォーム送信 ($_POST を使用) で、すべての入力を取得したい (ちなみに、[dynamic jquery add/remove input form] の数はわかりません) 1 つの変数に結合します。すべて ^^ でうまく区切られています。

ところで、私はこの形式を使用してmysqlに挿入しています

 $sql = mysql_query("INSERT INTO mixtapes (title, songs, posted_by_id, description, date) 
     VALUES('$mixtapetitle','$allmixtapetracks','$posted_by_id','$mixtapedescription', now())")  
     or die (mysql_error());

したがって、最終的には、すべての動的入力を 1 つの変数にパックし、それぞれを ^^^ で区切ります。以下の例は、変数 $allmixtapetracks をどのように表示するかを示しているため、挿入すると、まさにそのように表示されます。

入力 1 の値^^^入力 2 の値^^^入力 3 の値^^^入力 4 の値^^^


編集:

このコーディングがエラーの原因です。入力が動的に作成されると、php $_POST はそれらを無視します。なんで?私はわかりません。

JavaScript:

<script type="text/javascript">

$(document).ready(function(){

    var counter = 3;

    $("#addButton").click(function () {

    if(counter>40){
            alert("The maximum allowed tracks is 40");
            return false;
    }   

    var newTextBoxDiv = $(document.createElement('div'))
         .attr("id", 'TextBoxDiv' + counter);

    newTextBoxDiv.html('<table><tr><td width="88"><label>Track #'+ counter + ' : </label></td><td><input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" ></td></tr></table>');

    newTextBoxDiv.appendTo("#TextBoxesGroup").hide().show(50);


    counter++;
     });

     $("#removeButton").click(function () {
    if(counter==3){
          alert("Your mixtape must contain at least two tracks!");
          return false;
       }   

    counter--;

        $("#TextBoxDiv" + counter).remove().show().hide(40);

     });


  });
</script>

HTML:

 <form action="add-mixtape.php" name="addmixtapeForm" class="addmixtapeForm" id="addmixtapeForm" autocomplete="off" method="post" enctype="multipart/form-data">
<div id='TextBoxesGroup'>
             <div id="TextBoxDiv1">
             <table>
              <tr>
               <td width="88"><label>Track #1: </label></td>
               <td><input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" ></td>
              </tr>
             </table>
             <table>
              <tr>
               <td width="88"><label>Track #2: </label></td>
               <td><input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" ></td>
              </tr>
             </table>
             </div>
            </div>
            <input type="button" value="Add Track" id="addButton" class="addREMOVEmixtapetrack">
            <input type="button" value="Remove Track" id="removeButton" class="addREMOVEmixtapetrack">
</form>
4

3 に答える 3

2
$alltracks = implode('^^^', $_POST['track']) . '^^^';

テストコード:

<?php
$alltracks = implode('^^^', $_POST['track']) . '^^^';
echo $alltracks;
?>

<form action="test.php" method="post">
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input size="32" class="mixtapetrack" type="text" id="track[]" name="track[]" >
<input type="submit">
</form>
于 2012-04-08T17:21:33.063 に答える
2

1 つの列に複数の値を格納しないことを強くお勧めします。正しい戦略は、ミックステープをトラックにリンクする正規化されたテーブルを作成することです。

CREATE TABLE tapetracks (
  mixtapeid INT NOT NULL,
  trackname VARCHAR(256) NOT NULL
);

次に、入力値をループして、それぞれをテーブルに挿入します。

$mixtapeid = <the current tape you are adding to>;
foreach ($_POST['track'] AS $track) {
  $track = mysql_real_escape_string($track);
  $result = mysql_query("INSERT INTO tapetracks (mixtapeid, trackname) VALUES ($mixtapeid, '$track')");
  if (!$result) {
    echo mysql_error();
    break;
  }
}

複数の値を 1 つの列に格納すると、クエリを実行するときに列インデックスを利用できなくなり、個々の値をクエリするのが非常に面倒になり、トラック名にコンマが含まれていると失敗する可能性がありますREPLACE()FIND_IN_SET()それは本当に間違った戦略です。

于 2012-04-08T17:21:34.443 に答える
0

はい、できます:

$combined = "";
foreach ( $_POST['track'] as $t ){
    $combined .= $t . "^^^";
}
$combined = substr(0,-3, combined) // only if you want to strip last 3 "^^^" symbols

これで済むはず……。

于 2012-04-08T17:21:40.880 に答える