2012-06-21 2 views
0

Я работаю над этим скриптом последние пару дней и не могу найти способ вставить данные в MySQL. Я начинаю, когда речь заходит о PHP/MYSQL, и раньше пишут несколько простых скриптов. Я могу отбросить скребковые данные и не получать сообщений об ошибках, но когда я проверяю phpmyadmin, запрос не работает (результаты не вводятся в базу данных).Вставка скребковых данных с использованием php curl в MySQL

Вот код, который я работал на

require ("mysqli_connect.php"); 
include('../simple_html_dom.php'); 

ini_set('user_agent', 
    'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'); 

// get DOM from URL or file 
$html = file_get_html('http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630&via=lhn'); 
// find all images 

foreach($html->find('#items') as $a)  
    echo $a->innertext .'<br>'; 

foreach($html->find('span.price') as $p) 
    echo $p->innertext .',';  

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')"; 
$r = @mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());; //Run the Query. 
+0

Спасибо, Ник, даже боролся с этим! –

+1

Попробуйте повторить «$ q» и запустить это в phpmyadmin; который покажет, есть ли ошибка с вашим SQL, или если это связано с подключением к базе данных. – andrewsi

+1

Возможно, вы захотите вставить $ a-> innertext и $ p-> innertext, если они содержат допустимые значения. –

ответ

2

В примере кода $ а и $ р являются объекты, попробуйте вместо этого:

$a = ''; 
foreach($html->find('#items') as $item) { 
    $a.= $item->innertext .'<br>'; 
} 

$p = ''; 
foreach($html->find('span.price') as $price) { 
    $p.= $price->innertext.',';  
} 

Далее удалите @ из @mysqli_query, постарайтесь не использовать это, когда-либо, попытайтесь правильно поймать/обработать ошибки.

Далее, пожалуйста, несколько минут, чтобы исследовать paramaterized запросы и PDO, не принимают неизвестный вход (с 3 сторон не менее) и ввести их прямо в ваш SQL:

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')"; 

т.е. Дон 't do that^

Наконец, вы, вероятно, хотите проверить ответ от get.

Надеюсь, что это поможет!

+0

Привет, Сомедев, спасибо, что воспользовался тайм-аутом, чтобы рассмотреть мой вопрос и предложить решение. Где вы определили переменные $ a и $ p, следует ли оставить пробел между кавычками? Кроме того, я рассмотрел параметризованные запросы и PDO, как вы предполагали, но просто не можете обойти его, поскольку я большой новичок. Как мне это реализовать? Это именно то, что я хочу сделать: несколько запросов на вставку. Еще раз спасибо. –

1

Вы подавляете ошибку, помещая @ перед тем mysqli_query

Попробуйте изменить это:

$q = "INSERT INTO jeans ('image', 'price') VALUES ('$a', '$p')"; 
mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());; //Run the Query. 
+0

Hi edwardmp. Спасибо, что ответили так быстро. Теперь я удалил знак @ и реализовал вышеописанный код somedev, но теперь это просто эхо-сообщение. Ошибка обновления запроса: –

0

Я думаю, я знаю, что это неправильно.

Если вы просто использовать

echo file_get_contents("http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630"); 

(или просто asos.com, не имеет значения), вы заметите, что вы всегда будете получать обратно:

К сожалению, мы можем» т найти что страница или что-то пошло не так ...

вернуться назад или попробовать здесь:

женщин мужчин домой службу

Поскольку ни один из указанных вами элементов на этой странице, вы ничего не вернете.

Мое предположение, что asos.com предотвращает выскабливание со своего сайта.

+0

Возможно, вы не подделываете свой пользовательский агент. Если вы посмотрите на приведенный выше код, я установил свой пользовательский агент в Mozilla, поскольку они позволяют им очищать свой сайт. Поэтому я могу получить информацию, но я просто не могу ее вставить в мою базу данных :( –

+0

проверить мой другой пост. Трэвис Пессетто скорректировал его, чтобы заменить обратные такты одинарными кавычками. – edwardmp

+0

Непосредственно определить пользовательский агент в код, отличный от .ini. Используйте что-то вроде этого: '$ context = stream_context_create(); stream_context_set_params ($ context, array ('user_agent' => 'UserAgent/1.0'); file_get_html ('http: // www. google.com/ ', 0, $ context); ' – edwardmp

0

Не забывайте использовать функцию mysql_real_escape_string, чтобы избежать проблем с сохранением содержимого. Пример ниже.

$query2 = sprintf("INSERT INTO jeans(image, price) 
       VALUES ('%s','%s')",mysql_real_escape_string($a), 
            mysql_real_escape_string($p)) 
mysql_query($query2) or die(mysql_error()."<br />".$query2); 
Смежные вопросы