Вставка php в preg_match_all

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

$urlinput=mysql_real_escape_string($_POST['url']); $pattren="/(http:\/\/)[a-zA-Z0-9]*\.[az]*(.*)|(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); } 

Solutions Collecting From Web of "Вставка php в preg_match_all"

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

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

Здесь 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]*\.[az]*(.*)|(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 при использовании пользовательских данных в ваших запросах.