php插入preg_match_all数组

时间:2012-05-11 06:58:23

标签: php mysql arrays insert short

这是一个代码来捕获POST中的所有url并将它们缩短然后将它们中的每一个插入到mysql中的行.....但是这里它将所有url插入一行? 所以我怎么能让它抓住第一个网址然后将其插入数据库然后返回第二个并做同样的事情.. ???

$urlinput=mysql_real_escape_string($_POST['url']); 
$pattren="/(http:\/\/)[a-zA-Z0-9]*\.[a-z]*(.*)|(www)\.[a-zA-Z0-9]*\.[com]*(.*)/";
preg_match_all( $pattren, $urlinput, $matches );
foreach($matches[0] as $match) {

$id=rand(10000,99999);
$shorturl=base_convert($id,20,36);
$sql = "insert into url values('$id','$match','$shorturl')";
mysql_query($sql,$con);
}

2 个答案:

答案 0 :(得分:1)

这里http://php.net/manual/en/function.preg-match-all.php您可以阅读preg_match_all的第4个参数。你可以遍历找到的网址。我更改了正则表达式的结尾,因此它不会捕获整行:

$urlinput=mysql_real_escape_string($_POST['url']); 
$pattren="/(http:\/\/)[a-zA-Z0-9]*\.[a-z]*(.*)|(www)\.[a-zA-Z0-9]*\.[com]*([a-zA-Z0-9\.\-_\/\?=\:]*)/";
preg_match_all( $pattren, $urlinput, $matches, PREG_SET_ORDER );
foreach($matches as $match) {
  $id=rand(10000,99999);
  $shorturl=base_convert($id,20,36);
  $sql = "insert into url values('$id','" . mysql_real_escape_string($match[0]) . "','$shorturl')";
  mysql_query($sql,$con);
}

还要小心SQL注入,并在查询中使用用户数据时使用mysql_real_escape_string。

答案 1 :(得分:0)

好吧,你的正则表达式中的“(。*)”在找到url的开头后匹配所有内容。因此,如果您期望在一个字符串中使用多个网址,或者将昏迷分开或不合并,则将它们全部捆绑在一起。

您需要首先拆分输入,然后在拾取输入之前验证每个元素是否为有效网址。