मुझे एक फॉर्म जमा करने पर डेटाबेस में एकाधिक रिकॉर्ड अपडेट करने की आवश्यकता है। प्रपत्र फ़ील्ड सभी मानों को दोहरा रहे हैं, लेकिन कोड कुछ भी नहीं कर रहा है। जब कोई सबमिट हिट करता है, तो छिपे हुए फ़ील्ड में प्रस्तुत प्रत्येक डेटा आईडी के लिए, प्रगति और last_modified_date फ़ील्ड को अपडेट किया जाना चाहिए। मैंने गुगल किया है और कहीं भी जवाब नहीं मिल रहा है। किसी भी सहायता की सराहना की जाएगी। धन्यवाद

यहाँ अद्यतन कोड है:

  if(isset($_POST['dataID'])){
    foreach($_POST['dataID'] as $updateid){
      $progress = $_POST['progress_'.$updateid];
      $last_modified_date = $_POST['last_modified_date_'.$updateid];
         $updateUser = "UPDATE data SET 
                      progress='".$progress."',last_modified_date='".$last_modified_date."' 
                      WHERE dataID=".$updateid;
         mysqli_query($sdpc_i,$updateUser);
      }
  }

}
?><form method="post" name="form1" enctype="multipart/form-data">
<select title="progress" name="progress[]" id="progress" class="form-control form-control-sm-3">
                  <option selected value="">Select One</option>
                  <option value="Contract Sent">Contract Sent</option>
                  <option value="Approved">Approved</option>
                  <option value="With Legal">With Legal</option>
                  <option value="Declined">Declined</option>
                  <option value="Vendor Unresponsive">Vendor Unresponsive</option>
                  <option value="Approved/No Data Collected">Approved/No Data Collected</option>
                </select>
 <?php
while(!$district_results_private->atEnd()) {
?>
              <input name="dataID[]" type="text" id="dataID" value="<?php echo($district_results_private->getColumnVal("dataID")); ?>" />
              <?php
  $district_results_private->moveNext();
}
$district_results_private->moveFirst(); //return RS to first record
?>
<input name="last_modified_date[]" type="hidden" id="last_modified_date" value="<?php echo date('Y-m-d'); ?>" />
 <input type="image" src="images/save.png" name="submit" id="submit" alt="Save" />
        </form>

--------------------------------------------
UPDATE:

Thank you so much for your help! I did what you said and I am still getting these errors. 

Notice: Undefined index: progress in /var/www/html/progress_workflow_multiple3.php on line 97

Notice: Undefined index: dataID in /var/www/html/progress_workflow_multiple3.php on line 98

Warning: Invalid argument supplied for foreach() in /var/www/html/progress_workflow_multiple3.php on line 98


Here is the code I have: 

<?php
$stmt = mysqli_stmt_init($sdpc_i);
mysqli_stmt_prepare($stmt, "UPDATE data SET progress = ?, last_modified_date = CURDATE() WHERE dataID = ?");
mysqli_stmt_bind_param($stmt, 'si', $progress, $dataID);
$progress = $_POST['progress'];
foreach ($_POST['dataID'] as $dataID) {
    mysqli_stmt_execute($stmt);
}
?> 


Here is the form code: 

<label for="progress"></label>
              <span class="small_links">
                <select title="progress" name="progress" id="progress" class="form-control form-control-sm-3">
                  <option value="">Select One</option>
    <option>Contract Sent</option>
    <option>Approved</option>
    <option>With Legal</option>
    <option>Declined</option>
    <option>Vendor Unresponsive</option>
    <option>Approved/No Data Collected</option>
                </select>
              </span>
            <div id="div1"></div>
            <div id="div2"></div>
            <div id="div3"></div>
            <?php
while(!$district_results_private->atEnd()) {
    ?>
    <input name="dataID[]" type="text" value="<?php echo $district_results_private->getColumnVal("dataID"); ?>" />
    <?php
    $district_results_private->moveNext();
}
$district_results_private->moveFirst(); //return RS to first record
?>
            </p>
          </div>
        </div>
        <p>&nbsp;</p>
        <p>
          <input type="image" src="images/save.png" name="submit" id="submit" alt="Save" />
        </form>
