Solved

Preg Match with for each statement for multiple records

Posted on 2015-01-10
11
111 Views
Last Modified: 2015-01-10
I am attempting to pull 20 urls and product names from each page.  I just need to fix this for each statement correctly to get more than 1 record on each page.

for ($j = 1; $j <= 1000; $j++) {

	
	preg_match('%<a href="(.*?)" class="catalogInvoiceLine">(.*?)<\/a>%',$buffer2,$matches1);
  
        $url=$matches1[$j];
	$productname=$matches1[2];
		
		
		
	$statement = $conn->prepare('INSERT IGNORE INTO urldownload (URL, Name) VALUES(:URL, :Name)');

		$params = array(':URL'=>$url,
						':Name'=>$productname);
		                $statement->execute($params); 
	

	
	}

Open in new window

0
Comment
Question by:lawrence_dev
  • 6
  • 2
  • 2
  • +1
11 Comments
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 40542263
Maybe you want preg_match_all to get more than one match?
http://php.net/manual/en/function.preg-match-all.php

As you can see the function puts an array into the third argument.  You can see what is contained in this array with var_dump().  Once you know what you've got there, you can use foreach() to iterate over the array.
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/control-structures.foreach.php

This is pretty much what you have to do every time you're working with a REGEX to extract subsets of data from a larger document.

The general design will go something like this...

1. preg_match_all($pattern, $document, $matches)
2. foreach ($matches[X] as $key => $val){ ... }

You will be able to discern an appropriate value for X after you see what you've got in the matches array.

If you want to post some test data, I'll be glad to show you a tested and working code example.
0
 

Author Comment

by:lawrence_dev
ID: 40542269
Ray,
I just need to know HOW!!!  I do not links to php.net and all of the test data BS.  You keep referring me to php.net to read, but YOU wont show me how to do it!  Really makes no sense.  As I have said before, if I could understand php.net, I would not be on this site!  

Please do not answer my questions!  Ignore them!

Thank You!
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 40542275
Please post the test data.  That's really the only thing we need to show you HOW!!
0
 

Author Comment

by:lawrence_dev
ID: 40542279
PLEASE DO NOT ANSWER MY QUESTIONS!  

So you will refer me to php.net, and they will give me complicated structure, but you have to have test data to give me structure???  I call BS!
0
 
LVL 35

Expert Comment

by:Terry Woods
ID: 40542388
@lawrence_dev, other experts won't want to help you when you're rude to those trying to help!

As Ray says, you need to change the preg_match to preg_match_all. He has even described how it should be done. If you'd like to offer an assurance that you'll be polite to the experts that are offering their help, I'd be willing to spend more time looking at your question.

Note that it's clear that you feel strongly that the way Ray is answering is not your cup of tea; it's ok if you want to decline his help, but please do so politely.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:lawrence_dev
ID: 40542409
Terry,
I really appreciate your help.  I have asked Ray politely several times to stop answering my questions - -politely!!  GaryC politely asked Ray to stop on one of my questions.  Evidently, Ray does not listen very well to requests.  It seems to be all about points.
When experts answer my questions 'simplified' like many experts do, I pick it up fast.  When you throw up complex solutions to simple requests about structure and how to do something, it confuses more than it helps.  (My issue is a great example why there are so many negative reviews of EE on Google...apparently I am not the only one with this issue.)
Some experts are great at simplifying the answer and answering the actual question.  Others like Ray pollute the water with links and complex solutions that many times really don't answer the question.

As I have stated many times, If I could understand php.net, I would not pay for EE or need your help!

Furthermore, I left EE after several years mainly because of Ray.  I came back under a new alias to get a fresh start with the experts.  He still does not listen evidently...
0
 

Author Comment

by:lawrence_dev
ID: 40542553
I've requested that this question be deleted for the following reason:

These are not solutions.  These are links to other sites that I could access myself.  A link to php.net is not a solution.
0
 
LVL 58

Accepted Solution

by:
Gary earned 500 total points
ID: 40542532
<?php
// test data
$buffer2 = 'Some other text 
<a href="link1" class="catalogInvoiceLine">Link 1</a>
<a href="link2" class="catalogInvoiceLine">Link 2</a>
<a href="link3" class="catalogInvoiceLine">Link 3</a>';

$statement = $conn->prepare('INSERT IGNORE INTO urldownload (URL, Name) VALUES(:URL, :Name)');

preg_match_all('%<a href="(.*?)" class="catalogInvoiceLine">(.*?)<\/a>%',$buffer2,$matches1);

foreach($matches1[0] as $key=>$link){
	$params = array(':URL'=>$matches1[1][$key], ':Name'=>$matches1[2][$key]);
	$statement->execute($params); 
}

Open in new window


If you want to limit to a max of 20 url's when there may be more then just add to the start of the foreach
if($key>19){break;}

Open in new window

0
 

Author Comment

by:lawrence_dev
ID: 40542549
THANK YOU GARY!!!!!   WORKED GREAT!!!  I really appreciate your help!!   Just to clarify, did I provide enough data for you to provide a response to my question?
0
 
LVL 58

Expert Comment

by:Gary
ID: 40542552
did I provide enough data for you to provide a response to my question
Yep, otherwise you wouldn't have the answer ;o)
0
 

Author Closing Comment

by:lawrence_dev
ID: 40542554
THANKS GARY!!!!  SIMPLE TO UNDERSTAND!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
PHP/Magento not logging 2 36
Access Object's Property 9 22
test if query has no results 2 19
PHP search array for either partial or complete values 3 8
Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now