1

わかりましたので、私の問題はこれです:

姓、名、市区町村を入力するフォームがあります。ユーザーが送信をクリックすると、情報が次の表に表示されます。

<p>You entered the following data:</p>

            <form action="1.php" method="post">

                <input type="hidden" name="action" value="update">
                <input type="hidden" name="city" value="<?php echo $user->get_city(); ?>">

                <table>
                    <tr>
                        <th>First Name:</th>
                        <td><?php echo $user->get_fname(); ?></td>
                        <td><input type="button" id="edit_fname" value="Edit"></td>
                        <td><input type="text" id="fname" name="fname" size="20"></td>
                        <td><input type="hidden" id="valf" name="val" value="fname">
                            <input type="hidden" id="lnf" name="lname" value="<?php echo $user->get_lname(); ?>">
                            <input type="submit" id="subfn" value="Submit"></td>
                    </tr>
                    <tr>
                        <th>Last Name:</th>
                        <td><?php echo $user->get_lname(); ?></td>
                        <td><input type="button" id="edit_lname" value="Edit"></td>
                        <td><input type="text" id="lname" name="lname" size="20"></td>
                        <td><input type="hidden" id="vall" name="val" value="lname">
                            <input type="hidden" id="fnf" name="fname" value="<?php echo $user->get_fname(); ?>">
                            <input type="submit" id="subln" value="Submit"></td>
                    </tr>
                    <tr>
                        <th align="right">City:</th>
                        <td><?php echo $user->get_city(); ?></td>
                        <td>&nbsp;</td>
                    </tr>
                </table>
            </form>

したがって、ユーザーが編集ボタンをクリックすると、送信ボタンとともにテキスト ボックスが表示され、名前の編集か姓の編集かに応じて、フォームと共に送信する適切な非表示の値があります。唯一の問題は、名前フィールドの [送信] ボタンをクリックしても、非表示の入力 'val' が 'lname' に設定されることです。

ここにjqueryがあります:

$().ready = function() {
                    $('#fname').hide();
                    $('#lname').hide();
                    $('#subfn').hide();     // submit button for first name
                    $('#subln').hide();     // submit button for last name
                    $('#valf').hide();      // hidden value for fname so we know to post lname
                    $('#vall').hide();      // hidden value for lname so we know to post fname
                    $('#lnf').hide();       // hidden value to post last name when first name edit submit
                    $('#fnf').hide();       // hidden value to post first name when last name edit submit

                    $("#edit_fname").click(function() {
                        $('#fname').show();
                        $('#subfn').show();
                        $('#valf').show();
                        $('#lnf').show();

                        if ($('#lname').show) {     // if last name edit is showing, hide it
                            $('#lname').hide();
                            $('#subln').hide();
                            $('#vall').hide();
                            $('#fnf').hide();

                        }
                    });

                    $("#edit_lname").click(function() {
                        $('#lname').show();
                        $('#subln').show();
                        $('#vall').show();
                        $('#fnf').show();

                        if ($('#fname').show()) {       // if first name edit is showing, hide it
                            $('#fname').hide();
                            $('#subfn').hide();
                            $('#valf').hide();
                            $('#lnf').hide();
                        }
                    });

                }();

[送信] ボタンがクリックされ、「アクション」が「更新」に変更されたときの PHP は次のとおりです。

case 'update':
        $val = $_POST['val'];

        if ($val == 'fname') {
            $fname = $_POST['fname'];
            $lname = $_POST['lname'];
            $city = $_POST['city'];

            $user = new User($fname, $lname, $city);
            break;
        }
         else if ($val == 'lname') {
            $fname = $_POST['fname'];
            $lname = $_POST['lname'];
            $city = $_POST['city'];

            $user = new User($fname, $lname, $city);
            break;
        }

$val が何であるかを確認するためにテストしましたが、何があっても「lname」に固執しているようです。したがって、私のjQueryコードに問題があると思います。または、問題は姓の「val」値が何があっても送信されていることです。名ボタンをクリックします。

これはすべて、私が OOP を学ぶのに役立つ実験的なものです。明らかに、これは製品コードではありません。私は現在、応用科学の準学士号を取得するための 1 年生で、コンピューター サイエンスの学士号を取得するまであと何年もあります。これはクラスの一部でさえありません...私はただ退屈していて、プログラミングを本当に楽しんでいます.

それで、誰でも助けることができると思いますか?こんなに長い投稿でごめんなさい!

4

2 に答える 2

2

これが理由です。次の 2 行のコードを参照してください。

<td><input type="hidden" id="valf" name="val" value="fname">

.....

<td><input type="hidden" id="vall" name="val" value="lname">

これらは、最初に値 fname で、次に値 lname でvalという名前の隠しフィールドを定義します。ID が異なっていても、名前は同じです。そして、jquery コードのどこにもvalの値を変更していないため、常にlnameのままです。

どこかのロジックに応じて、その値を変更する必要があります。次のjQueryセレクターを使用できます

$("input[type='hidden'][name='val']")

編集

だからこれの代わりに

$('#valf').show();

あなたは書ける

$("input[type='hidden'][name='val']").val("fname");

そしてこれの代わりに

$('#vall').show();

あなたは書ける

$("input[type='hidden'][name='val']").val("lname");
于 2013-01-25T05:42:19.480 に答える
1

name="val"同じフォームに2 つの異なるフィールドがあります。PHP はこれらを順番に読み取り、2 番目の値が最初の値を上書き (上書き) して、$_GET配列要素の最後の値だけを残します。

[]末尾に を付けて変数名を指定すると、同じ名前で複数の値を送信できます。$array[] = "new element";これは、配列に要素を追加するために通常のコードで使用するのと同じように、それが配列要素であることを PHP に伝えます。

ただし、フォームを送信するたびに両方の値がサーバーに渡されるため、ここでは配列構文を使用しても役に立ちません。いずれかのセクションのみを送信する場合は、別のフォームにする必要があります。

于 2013-01-25T05:41:04.470 に答える