String uitlezen
Dag medescripters,
Ik heb weer eens een vraagje: Ik laat nu een IPB-forum authenticeren op een andere website via een cURL-scriptje. Dit omdat we daar geen toegang krijgen tot FTP/Database etc. en zo dus toch een koppeling kunnen maken. Dit werkt allemaal prima, alleen wil ik nu de naam van de gebruiker uitlezen, die na het inloggen op de WEBSITE wordt weergeven. Dus als je inlogt op de website staat er dit:
Of in HTML:
Nu wil ik deze naam lezen en in een variabele zetten via cURL. Ik heb dit al voor de login:
Dus de hele HTML van die pagina staat al in $content, alleen nu wil ik daar uitlezen wat er tussen en <br> staat.
Hopelijk kan iemand mij helpen. Alvast bedankt!
Groeten,
Bas
Ik heb weer eens een vraagje: Ik laat nu een IPB-forum authenticeren op een andere website via een cURL-scriptje. Dit omdat we daar geen toegang krijgen tot FTP/Database etc. en zo dus toch een koppeling kunnen maken. Dit werkt allemaal prima, alleen wil ik nu de naam van de gebruiker uitlezen, die na het inloggen op de WEBSITE wordt weergeven. Dus als je inlogt op de website staat er dit:
Of in HTML:
Nu wil ik deze naam lezen en in een variabele zetten via cURL. Ik heb dit al voor de login:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
if ( ! $this->member_data['member_id'] )
{
$ch = curl_init();
//form action
curl_setopt($ch, CURLOPT_URL, 'http://www.itp-pv.nl/secure');
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
//input-names
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username='.$username.'&password='.$password);
//link naar het bestand om te downloaden na de login
curl_setopt($ch, CURLOPT_URL, 'http://www.itp-pv.nl/secure/index.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec ($ch);
curl_close ($ch);
if(strstr($content, 'Welkom:'))
{
$member = array(
'name' => $username,
'password' => $password,
'members_display_name' => $username,
'member_group_id' => 3,
'joined' => time(),
'ip_address' => $_SERVER['REMOTE_ADDR'],
'time_offset' => 1,
'coppa_user' => 0,
'members_auto_dst' => 1,
'allow_admin_mails' => 0,
'hide_email' => 1,
);
//-----------------------------------------
// Create the account
//-----------------------------------------
$member = IPSMember::create( array( 'members' => $member), FALSE, FALSE, FALSE );
}
else ....
{
$ch = curl_init();
//form action
curl_setopt($ch, CURLOPT_URL, 'http://www.itp-pv.nl/secure');
//value 1: vraag de pagina op
//value 0: download het bestand
curl_setopt ($ch, CURLOPT_POST, 1);
//input-names
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username='.$username.'&password='.$password);
//link naar het bestand om te downloaden na de login
curl_setopt($ch, CURLOPT_URL, 'http://www.itp-pv.nl/secure/index.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec ($ch);
curl_close ($ch);
if(strstr($content, 'Welkom:'))
{
$member = array(
'name' => $username,
'password' => $password,
'members_display_name' => $username,
'member_group_id' => 3,
'joined' => time(),
'ip_address' => $_SERVER['REMOTE_ADDR'],
'time_offset' => 1,
'coppa_user' => 0,
'members_auto_dst' => 1,
'allow_admin_mails' => 0,
'hide_email' => 1,
);
//-----------------------------------------
// Create the account
//-----------------------------------------
$member = IPSMember::create( array( 'members' => $member), FALSE, FALSE, FALSE );
}
else ....
Dus de hele HTML van die pagina staat al in $content, alleen nu wil ik daar uitlezen wat er tussen en <br> staat.
Hopelijk kan iemand mij helpen. Alvast bedankt!
Groeten,
Bas
Gewijzigd op 05/01/2011 15:29:49 door Bas C
Regular Expressions!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$html = <<<END
<b>Welkom: </b>
Bas Cooijmans
<br>
END;
if (preg_match('{<b>Welkom: </b>([^<]+)<br>}m', $html, $match))
{
// trim vanwege die spatie die ervoor staat
// html_entitity_decode, want je weet niet hoe ze letters als é hebben opgeslagen
// en het maakt van een spatie, die trim opruimt :)
// charset weet ik niet, ik denk ISO-8859-1, dus dan kan je die leeg laten
// copy-paste je dit van PHPhulp, dan moet je >> , ENT_COMPAT, 'utf-8' <<
// toevoegen want PHPhulp is UTF-8.
$naam = trim(html_entity_decode($match[1]));
echo $naam;
}
?>
$html = <<<END
<b>Welkom: </b>
Bas Cooijmans
<br>
END;
if (preg_match('{<b>Welkom: </b>([^<]+)<br>}m', $html, $match))
{
// trim vanwege die spatie die ervoor staat
// html_entitity_decode, want je weet niet hoe ze letters als é hebben opgeslagen
// en het maakt van een spatie, die trim opruimt :)
// charset weet ik niet, ik denk ISO-8859-1, dus dan kan je die leeg laten
// copy-paste je dit van PHPhulp, dan moet je >> , ENT_COMPAT, 'utf-8' <<
// toevoegen want PHPhulp is UTF-8.
$naam = trim(html_entity_decode($match[1]));
echo $naam;
}
?>
dus je wilt weten wat er tussen
<b>Welkom: </b>
en
<br>
staat?
voor meer info, zoek de preg_match functie op :)
<b>Welkom: </b>
en
<br>
staat?
Code (php)
1
2
3
4
2
3
4
<?php
preg_match("/<b>Welkom: <\/b> (.*?)<br>/", $string, $naam);
$naam = $naam[1];
?>
preg_match("/<b>Welkom: <\/b> (.*?)<br>/", $string, $naam);
$naam = $naam[1];
?>
voor meer info, zoek de preg_match functie op :)
Bedankt, het werkt nu :) Ik dacht al dat het het makkelijkst was met een RegEx, maar ik ben ongelofelijk slecht in die dingen :P




