2016-01-19 4 views
3

Я пытаюсь вставить несколько URL-адресов (url_array) в базу данных.Как сделать непрерывную вставку mysql, используя foreach?

Во-первых, мне нужно получить некоторую информацию из URL-адресов (название URL, url-изображения, ... decsription). Я делаю это с помощью SimpleHtmlDom.

Поэтому я помещаю это в петлю foreach. Я надеюсь, что он вставляет после каждой итерации до конца массива.

Если есть неправильный URL-адрес, он должен перейти к следующему URL-адресу массива.

Я также хочу, чтобы в конце (последней итерации) некоторое сообщение об успешном json было проанализировано обратно через jquery.

Для кода, который у меня ниже, он только вставляет иногда только 2 или 3 из которых в массиве еще больше URL-адресов.

Вот мой код:

$txturls = $_POST['bulkurls']; 
      $urlsArray = array_map('trim', explode(',', $txturls)); 
      //var_dump($urlsArray); 
      $i = 0; 
      $len = count($urlsArray); 
      foreach($urlsArray as $url){ 
      $curl = curl_init($url); 
      curl_setopt($curl, CURLOPT_NOBODY, true); 
      $result = curl_exec($curl); 
      if ($result !== false) 
      { 
       $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
       if ($statusCode == 404) 
       { 
       $checkExist = "URL Not Exists"; 
       } 
       else 
       { 
       $checkExist = "URL Exists"; 
       } 
      } 
      else 
      { 
       $checkExist = "URL not Exists"; 
      } 
     if($checkExist === "URL Exists"){ 

     $html = SimpleHtmlDom::file_get_html($url); 
      foreach($html->find('title') as $element) 
      { 
       $urltitle = $element->plaintext; 
      } 
      $tags = get_meta_tags($url); 
      $description = $tags['description']; 
      if(strlen($description) < 1){$description = $urltitle .' '.'check title';}; 
        $images = array(); 
     foreach($html->find('meta[property=og:image]') as $element) { 
     if(!preg_match('/blank.(.*)/i', $element->content) && filter_var($element->content, FILTER_VALIDATE_URL)) 
      { 
      $images[] = url_to_absolute($linkurl, $element->content); 
      } 

     } 

     foreach ($images as $ext){ 
      //$imagesize = getimagesize(''.$ext.''); 
      if (pathinfo($ext, PATHINFO_EXTENSION)) { 
      $image = "<img src=\"$ext\" alt=\"$urltitle\">"; 
      break; 
     } 
     } 

    $linkurl = $url; 
    $checkIfUrlExist = $this->_modellinks->checkUrlExist($linkurl); 
     if($checkIfUrlExist == false){ 
    $this->_modellinks->addBulkLinks($data['log_username'], $ipaddress, $linkurl, $urltitle, $subafrolinks, $keywords, $description, $image); 

     } 
    } else { 
     continue; 
    } 
    if ($i == $len - 1) { 
    // last 
    $output = json_encode(array('type'=>'message', 'text' => 'Thanks for your submission! Your URL has been submitted successfully And its under review . <strong>You will be notified when your post is published online. This usually takes less than 1 hour.<br> Here is your preview link')); 
      die($output); 
} 
$i++; 

    } 

ответ

0

Так как вставка 2-3 адреса, это означает, что ваши вставку запросы, а также цикл Еогеасп работает хорошо.

Когда вы говорите, что в массиве осталось больше URL-адресов, вы говорите о $ urlsArray?

Вы проверили, установлен ли флаг '$ checkExists' для оставшихся URL-адресов? Чтобы сделать это, попробуйте нажать эти URL, где $ checkExists == 'URL Exists' в новом массиве $ arGoodUrl, а затем работать над ним. Тогда вы получите лучшую идею.

+0

Я понимаю, что вы имеете в виду. И да, может быть, я должен сделать предварительную проверку URL-адресов, чтобы получить то, что существует. –

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