0
$keywords = explode("\n",$_POST['keywords']);

//Inserting into Database
foreach($keywords as $key => $keyword){
    $keyword = strtolower(trim($keyword));
    $keyword = preg_replace("/[^A-Za-z0-9' ]/", "", $keyword);
    $keyword = preg_replace("/\s+/", " ", $keyword);
    $insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('$keyword')";
        mysql_query($insertkeywords);
}

当我在以下位置有撇号时,我一生都无法弄清楚为什么这段代码不会将关键字插入数据库:

"/[^A-Za-z0-9' ]/"

但是当我删除它时:

"/[^A-Za-z0-9 ]/"

此脚本将记录插入数据库。

我想做什么? 我在表单上有一个文本区域。对于新行上的每个关键字,我根据 \n 展开。我想从关键字中删除所有非字母和非数字字符,但不希望删除撇号。

我基本上希望所有关键字都是小写的,带有前导、尾随和额外的空格 - 2 个或更多空格被修剪为一个 - 以及除撇号之外的任何非字母和非数字字符。

4

2 回答 2

0

谢谢三叶草。没有你的帮助,我要花好几个小时才能弄清楚这个问题!我最终使用了mysqli_real_escape_string而不是mysql_real_escape_string,因为 mysql_real_escape_string 说它从 PHP 5.5.0 开始已被弃用。结果,我不得不对其进行一些更改,但到目前为止,下面的代码似乎对我来说效果很好(以防其他人遇到此问题)。

$con = mysqli_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysqli_error());
  }
else
    {
echo "Connected Successfully!";
}
//select database
mysqli_select_db($con, "test");

$keywords = explode("\n",$_POST['keywords']);

//Inserting into Database
foreach($keywords as $key => $keyword){
    $keyword = preg_replace("/[^A-Za-z0-9' ]/", " ", $keyword);
    $keyword = preg_replace("/\s+/", " ", $keyword);
    $keyword = strtolower(trim($keyword));
    //$insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('$keyword')";
    $insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('".mysqli_real_escape_string($con, $keyword)."')";
        mysqli_query($con, $insertkeywords);
}
于 2013-01-20T18:53:16.950 回答
0

您需要转义您的关键字: $insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('".mysql_real_escape_string($keyword)."')";

于 2013-01-20T10:56:39.753 回答