फॉर्म फ़ाइल को उसी फ़ाइल में mysql में फ़ॉर्म डेटा सहेजने के लिए

मैं इसे हल करने की कोशिश कर रहा हूं लेकिन अब तक मैं इसे काम करने में सक्षम नहीं हूं। कोई त्रुटि नहीं फेंक दी गई है, पेज जमा करने पर ताज़ा है। मुझे नुकसान हुआ है, लेकिन मैं वास्तव में एक विशेषज्ञ नहीं हूं, इस पर काफी नया हूं।

यहां कोड है (पोस्टिंग के लिए सरलीकृत):

<?php if (!isset($_POST['submit'])) {
echo              "<!-- Form starts here -->
                  <form id=\"billing\" action=\"\" method=\"post\">
                  <!-- Name -->
                  <div class=\"control-group\">
                  
                  <div class=\"controls\">
                  <input type=\"text\" id=\"name\" name=\"name\" placeholder=\"your name\" class=\"input-large\">
                  </div>
                  </div>
                  <!-- Zip -->
                  <div class=\"control-group\">
                  
                  <div class=\"controls\">
                  <input type=\"text\" id=\"billingzip\" name=\"billingzip\" placeholder=\"5 digit zip\" class=\"input-large\">
                  </div>
                  </div>
                  <!-- Submit -->
                  <div class=\"control-group\">
                  <div class=\"controls\">
                  <button class=\"button save small_green_button\" type=\"submit\">
                   Save 
                  </button>
                  </div>
                  </div>
                  </form>";
}
else
{
 $host="localhost";
 $user_name="user";
 $pwd="password";
 $database_name="database";
 $db=mysql_connect($host, $user_name, $pwd) or die(mysql_error());
 $dbsel=mysql_select_db($database_name, $db);

 if (mysql_error() > "") print mysql_error() . "
"; if (mysql_error() > "") print mysql_error() . "
"; $account_id = users::getAttr('Account', 'account_id'); $zip = mysql_real_escape_string($_POST['billingzip']); $name = mysql_real_escape_string($_POST['name']); $sql = "INSERT INTO `billing` SET `account_id` = '{$account_id}', `zip` = '{$billingzip}', `name` = '{$name}', `updated_at` = NOW()"; $result = mysql_query($sql, $dbsel) or die(mysql_error().$sql); mysql_close($db); } ?>
0
मैंने इसे पेस्ट से दुर्घटना से बाहर छोड़ा, लेकिन यह वहां है।
जोड़ा लेखक Arringar1, स्रोत
MySQL _ * फ़ंक्शंस के साथ नया कोड न लिखें, खासकर जब आप इसे सीख रहे हों। वे बहिष्कृत होने की प्रक्रिया में हैं और PHP के भविष्य के संस्करणों में हटा दिए जाएंगे। mysqli _ * या पीडीओ के साथ तुरंत जानें।
जोड़ा लेखक Gerald Schneider, स्रोत
{$ billingzip} {$ zip} होना चाहिए, और यदि $ account_id एक संख्यात्मक मान है तो आपको क्वेरी में उद्धरण की आवश्यकता नहीं है इसके आसपास। निश्चित नहीं है कि अगर इसके परिणामस्वरूप एक अवैध क्वेरी होगी।
जोड़ा लेखक Gerald Schneider, स्रोत
मुझे आपके फॉर्म में submit नामक कोई भी इनपुट दिखाई नहीं देता है।
जोड़ा लेखक Gerald Schneider, स्रोत
type = "submit" name = "सबमिट करें" नहीं है
जोड़ा लेखक Gerald Schneider, स्रोत

2 उत्तर

मेरी टिप्पणियों को सारांशित करने के लिए:

आपके फ़ॉर्म में name = "submit" के साथ कोई फॉर्म तत्व नहीं है, इसलिए (! Isset ($ _ POST ['submit'])) हमेशा true होगा और आपका else ब्लॉक कभी निष्पादित नहीं होगा। आप अपनी स्क्रिप्ट की शुरुआत में var_dump ($ _ POST); जोड़कर इसे देख सकते हैं ( if खंड से पहले)। var_dump() आपके पास PHP के साथ सबसे अच्छे डीबगिंग टूल में से एक है। इसका इस्तेमाल करें।

$dbsel=mysql_select_db($database_name, $db);

या तो true या false लौटाएगा, इसलिए $ dbsel हमेशा इन दो मानों में से एक होगा। आपको इसे स्टोर करने की आवश्यकता नहीं है, आप बस अपना या मर सकते हैं ("डेटाबेस का चयन नहीं कर सकते");

$account_id = users::getAttr('Account', 'account_id');

आपके पास कोई जानकारी नहीं है कि यह क्या लौटाता है। यह बाद में मायने रखता है यदि $ account_id में संख्यात्मक आईडी या स्ट्रिंग है। यदि यह एक स्ट्रिंग है तो यह ठीक है, अगर यह एक संख्यात्मक मान है तो आपको इसे बदलना चाहिए:

`account_id` = {$account_id}

आगामी:

`zip` = '{$billingzip}',

आपने $ _ POST ['billingzip'] को $ ज़िप में संग्रहीत किया है, इसलिए यह होना चाहिए:

`zip` = '{$zip}',

अंतिम पर कम नहीं:

$result = mysql_query($sql, $dbsel)

जैसा कि पहले बताया गया है, $ dbsel में या तो true या false है, इसलिए यह गलत है, यह $ db संदर्भ। साथ ही, चूंकि आप एकाधिक डेटाबेस कनेक्शन के साथ काम नहीं करते हैं, इसलिए आपको यहां किसी भी संदर्भ का संदर्भ देने की आवश्यकता नहीं है।

$result = mysql_query($sql /* , $db */)

और MySQL प्रश्नों से संबंधित सामान्य सलाह: यदि आप नया कोड लिखते हैं तो MySQL _ * फ़ंक्शंस का उपयोग न करें। वे बहिष्कृत होने की प्रक्रिया में हैं और PHP के भविष्य के संस्करणों में हटा दिए जाएंगे। mysqli _ * या पीडीओ के साथ तुरंत जानें। दोनों विधियां आपको तैयार कथन का उपयोग करने की अनुमति देती हैं, जो आपको यह सुनिश्चित करने की अनुमति देती है कि आपकी साइट एसक्यूएल इंजेक्शन से सुरक्षित है, बिना उपयोगकर्ता द्वारा प्रदान की गई सामग्री से बचने के लिए परेशान किए।

अपने आप को एक पक्ष बनाओ, पूर्ण ब्लॉक को टिप्पणी करें और पीडीओ या mysqli _ * के साथ इसे फिर से लिखें।

1
जोड़ा

सबसे पहले मैं क्या देखता हूं

$result = mysql_query($sql, $dbsel) or  die(mysql_error().$sql);

मेरी राय में आपको लिखा जाना चाहिए:

$result = mysql_query($sql, $db) or  die(mysql_error().$sql);
1
जोड़ा
मैंने उस सटीक विधि की कोशिश की और यह काम नहीं किया। मुझे एहसास हुआ कि डेटाबेस नाम का संदर्भ नहीं दिया जा रहा था इसलिए मैंने इसे संदर्भित करने के लिए dbsel जोड़ा।
जोड़ा लेखक Arringar1, स्रोत
सुझाव: $ dbsel = mysql_select_db ($ डेटाबेस_नाम) ???
जोड़ा लेखक Arringar1, स्रोत
यह <कोड> INSERT वाक्यविन्यास मान्य है।
जोड़ा लेखक Gerald Schneider, स्रोत
@ Arringar1 $ dbsel निश्चित रूप से गलत है, आपको $ db (या इसे छोड़ दें, संदर्भित होना चाहिए, यह आपके पास केवल एक डेटाबेस कनेक्शन होने पर नस्लीय नहीं है)।
जोड़ा लेखक Gerald Schneider, स्रोत
ठीक है, तो आपका एसक्यूएल वाक्यविन्यास गलत है? मुझे पता है कि यह table_name ([कॉलम] में INSERT की तरह होना चाहिए) मूल्य ([मान]) | w3schools.com/php/php_mysql_insert.asp
जोड़ा लेखक przeqpiciel, स्रोत
फॉर्म कार्रवाई शून्य है?
जोड़ा लेखक przeqpiciel, स्रोत