Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

php के साथ mysql में एकाधिक भाषा टेक्स्टफील्ड कैसे स्टोर करें?

एचटीएमएल भाग

HTML फॉर्म में आपके इनपुट फ़ील्ड में ऐसे नाम होने चाहिए जो आपको भाषा की पहचान करने की अनुमति दें। HTML में आप वर्गाकार कोष्ठकों के साथ फ़ील्ड नाम बना सकते हैं। जब PHP इन मानों को प्राप्त करता है तो यह उन्हें एक सरणी के रूप में मानेगा। आप एक <textarea> . परिभाषित कर सकते हैं इस तरह:

<textarea name="email_content[fr]">

फिर PHP में आप निम्न सिंटैक्स का उपयोग करके मान तक पहुँच सकते हैं:

$french = $_POST['email_content']['fr'];

नोट:

  • एचटीएमएल <textarea> कोई type नहीं है न ही value विशेषताएँ।
  • hidden जोड़ने के बजाय <input> के लिए विशेषता तत्व, बस निर्दिष्ट करें type="hidden"
  • HTML में किसी भी गतिशील सामग्री को आउटपुट करते समय आपको XSS सुरक्षा
  • के बजाय <?php echo $var ?> आप छोटे सिंटैक्स का उपयोग कर सकते हैं <?=$var ?>

तब आपका पूरा HTML फॉर्म कुछ इस तरह दिख सकता है:

<form action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
    <input type="hidden" value="<?=$id?>" name="email_id">

    <?php foreach ($languages as $lang) : ?>
        <textarea value="1" name="email_content[<?=htmlspecialchars($lang)?>]" placeholder="<?=htmlspecialchars($lang)?>" value="<?=htmlspecialchars($lang)?>"></textarea>
    <?php endforeach ?>

    <button type="submit" name="save">Save</button>
</form>

PHP में फॉर्म प्राप्त होने के बाद आपका $_POST इसमें कुछ इस तरह होना चाहिए:

array (
  'email_id' => '12',
  'email_content' => 
  array (
    'en' => '',
    'fr' => 'French text',
    'ru' => '',
  ),
  'save' => '',
)

PHP भाग

पीडीओ का उपयोग करके PHP में एकाधिक मानों को सहेजने के लिए आपको लूप का उपयोग करने की आवश्यकता है। लूप से पहले, आपको स्टेटमेंट तैयार करना चाहिए और मापदंडों को बांधना चाहिए। PDO_stmt::bind_param() शायद ही कभी उपयोग किया जाता है, लेकिन इस स्थिति में यह आपके कोड को साफ-सुथरा बना सकता है। आपको लेन-देन के अंदर सभी प्रविष्टियां भी करनी चाहिए।

$pdo->beginTransaction();

$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content) 
                        VALUES (:email_id, :email_lang, :email_content)");
$stmt->bindParam('email_id', $_POST['email_id']);
$stmt->bindParam('email_lang', $lang);
$stmt->bindParam('email_content', $contents);

foreach ($_POST['email_content'] as $lang => $contents) {
    if ($contents && in_array($lang, $languages, true)) {
        $stmt->execute();
    }
}

$pdo->commit();

यदि आप सरल सिंटैक्स का उपयोग करना चाहते हैं तो आप PDO_stmt::execute() का उपयोग कर सकते हैं पूर्व बाध्यकारी के बिना पैरामीटर पास करने के लिए।

$pdo->beginTransaction();

$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content) 
                        VALUES (:email_id, :email_lang, :email_content)");

foreach ($_POST['email_content'] as $lang => $contents) {
    if ($contents && in_array($lang, $languages, true)) {
        $stmt->execute([
            'email_id' => $_POST['email_id'],
            'email_lang' => $lang,
            'email_content' => $contents,
        ]);
    }
}

$pdo->commit();

निम्न पंक्ति जाँचती है कि क्या सामग्री प्रदान की गई थी और भाषा आपके द्वारा निर्दिष्ट भाषाओं की श्रेणी में है।

if ($contents && in_array($lang, $languages, true)) {



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL परिणामसेट स्क्रॉल करने योग्य/अद्यतन करने योग्य अपेक्षा के अनुरूप काम नहीं कर रहा है

  2. एसक्यूएल दो अलग-अलग तालिकाओं से दो कॉलम की तुलना कैसे करें

  3. क्या यह MySQL तालिकाओं को latin1 से utf-8 में बदलने का एक सुरक्षित तरीका है?

  4. PHP Laravel:कोई कनेक्शन नहीं बनाया जा सका क्योंकि लक्ष्य मशीन ने सक्रिय रूप से इसे अस्वीकार कर दिया था

  5. विधि JPQL के लिए क्वेरी के लिए सत्यापन विफल रहा