Insert multiple email to mysql using single textarea

跟風遠走 提交于 2021-02-16 19:50:17

问题


I want to insert multiple emails into the database using single text area.

This is my code :

PHP

error_reporting(E_ERROR | E_WARNING | E_PARSE);

$dbhost = "localhost";
$dbname = "emails_test";
$dbuser = "root";
$dbpass = "";

$conn = mysql_connect($dbhost,$dbuser,$dbpass);
if (!$conn) { die('Could not connect: ' . mysql_error()); }
mysql_select_db($dbname, $conn);

if(isset($_POST['submit'])) {
    //$email = nl2br($_POST['email']);
    $email = explode("\r\n", $_POST['email']);

    foreach($email as $emails) {
        $query = mysql_query("INSERT INTO emails (email) VALUES ('$emails')");
        if($query) { echo "Inserted into the database"; } else { echo"Fail, please try again"; }
    }
}

HTML

<body>
    <form name="form1" method="POST">
        <textarea rows="5" name="email" cols="50" ></textarea><br>
        <input type="submit" name="submit" value="submit">
    </form>
</body>

I want table to be like this : [Pic Table in MySQL]


回答1:


Use explode to get string into array by "\r\n"

don't use single quotes you need to use double quotes to explode the string by \r\n I just got to know that.

<?php
if(isset($_POST['submit'])) {
    //$email = nl2br($_POST['email']);
    $email = explode("\r\n", $_POST['email']);

    foreach($email as $emails) {
        $query = mysql_query("INSERT INTO emails (email) VALUES ('$emails')");
        if($query) {
            echo "Inserted into the database";
        } else {
            echo "Fail, please try again";
        }
    }
}
?>
<body>
    <form name="form1" method="POST">
        <textarea rows="5" name="email" cols="50" ></textarea>
        <br />
        <input type="submit" name="submit" value="submit">
    </form>
</body>



回答2:


You may try this way

<body>
    <form name="form1" method="POST">
        <textarea rows="5" name="email" cols="50" ></textarea>
        <br />
        <input type="submit" name="submit" value="submit">
    </form>
</body>


Note :- use "Enter" to put all email (one by one)

Insert into database

  <?php

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

if(isset($_POST["submit"])) {

        $str = $_POST["email"];
        $email  = preg_split('/\r\n|\n|\r/', $str);


    foreach($email as $emails) {

        $query = mysqli_query($conn, "INSERT INTO emails (email) VALUES ('".$emails."')");

        if($query) { ?>

            <script>alert("Inserted into the database");</script>

            <?php } else { ?>

                <script>alert("Fail, please try again");</script>
    <?php } } }

    mysqli_close($conn);

    ?> 

Example :-




回答3:


Your code will work as intended if you will just replace this

$email = nl2br($_POST['email']);

with this

$email = preg_split('/\r\n|\n|\r/', $_POST['email']);

The problem is, you just have replaced all \n\r with <br>\n\r. The nl2br returns a string with replacements, but you need an array for using it inside the foreach loop.

As an additional note, you're iterating through an array and every time you are adding this instruction:

<script>alert("Inserted into the database");</script>

If you will iterate through 10 emails, you will be alerted ten times in a row.

Also, mysql_query is deprecated. It's time to learn either PDO, or MySQLi, which will give you ability to use placeholders instead of unsafe direct injecting $_POST data into SQL query. Placehiolders are pretty easy to learn, and they can help you to build more reliable applications.




回答4:


Do this in your code...

HTML

<body>
    <form name="form1" method="POST">
        <textarea rows="5" name="email" cols="50" ></textarea><br>
        <small>Enter email IDs separated by comma(,)</small>
        <input type="submit" name="submit" value="submit"><br>
    </form>
</body>

PHP

if(isset($_POST['submit'])) {
    $email = explode(',',$_POST['email']);//convert into $email array
    $value = '';
    foreach($email as $r) $value .= '("'.$r.'"),';//concatenate email for insert
    $value = rtrim($value,',').';' //remove the last comma ;
    $query = mysqli_query('INSERT INTO emails (email) VALUES '.$value);// insert all email in database in single query in different rows
    if($query) echo 'Inserted into the database';
    else echo 'Fail, please try again";
}

You will get your output...



来源:https://stackoverflow.com/questions/48199912/insert-multiple-email-to-mysql-using-single-textarea

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!