0

これは、POST 内のすべての URL をキャッチし、それらを短くして、それぞれを mysql に挿入するコードです ..... しかし、ここでは、すべての URL を 1 行に挿入しています ?? では、最初の URL をキャッチしてデータベースに挿入し、2 番目の 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);
}
4

2 に答える 2

1

ここhttp://php.net/manual/en/function.preg-match-all.phpで、preg_match_all の 4 番目のパラメーターについて読むことができます。見つかった URL をループできます。正規表現の末尾を変更したため、行全体がキャッチされません。

$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 を使用してください。

于 2012-05-11T07:03:05.347 に答える
0

正規表現の「(.*)」は、URL の先頭を検出した後のすべてに一致します。したがって、1 つの文字列に複数の URL が含まれている場合や、コンマで区切られている場合など、それらはすべてまとめてバンドルされます。

最初に入力を分割してから、各要素が有効な URL であることを検証してから挿入できるようにする必要があります。

于 2012-05-11T07:05:44.580 に答える