2015-10-01 2 views
0

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

Это код, имеющие проблемы:

<?php 
$db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
if(isset($_POST['submit'])) 
{ 

    $count=0; 
    $url_text=$_POST['content']; 
    $urls=explode(",",$url_text); 
    if(count($urls)>20) 
    { 
     echo "Url Should not exceed 20";   
    } 
    else 
    { 

     for($j=0;$j<count($urls);$j++) 
     { 

      if($urls[$j]!='') 
      { 

       $url=$urls[$j]; 
       $ch = curl_init(); 
       curl_setopt($ch, CURLOPT_URL, $url); 
       curl_setopt($ch, CURLOPT_TIMEOUT, '180'); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($ch, CURLOPT_ENCODING, ""); 
       $cUrlResponse = curl_exec($ch); 
       $httpResponseArr = curl_getinfo($ch); 
       curl_close($ch); 

       $new=explode("<td>",$cUrlResponse); 
       for($i=1;$i<count($new);$i++) 
       { 

        $new_input=explode("</td>",$new[$i]); 
        $content_input=explode(":",$new_input[0]); 
        $content[]=trim($content_input[1]); 

       } 
       $stmt4 = $db->prepare("insert into example (data1,data2,data3) values ('$content[0]','$content[1]','$content[2]')"); 
       $stmt4->execute(); 
       $count++; 

      } 
      echo $count." Rows Inserted Successfully...."; 

     } 

    } 

} 
?> 
<form method="post" method=""> 

    <textarea name="content"></textarea> 
    <br> 
    <input type="submit" name="submit" value="Submit" /> 

</form> 
+2

На стороне записки, вы должны рассмотреть правильно отступы код. Я не знаю, как вы можете это прочитать. – Mike

ответ

1

Вы добавлять детали к вашему $content массиву, но вы никогда не сбросить этот массив, поэтому первые три значений остаются теми же, что ты затем вставьте в него db.

0

Вам необходимо сбросить массив content. Как вы его настроили, данные просто укладываются в него и не переписываются.

Добавить $content = array(); непосредственно перед вашим $new переменной.

В качестве примечания, отступы будет идти LONG путь:

<?php 
$db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

if(isset($_POST['submit'])){ 
    $count=0; 
    $url_text=$_POST['content']; 
    $urls=explode(",",$url_text); 
    if(count($urls)>20){ 
     echo "Url Should not exceed 20";   
    }else{ 
     for($j=0;$j<count($urls);$j++){ 
      if($urls[$j]!=''){ 
       $url=$urls[$j]; 
       $ch = curl_init(); 
       curl_setopt($ch, CURLOPT_URL, $url); 
       curl_setopt($ch, CURLOPT_TIMEOUT, '180'); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($ch, CURLOPT_ENCODING, ""); 
       $cUrlResponse = curl_exec($ch); 
       $httpResponseArr = curl_getinfo($ch); 
       curl_close($ch); 

       $content = array(); 
       $new=explode("<td>",$cUrlResponse); 
       for($i=1;$i<count($new);$i++){ 
        $new_input=explode("</td>",$new[$i]); 
        $content_input=explode(":",$new_input[0]); 
        $content[]=trim($content_input[1]); 
       } 
       $stmt4 = $db->prepare("insert into example (data1,data2,data3) values ('$content[0]','$content[1]','$content[2]')"); 
       $stmt4->execute(); 
       $count++; 
      } 
      echo $count." Rows Inserted Successfully...."; 
     } 
    } 
}?> 
<form method="post" method=""> 
    <textarea name="content"></textarea> 
    <br> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 
+0

все данные сохраняются пустыми. ранее он по крайней мере бежал и получал одну информацию и хранил ее несколько раз. – Payport

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