0

PHPプロジェクトのMySQLDBにたくさんの機能テーブルがあります。私はphpを介してフェッチし、コードを使用して写真テーブルの列名とレコードのIDで名前が付けられたテキストボックスを持つテーブルを作成しています:

functions.phpコード:

function m_html_editPhotos($id) {
$result = "<table class=\"tabelka\" id=\"tbl_photos\"><thead><tr><th>Miniaturka</th><th>Duże zdjęcie</th></tr></thead><tbody>";
$mysqli = m_db_Init();
$qry = "SELECT ID, Img_Min, Img_Nrm FROM tbl_Zdjecie WHERE ID_Grzyb = ?";
if($stmt = $mysqli -> prepare($qry)) {
          $stmt -> bind_param("i", $id);
          mysqli_stmt_bind_result($stmt, $img_id, $img_min, $img_nrm);
          $stmt->execute();
          $i =0;
          while (mysqli_stmt_fetch($stmt)) {
              $i = $i+1;
              $result .= "<tr><td><!--<label>Link do miniaturki:<label>--><input type=\"text\" class=\"required\" name=\"photo[$i][min]\" value=$img_min></td><td><!--<label>Link do zdjęcia pełnego rozmiaru:</label>--><input type=\"text\" class=\"required\" name=\"photo[$i][nrm]\" value=$img_nrm></td><td style=\"display:none;\"><input type=\"text\" name=\"photo[$i][id]\" value=$img_id /></td></tr>";
          }
          $stmt -> close();      
}
mysqli_close($mysqli);
$result .= "</tbody></table><div class=\"link\" onclick=\"AddPhotoEditRow();\">Dodaj kolejne zdjęcie</div>";
return $result;
}

img_min次に、thumbnail_url( )とフルサイズリンク( )のテキストボックスを使用して、上記のように生成されたテーブルの各行を反復処理する写真テーブルを編集します。さらに、関数ごとimg_nrmに動的に作成された行から新しい写真をテーブルに追加します。 AddPhotoEditRow();

functions.jsコード:

function AddPhotoEditRow(){
 $('#tbl_photos > tbody:last').append('<tr><td><input type="text" name="photo[0][min]"></td><td><input type="text" name="photo[0][nrm]"></td><td style=\"display:none;\"><input type=\"text\" name=\"photo[0][id]\" value=\"0\" /></td></tr>');
}

edit.phpコード:

include 'functions.php';
if(isset($_POST["change"])) m_db_updateAllFeatures($_GET["id"]);
if (m_db_isAdmin("")){
if (!isset($_GET["id"]) || !is_numeric($_GET["id"]))
    header("Location: ../index.php");
else {
if (isset($_POST["Nazwa_PL"]))
    m_db_UpdateName("PL", $_GET["id"],$_POST["Nazwa_PL"]);
if (isset($_POST["Nazwa_Lac"]))
    m_db_UpdateName("Lac", $_GET["id"],$_POST["Nazwa_Lac"]);
render_edit_body();
    }
}

写真のリンクを何とか繰り返し、$ _ POSTを介して渡されたテキストボックス名を解析して既存のレコードを更新したいと思います。さらに、新しい写真のリンク(id = 0のリンク)を挿入するとよいでしょう。テーブルに挿入するのか、更新するのかを区別する必要があるため、新しい行のIDを0に設定しています。0すべてのインデックス付きフィールドを追加し、残りを挿入する必要があると想定しました。私の考えは間違っているかもしれません。そのテーブルの「制御」に対して完全な機能を実行するためのより良い方法がある場合、私は提案を非常に受け入れます。

4

3 に答える 3

1

あなたは基本を持っていますが、

$('#tbl_photo snip snip name="photo[0][min]"> snip snip snip
                                    ^---

0ハードコーディングしないでください。$ _POST配列に「photo」値の配列を作成するようにphpに指示していますが、すべてのエントリのインデックスキーを強制的に0にすると、後のエントリが前のエントリを上書きします。

挿入したこれらのフィールドの数をJavascriptでカウントし、そのカウントを使用してインデックスキーをインクリメントします。

$('#tbl_photo snip snip name="photo[' + i + '][min]"> snip snip snip

代わりに、iはフィールド数です。次に、それは次の単純な問題です。

foreach($_POST['photo'] as $i => $photo) {
    echo $photo['min'];
}

各写真フィールドの最小値を取得します。

于 2013-01-17T14:52:09.673 に答える
1

0新しく作成されたすべてのHTML要素に使用する場合、PHPには最後の$_POST項目の情報のみが含まれます。

これは、少し変更を加えた同じアプローチを使用した私のソリューションです。formラップアウトサイドアウトループがあり、名前付きの配列$dataにシード情報が含まれていると仮定します。

テーブルを作成するためのPHPコード

// the $data array contains a list of picture object, these object will be updated later.
foreach($data as $num => $row)
{
    echo "<tr>\n";
    echo sprintf("<td><input type='text' name='name[%d]' value='%s' /></td>\n", $num, $row['name']);
    echo "</tr>\n";
}
echo "<tr><td>\n";
echo "<a id='add-item'>Add new item</a>\n";
echo "<input type="hidden" name='num-created' value='0' />";
echo "</td></tr>\n"

新しい要素を追加するJavaScriptコード(jQueryを使用)

$(document).ready(function(){
    $('#add-item').click(function(){
        var currentCreatedNum = $("input[name=num-created]").val() * 1;
        var html = "<tr>";
        html += "<td><input type='text' name='newname["+ (currentCreatedNum + 1) +"]' value='' /></td>";
        html += "</tr>";            
        $("input[name=num-created]").val(currentCreatedNum + 1);
    });
});

POSTリクエストを操作するためのPHPコード

# check contrains ...

# update old records
foreach($_POST['name'] as $id => $name)
{
    // get information of existing item and update this record

}

# create new record
foreach($_POST['newname'] as $order => $name)
{
    // get information of new item and create a new record

}

ご覧のとおりname、手動で作成された要素の属性は、既存の要素とは異なる必要があります。

于 2013-01-17T15:39:10.177 に答える
0

私が理解しているのであれば、動的に作成された各テーブルアイテムにアクセスしたいですか?これは、動的配列を作成するだけで実行できます。name=Something[]新しいTD要素(または任意の要素)が生成されるたびに、 (空の角かっこで)のような名前を付けます。これにより、「Something」という配列のメンバーとして生成された各アイテムが自動的に割り当てられます。もちろん、カウンタを介してキー値を生成することもできます。

これは私が行ったプロジェクトの簡略化された例で、「更新」ボタン(ここには表示されていません)が同じページにポストバックします。

echo "<td class='grid'>
<input type='checkbox' name='chkDel[]' />
</td>";

その場合、PHPは次のよ​​うになります。

if (isset($_POST['chkDel'])) {

    // Make a MySQL Connection
    $con = mysql_connect(host,user,pwd) or die(mysql_error());
    mysql_select_db("db_name"); 

    $rows = 0;

    foreach($_POST['chkDel'] as $chkdel)  {

        //query to delete post
        $delQuery = "DELETE FROM table WHERE ".$chkdel;

        //run the query 
        mysql_query($delQuery) or die(mysql_error());

        //Get rows affected
        $i = mysql_affected_rows();
        $rows = $rows + $i;
    }

    mysql_close($con);
}

それはあなたが探しているものですか?

于 2013-01-17T15:02:47.603 に答える