2012-04-23 79 views
0

我的目標是從textarea中提取每行並將其保存到我的mysql數據庫。保存從textarea到數據庫的行

我想我的問題就出在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似乎只是所有textarea組合的一個字符串。

我知道這種方式上面的php代碼不會工作,它會保存所有行作爲一個結果!

我想要什麼:保存每個txtarea線在我的數據庫分隔。

回答

1

「數據」屬性想要一個帶有「屬性」:值對的對象,並且給他一個字符串。

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

作品! :) 謝謝! – Andrej 2012-04-23 11:43:02

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); 
    } 
} 
+0

這可能不是直接的工作,你可能不得不更換線路斷開與AJAX腳本中一些特殊的字符。 – Paul 2012-04-23 11:40:13

0

我會用下面的方法來完成這一操作:

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

這將使你在文本中的所有行的數組。在此之後,您只需要遍歷它並將每個值添加到數據庫。

+1

$ lines = explode(PHP_EOL,$ string); – 2012-04-23 11:39:50

0

您的問題在於在此:

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

split()返回所有的字符串數組。

0

這本來是有益的,如果你想向我們展示了什麼$ _ POST [「user_ip」]遏制。 $ .val()方法返回中第一個元素的值 - 所以它不適用於多個textareas(如果這就是您認爲的那樣)。

您得到字符串值並將其轉換爲字符串的逐行數組,然後執行隱式轉換回單個字符串 - 爲什麼?只需將「內容」值發送到您的腳本,然後在該處用換行符分隔。

(和順便說一句,代碼仍然容易受到SQL注入)。