โพสต์อาร์เรย์จากรูปแบบ HTML โดยไม่ต้องใช้จาวาสคริปต์


90

ฉันมีแบบฟอร์มที่ซับซ้อนเล็กน้อยและฉันหวังว่าจะลดความซับซ้อนของการประมวลผลฝั่งเซิร์ฟเวอร์ (PHP) โดยการโพสต์อาร์เรย์ของสิ่งทอ

ส่วนแรกของแบบฟอร์มแสดงถึงผู้ใช้ :

  • ชื่อจริง
  • นามสกุล
  • อีเมล์
  • ที่อยู่
  • ฯลฯ

ส่วนที่สองของแบบฟอร์มแสดงถึงต้นไม้ :

  • ผลไม้
  • ความสูง
  • ฯลฯ

ปัญหาคือฉันต้องสามารถโพสต์ต้นไม้หลาย ๆต้นสำหรับผู้ใช้คนเดียวในรูปแบบเดียวกัน ฉันต้องการส่งข้อมูลในฐานะผู้ใช้คนเดียวที่มีต้นไม้มากมายแต่อาจซับซ้อนเกินไปที่จะทำกับแบบฟอร์ม สิ่งเดียวที่อยู่ในใจคือการใช้ javascript เพื่อสร้างข้อความ JSON ด้วยวัตถุผู้ใช้และอาร์เรย์ของวัตถุ Tree แต่จะเป็นการดีหากหลีกเลี่ยงจาวาสคริปต์เพื่อรองรับผู้ใช้จำนวนมากขึ้น (บางคนปิดสคริปต์)


1
อาร์เรย์รับประกันการสั่งซื้อหรือไม่? ฉันต้องการอาร์เรย์ของออบเจ็กต์ Tree ซึ่งจะมีหลายฟิลด์ดังนั้นนี่หมายความว่าฉันต้องใช้อาร์เรย์หลายอันเพื่อแสดงถึง Tree และต้องเรียงลำดับอาร์เรย์เพื่อที่ฉันจะได้ทราบว่า Tree ใดเป็นตัวแทนของต้นไม้
styfle

คำตอบ:


155

ตรวจสอบสิ่งนี้

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<input type="text" name="address">

<input type="text" name="tree[tree1][fruit]">
<input type="text" name="tree[tree1][height]">

<input type="text" name="tree[tree2][fruit]">
<input type="text" name="tree[tree2][height]">

<input type="text" name="tree[tree3][fruit]">
<input type="text" name="tree[tree3][height]">

มันควรจะลงเอยเช่นนี้ในอาร์เรย์ $ _POST [] (รูปแบบ PHP เพื่อให้มองเห็นได้ง่าย)

$_POST[] = array(
    'firstname'=>'value',
    'lastname'=>'value',
    'email'=>'value',
    'address'=>'value',
    'tree' => array(
        'tree1'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree2'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree3'=>array(
            'fruit'=>'value',
            'height'=>'value'
        )
    )
)

6
อนุญาตให้ใช้อักขระใดในการจัดทำดัชนีอาร์เรย์ ใช้,.: `@? ตัวอย่าง: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ เป็นเพียงตัวคั่นที่ปลอดภัยในการตั้งชื่อคีย์หรือไม่?
CoR

5
จะtree[][fruit]และtree[][height]ไม่ถูกต้องเพื่อสร้างดัชนีโดยอัตโนมัติอาร์เรย์?
Wobbles

ฉันจะรับข้อมูลที่ส่งนี้เป็นอาร์เรย์ / อ็อบเจ็กต์ใน js เพื่อใช้ในการส่งการโทรกลับได้อย่างไร ... ฉันได้ลองnew formData($("form")[0])และ jQuery $("form").serializeArray()ทั้งสองส่งคืนname="tree[tree1][fruit]"เป็นสตริง .... ช่วยด้วย
Santosh

หมายเหตุ: ใช้ไม่ได้กับฟังก์ชัน jquery ในการรวบรวมข้อมูลแบบฟอร์มเป็น.serialize()หรือ.serializeArray()
SubjectDelta

ฉันพยายาม แต่ไม่ได้ผลสำหรับฉันใน laravel
Veshraj Joshi

66

คุณยังสามารถโพสต์อินพุตหลายรายการที่มีชื่อเดียวกันและให้บันทึกลงในอาร์เรย์ได้โดยเพิ่มวงเล็บเหลี่ยมว่างให้กับชื่ออินพุตดังนี้:

<input type="text" name="comment[]" value="comment1"/>
<input type="text" name="comment[]" value="comment2"/>
<input type="text" name="comment[]" value="comment3"/>
<input type="text" name="comment[]" value="comment4"/>

หากคุณใช้ php:

print_r($_POST['comment']) 

คุณจะได้รับสิ่งนี้:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.