2009-05-18 15 views
7

मैं थोड़ी देर के लिए PHP का उपयोग कर रहा हूं और मैंने हमेशा सोचा है कि डेटाबेस में अद्यतनों और आवेषणों को संभालने के लिए एक ही फ़ॉर्म का प्रतिनिधित्व कैसे किया जाए। वर्तमान में, मैं 2 अलग रूपों का उपयोग कर रहा यह करने के लिए और वे दोनों मूलतः एक ही जानकारी और बक्सें है, आदि मैं जानता हूँ कि वहाँ इस से निपटने का एक बेहतर तरीका है, लेकिन मुझे यकीन है कि क्या है नहीं कर रहा हूँ।PHP फॉर्म डिज़ाइन सर्वोत्तम अभ्यास

मैंने अतीत में एक ही फॉर्म का उपयोग करने की कोशिश की है लेकिन PHP के साथ मिश्रित एचटीएमएल भयानक लग रहा है और इसे बनाए रखना वाकई मुश्किल है। मैं "साफ" और साफ के बाद हूँ।

क्या कोई मुझे सही रास्ते पर रख सकता है।

मुझे उपयोग करने वाली चीज़ों में से एक POST मान हैं यदि उपयोगकर्ता फॉर्म सबमिट करता है और सत्यापन पास नहीं होता है, तो रीफ्रेश को पहले से दर्ज किए गए मानों को मिटा नहीं देना चाहिए।

उत्तर

5

आप id के लिए एक छिपे हुए क्षेत्र के साथ एक ही फॉर्म का उपयोग कर सकते हैं। यदि यह फ़ील्ड सेट है - तो आपको शेष फॉर्म के साथ $_POST['id'] रिकॉर्ड अपडेट करना चाहिए। यदि फ़ील्ड सेट नहीं है (यानी, इसका मान = "" है), तो आपको फॉर्म डेटा को नए रिकॉर्ड में डालना चाहिए।

आप कार्रवाई के अनुसार id क्षेत्र सेट करेंगे, उदाहरण के /data/edit/1 के लिए , and/डेटा/new` को id क्षेत्र सेट हो जाएगा यह करने के लिए मान सेट नहीं होंगे।

उदाहरण के लिए, आपके विचार हो सकता है

<form action="/data/edit/1"> 
<input type="hidden" value="<?php echo $data->id; ?>" /> 
<input type="text" value="<?php echo $data->name; ?>" /> 
</form> 

एक नया रिकार्ड के मामले में, निम्न डेटा

$data->id = ''; 
$data->name = ''; 

एक के रूप में दर्ज करने के मामले में के साथ अपने दृश्य कहते हैं, बस $data init डेटा

$data->id = $record_id; 
$data->name = $record_name; 
+0

हाय Elazar, मदद के लिए धन्यवाद। क्या कोई उदाहरण है या क्या आप एक लिंक प्रदान कर सकते हैं ताकि मैं देख सकूं कि आपका क्या मतलब है? यह समझ में आता है लेकिन मैं इसे चित्रित नहीं कर सकता। मुझे नहीं लगता कि आपका सुझाव पहले से ही यह कैसे कर रहा था उससे काफी अलग है। –

+2

वर्तमान उपयोगकर्ता का मालिक है कि कि आईडी –

+0

क्यों भी एक आईडी क्षेत्र है, तो संपादन के लिए कार्रवाई वैसे भी आईडी में शामिल है की जाँच करने के लिए मत भूलना? – rojoca

1

इस प्रकार मैं इसे संभवतः साथ करूँगा किसी भी अन्य ढांचे/पुस्तकालयों आदि का उपयोग नहीं कर रहा है। यह मूल रूप से एलज़र लीबोविच ने कहा था।

<?php 
    //id is zero or a record id depending on whether updating or inserting 
    //an existing record could be edited using edit.php?id=10 
    //if the id GET parameter is omitted a new record will be created 
    $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0; 
    $error = ''; 

    if ($id) { 
     //this array would be in the same format as the one below 
     $record = fetchRecordFromDb($id);  
    } else { 
     $record = array('field1' => 'default value', 'field2' => 'some other default');  
    } 

    //allow POST data to override what is already in the form 
    foreach ($record as $key => $value) { 
     if (isset($_POST[$key])) { 
      $record[$key] = $_POST[$key]; 
     } 
    } 

    if (isset($_POST['submit'])) { 
     if (!validateForm()) { 
      $error = 'Some form error'; 
     } else { 
      if ($id) { 
       updateRecord($id, $record); 
      } else { 
       insertRecord($record); 
      } 

      //ok, redirect somewhere else 
      header('Location: http://somewhere'); 
      exit(); 
     } 
    } 

    ?> 

    <form method="post"> 
     <?php echo $error; ?> 
     <input type="hidden" name="id" value="<?php echo $id; ?>"> 
     <input type="text" name="field1" value="<?php echo htmlspecialchars($record['field1']); ?>"><br /> 
     <input type="text" name="field2" value="<?php echo htmlspecialchars($record['field2']); ?>"><br /> 
     <input type="submit" name="submit"> 
    </form> 
संबंधित मुद्दे