0
user2048308 30 अक्टूबर 2019, 14:56

1 उत्तर

सबसे बढ़िया उत्तर

उपयोगकर्ता के साथ बातचीत करने के लिए आपके फॉर्म में 3 आवश्यक भाग हैं (पाठ्यक्रम जमा को छोड़कर):

  • <select id="progress"> ...(प्रगति क्षेत्र)
  • <input id="dataID"> ...(dataId फ़ील्ड) ऐसा कई बार हो सकता है
  • <input id="last_modified_date"> ...(लास्टमॉड फील्ड)

प्रगति क्षेत्र केवल एक बार होगा, इसलिए इसके डेटा को एक सरणी के रूप में संरचित करने में कोई लाभ नहीं है। इसके अलावा, एक चुनिंदा फ़ील्ड अपने पहले विकल्प के लिए डिफ़ॉल्ट होगी, इसलिए पहले विकल्प पर selected की कोई आवश्यकता नहीं है। साथ ही, जब किसी विकल्प का value मान बिल्कुल विकल्प के टेक्स्ट के समान हो, तो आप value विशेषता को सुरक्षित रूप से छोड़ सकते हैं।

<select title="progress" name="progress" class="form-control form-control-sm-3">
    <option value="">Select One</option>
    <option>Contract Sent</option>
    <option>Approved</option>
    <option>With Legal</option>
    <option>Declined</option>
    <option>Vendor Unresponsive</option>
    <option>Approved/No Data Collected</option>
</select>

डेटा आईडी फ़ील्ड को सही ढंग से एक सरणी-प्रकार name दिया गया है। हालांकि, एक ही id विशेषता वाले कई तत्वों को असाइन करना अनुचित है। यदि आप एप्लिकेशन id विशेषताओं (किसी भी फ़ील्ड के लिए) का उपयोग नहीं कर रहे हैं, तो बस घोषणाओं को छोड़ दें। यदि आपको अद्वितीय id विशेषताएँ निर्दिष्ट करने की आवश्यकता है, तो आपको एक वृद्धिशील काउंटर प्रदान करना होगा और उस काउंटर को id मान के अंत में जोड़ना होगा।

while(!$district_results_private->atEnd()) {
    ?>
    <input name="dataID[]" type="text" value="<?php echo $district_results_private->getColumnVal("dataID"); ?>" />
    <?php
    $district_results_private->moveNext();
}

LastMod फ़ील्ड को दस्तावेज़ से पूरी तरह से छोड़ा जा सकता है। आप हमेशा सबमिशन के साथ वर्तमान तिथि पास कर रहे हैं और नहीं चाहते कि उपयोगकर्ता इसके साथ खिलवाड़ करे - अच्छी खबर, आप इसे सीधे अपने एसक्यूएल में हार्डकोड कर सकते हैं और उपयोगकर्ता इसे छू नहीं पाएगा।

अद्यतन प्रश्नों के लिए, सर्वोत्तम अभ्यास इंगित करता है कि आपको सुरक्षा और स्थिरता के लिए एक तैयार कथन को लागू करना चाहिए और गतिशील मूल्यों को एक लूप में बांधना चाहिए।

(अनचाहे - मैं कभी भी प्रक्रियात्मक वाक्यविन्यास का उपयोग नहीं करता)

$stmt = mysqli_stmt_init($sdpc_i);
mysqli_stmt_prepare($stmt, "UPDATE data SET progress = ?, last_modified_date = CURDATE() WHERE dataID = ?");
mysqli_stmt_bind_param($stmt, 'si', $progress, $dataID);
$progress = $_POST['progress'];
foreach ($_POST['dataID'] as $dataID) {
    mysqli_stmt_execute($stmt);
}

अनुलेख मुझे आशा है कि data आपका वास्तविक तालिका नाम नहीं है -- क्योंकि यह खराब/अशुद्ध/गैर-वर्णनात्मक है। इसे कुछ सहज/तार्किक/अभिव्यंजक नाम दें।

0
mickmackusa 30 अक्टूबर 2019, 22:18