【问题标题】:php inserting preg_match_all arrayphp插入preg_match_all数组
【发布时间】:2012-05-19 18:48:22
【问题描述】:

这是一个代码,用于捕获 POST 中的所有 url 并将它们短路,然后将它们中的每一个插入 mysql 中的行中.....但是这里它是将所有 url 插入一行?? 那么我怎样才能让它捕获第一个 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);
}

【问题讨论】:

  • 你的输入是什么样的?网址之间是什么?空间?新线?

标签: php mysql arrays insert short


【解决方案1】:

在这里http://php.net/manual/en/function.preg-match-all.php 您可以阅读有关 preg_match_all 的第四个参数的信息。您可以遍历找到的网址。我改变了你的正则表达式的结尾,所以它不会抓住整行:

$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。

【讨论】:

  • 您可能需要查看preg_match_all() 的文档:$matches 的元素对应于每个带括号的子模式($matches[0] 除外,它们是完整的模式匹配项)。
【解决方案2】:

好吧,正则表达式中的“(.*)”在找到 url 的开头后匹配所有内容。因此,如果您希望一个字符串中有多个 url,或者逗号分隔或其他,它们将被捆绑在一起。

您需要能够先拆分您的输入,然后验证每个元素是一个有效的 url,然后再将其取出以进行插入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2018-03-04
    • 2012-05-19
    • 1970-01-01
    • 2015-10-11
    • 2017-07-08
    相关资源
    最近更新 更多