从textarea到数据库保存行

时间:2012-04-23 11:35:49

标签: php jquery mysql

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

我认为我的问题在于AJAX函数或部分,我从textarea获取行,但是看看你自己:

//#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似乎只是所有textarealines合并的一串。

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

我想要的:将每个txtarea-line分别保存在我的数据库中。

5 个答案:

答案 0 :(得分:1)

“data”属性需要一个具有“attribute”的对象:值对,并且你给他一个字符串。

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

答案 1 :(得分:0)

不要在用户端(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);
  }
}

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

你的问题在于:

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

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

答案 4 :(得分:0)

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

$ .val()方法返回集合中 first 元素的值 - 因此它不适用于多个textareas(如果这是你认为的那样)。

你得到字符串值并将其转换为逐行字符串数组,然后将隐式转换回单个字符串 - 为什么?只需将'content'值发送到您的脚本,然后在那里按换行分配。

(顺便说一下,代码仍然容易受到SQL注入攻击)。