将行从文本区域保存到数据库


Save lines from textarea to database

我的目标是从文本区域中提取每一行并将其保存到我的mysql db中。

我认为我的问题出在 AJAX 函数或部分,我从文本区域获取行,但请看自己:

//#userip = textarea;

    var content = $("#user_ip").val();
    var ips = content.split("'n");
    $.ajax({
        type:       'POST',
        url:        'inc.php?ban_user',
        data:       'user_ip='+ips,
        dataType:   'html',
        success:    function(data) {
            alert(data);
        },
            error: function() {
                alert("Error");
        }
    });

PHP部分是:

        if (isset($_POST["user_ip"])) {
        $user_ip   = htmlspecialchars(trim($_POST["user_ip"]));
            mysql_query("INSERT into banned (ip) values ('$user_ip')") or die(mysql_error());
        echo($user_ip);
    }

在这一点上$user_ip似乎只是所有文本区域行组合的一个字符串。

我知道这样上面的 php 代码将不起作用,它会将所有行保存为一个结果!

我想要什么:将每个 txtarea 行单独保存在我的数据库中。

"data" 属性想要一个带有 "attribute":value 对的对象,你给他一个字符串。

$.ajax({
        type:       'POST',
        url:        'inc.php?ban_user',
        data:       {'user_ip': ips},
        dataType:   'html',
        success:    function(data) {
            alert(data);
        },
            error: function() {
                alert("Error");
        }
    });

不要在客户端(ajax)拆分用户输入的字符串,而是在php脚本中拆分。

if (isset($_POST["user_ip"])) {
  $user_ip   = explode("'n",htmlspecialchars(trim($_POST["user_ip"])));
  foreach ( $user_ip AS $uip ) {
    mysql_query("INSERT into banned (ip) values ('$uip')") or die(mysql_error());
    echo($uip);
  }
}

我将使用以下方法调用来执行此操作:

$lines = preg_split( '/'r'n|'r|'n/', $string );

这将为您提供文本中所有行的数组。在此之后,您只需要迭代它并将每个值添加到数据库中。

你的问题就在于:

var ips = content.split("'n");

split() 返回所有字符串的数组。

如果您向我们展示 $_POST["user_ip"] 包含的内容,将会很有帮助。

$.val() 方法返回集合中第一个元素的值 - 因此它不适用于多个文本区域(如果您认为它是这样做的)。

您获取字符串值并将其转换为逐行字符串数组,然后进行隐式转换回单个字符串 - 为什么?只需将"内容"值发送到您的脚本,然后在那里用换行符拆分即可。

(顺便说一句,代码仍然容易受到SQL注入的影响)。