2012-05-11 2 views
0

это код, чтобы поймать все URL-адреса в POST и закоротить их, а затем вставить каждый из них в строке в mysql ..... но здесь он вставляет весь URL-адрес в одну строку? , так как я могу заставить его поймать первый url, а затем вставить его в базу данных, а затем вернуться на второй и сделать то же самое .. ???php inserting preg_match_all array

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

s/pattren/pattern – ThiefMaster

+0

Как выглядит ваш вход? Что между URL-адресами? пространства? новые линии? – Gavriel

ответ

0

ну, "(. *)" В вашем регулярном выражении соответствует всем, после того как он нашел начало URL-адреса. поэтому, если вы ожидаете множественные URL-адреса в одной строке или комы разделены или нет, все они будут объединены вместе.

Необходимо сначала разбить вход, а затем подтвердить, что каждый элемент является действительным URL-адресом, прежде чем вы его забираете для вставки.

1

Здесь http://php.net/manual/en/function.preg-match-all.php вы можете прочитать о 4 параметра preg_match_all. Вы можете перебрать найденные 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 при использовании пользовательских данных в запросах.

+0

Возможно, вы захотите проверить документацию на ['preg_match_all()'] (http://php.net/manual/en/function.preg-match-all.php): элементы '$ matches' соответствуют каждому в скобках subpattern (кроме '$ matches [0]', которые соответствуют полному шаблону). – eggyal

+0

та же проблема ничего не меняет – maj

Смежные вопросы