parsen op comma in url??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ron de man

ron de man

11/06/2008 10:11:00
Quote Anchor link
Hallo,

Ik heb een uitdaging (althans voor mij).

Ik krijg op m'n server de volgende http aangeboden op een in.php script.

http://www.mijnserver.nl/in.php?BOM,,,,,,,,,,,,,,,,,,,,,,,,,,EOM

achter begin of message BOM, staan 30 velden en dan End of message.

Nu zou ik graag deze string parsen en van elk gegeven achter de komma een variable maken zodat ik het verder kan verwerken. De gegevens BOM en EOM kunnen achterwege worden gelaten.
Detail is dat er variabele data lengtes tussen de komma's kunnen staan. dat kan varieren van niks tot 1 cijfer of 16 letters en elke zending weer anders.

Ik zelf heb een opzet met (substr(($key),41,1)) geprobeerd maar dat werkt niet ivm de variabele lengte van de string.

Ik hoop dat mijn uitdaging iemand triggert om een opzet te maken of mij in de goede richting te zetten.

alvast bedankt,

Ron.
 
PHP hulp

PHP hulp

03/01/2025 10:38:04
 
- SanThe -

- SanThe -

11/06/2008 10:18:00
Quote Anchor link
Staat het niet in een variabele?
http://www.mijnserver.nl/in.php?varnaam=BOM,,,,,,,,,
 
Hipska BE

Hipska BE

11/06/2008 10:27:00
Quote Anchor link
$messages = explode(',',$string);
 
Jurgen assaasas

Jurgen assaasas

11/06/2008 10:28:00
Quote Anchor link
Hipska schreef op 11.06.2008 10:27:
$messages = explode(',',$string);


en dan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

foreach($messages AS $message)
{

//Doe iets
}


?>
 
Ron de man

ron de man

11/06/2008 10:29:00
Quote Anchor link
Dat is snel,

Nee het is zoals ik het heb geschreven. Kaal achter de url http://www.mijnserver.nl/in.php?BOM,080608,133230,5128.3680,N,0336.2895,E,S,0,0,M,TST,173,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06, EOM

Dit is even een stukje voor beeld dan spreekt het mogelijk meer.
Het wordt namelijk door een GPS ontvanger via gprs ge urlforward naar m'n server en aan geboden aan in.php.

De enige 2 constanten die er in zitten zijn dat voor elke data een komma staat en dat er 30 variabelen in staan achter elke comma.

Alvast bedankt voor de vlotte reactie.
 
Jurgen assaasas

Jurgen assaasas

11/06/2008 10:33:00
Quote Anchor link
Ja, maar je moet hem in PHP benaderen als een variabelen je zult dus moeten zorgen dat het iets wordt als: ?var=BOM,,,

Anders kun je hem niet benaderen met PHP.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Hipska BE

Hipska BE

11/06/2008 10:37:00
Quote Anchor link
Toch wel hoor Jurgen, doe maar eens print_r($_GET); als je hem daar ziet, kan je er aan ;-)
 
Ron de man

ron de man

11/06/2008 10:44:00
Quote Anchor link
Hallo,

Jurgen en Hipska en SanThe,

ik heb even zitten googelen op de explode functie en dat lijkt me wel wat.

Als ik print_r($_GET) gebruik dan zie ik inderdaad de string.
Ik denk dat e.a. wel eens zou kunnen werken.
Ik ga e.a. eens uit testen op de data.

Bedankt en ik laat het wel even weten.

grtz Ron.
 
- SanThe -

- SanThe -

11/06/2008 10:47:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$var = array_keys($_GET);
$explode = explode(',', $var[0]);
foreach($explode as $value)
{

    echo '<br />';
    echo $value;
}


?>
 
Hipska BE

Hipska BE

11/06/2008 10:54:00
Quote Anchor link
Net iets korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$explode = explode(',', key($_GET));
foreach($explode as $value){
    echo '<br />';
    echo $value;
}


?>
 
Ron de man

ron de man

11/06/2008 11:41:00
Quote Anchor link
OK.

Heb ik eens even wat zitten testen.

Het werkt laten we dat voorop stellen.

Wat ik alleen mis het definieren van de variablen en er is een probleem met de punt.

Omdat ik wederom aan het einde een variable nodig heb om het door te sturen in de juiste volgorde. samengesteld in $HttpData

Ik heb zelf eens een kwartje gegooid in de google machine en ben op dit ruwe stuk uit gekomen na wat mixen.

list($Im, $Leeg, $dat, $time, $long, $N, $lat, $E, $status, $naam, $divid, $heading, ) = explode(',', key($_GET));

$HttpData = $im$long$lat$naam..enz.

als ik deze laat lopen krijg ik een mooie string om te verzenden.

De genoemde punt echter is een underscore _ geworden. Weet iemand hoe dat komt en wat er aan te doen is.
Natuurlijk sta ik open voor beter (kortere Hipska ;) ) oplossingen van de list en explode methode.

In iedergeval bedankt voor het vlotte op weg helpen. Top.

P.S. hoe kan ik die mooie vakjes maken zoals jullie voor de broncode.
 
Hipska BE

Hipska BE

11/06/2008 13:11:00
Quote Anchor link
Ik snap niet helemaal wat je bedoeld, kan je eens je code plaatsen wat je nu hebt?

en code opmaak hokjes verkrijg je door < ?php en ?> te typen
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
 
Ron de man

ron de man

11/06/2008 13:50:00
Quote Anchor link
Dit is wat ik tot nu toe heb gecreëerd. Er moeten nog wat variabelen bij maar dat komt wel eerst werkend en dan verfijnen.
Elke list variabele wordt ge set.
Dan de $HttpData geformeerd om een juste curl te kunnen verzenden.

De getallen 5228.3680 en 0436.2895 worden echter in de echo 5228_3680 en 0436_2895.
Dat ben ik nu met de substr() aan het recht breien maar dat lijkt mij niet echt elegant.
Ik hoop dat dit duidelijker is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$ForwardHost
="localhost";
$ForwardScript="/in.php?";
$ForwardPort=80;    


/********************************************************************************************
BOM,010101010101010,,080608,133230,5228.3680,N,0436.2895,E,S,0,0,M,Test,I-blue,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06,EOM
*/

// Ontvangen en Parsen van bovenstaande string:


ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

list($BOM, $id, $fixNR, $date, $time, $lat, $NRSat, $long, $EW, $S_M, $NR_sat, $speed, $type, $naam, $Div_id, $head, $Leeg, $alti, ) = explode(',', key($_GET));

$HttpData =
        'longitude='.(substr(($long),0,2)).'.'.(substr(($long),2,2)).(substr(($long),5,4))
    
.
'&latitude='.(substr(($lat),0,2)).'.'.(substr(($lat),2,2)).(substr(($lat),5,4))
        .
'&altitude=0'//.(substr(($alti),0,2)).'.'.(substr(($alti),4,1))
        .'&speed='.$speed
        .'&heading='.$head
        .'&date='.$date
        .'&time='.$time
        .'&imei='.(substr(($id),0,3)).(substr(($id),4,3));    
                
echo $HttpData. '<br />';            

// Weer weg zenden......===>

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "$ForwardHost$ForwardScript$HttpData");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
$file_contents = curl_exec($ch);
curl_close($ch);
?>
 
Hipska BE

Hipska BE

11/06/2008 14:12:00
Quote Anchor link
Jij wil . vervangen door _ ?

$string = str_replace('.','_',$long); doet de truck ;)
 
Boris Mattijssen

Boris Mattijssen

11/06/2008 14:30:00
Quote Anchor link
Hipska schreef op 11.06.2008 14:12:
Jij wil . vervangen door _ ?

$string = str_replace('.','_',$long); doet de truck ;)


volgens mij andersom, dus:
$string = str_replace('_','.',$long);

;-)
 
Ron de man

ron de man

11/06/2008 14:31:00
Quote Anchor link
Nee dat is niet wat ik wil doen.

Wat er gebeurt weet ik niet maar ik zie dat door het php script de . die in de string staan in de getallen ,5228.3680, en ,0436.2895, ineens??????

in 5228_3680 en 0436_2895 zijn veranderd.
 
Boris Mattijssen

Boris Mattijssen

11/06/2008 14:38:00
Quote Anchor link
ja dus jij wilt dat die 5228_3680 weer 5228.3680 oftuwel zoals al erder verteld:

Stel " $long " bevat de waarde " 5228_3680 ".

Dan doe je dus: $string = str_replace('_','.',$long);

en dan bevat " $string " ineens de waarde " 5228.3680 ".

(makkelijker kan ik het toch niet uitleggen? :P)
 
Ron de man

ron de man

11/06/2008 14:58:00
Quote Anchor link
Ik denk dat we langs elkaar heen praten. We hebben het over het zelfde.
communiceren is afstemmen op de ontvanger. Kennelijk heb ik dat niet goed gedaan.

Ik begrijp heus wel dat ik dat met die str_replace weer terug kan zetten.

Maar laat ik het eens anders vragen, hoe kan het dat de . in een underscore verandert?

Wat ik eigenlijk probeer te zeggen hoe kan ik voorkomen dat dat gebeurd.
PHP is nieuw voor mij, hoe meer ik begrijp deste sneller ben ik er op los.
Mogelijk een beetje pietluttig van mij om dat te willen maar elke regel code is in mijn ogen te veel. Ik denk dat het dan meer lapmiddel op lapmiddel op lapmiddel wordt en als er dan wat verkeerd gaat zit je met een slechte basis voor fout analyze.

Maar wel bedankt voor je oplossing hoor ik bedoel het zeker niet negatief.
 
Hipska BE

Hipska BE

11/06/2008 15:17:00
Quote Anchor link
echo key($_GET); // is hij hier al met een underscore?
 
Ron de man

ron de man

11/06/2008 15:33:00
Quote Anchor link
Ja, als ik aan het begin van m'n script echo key($_GET); zet dan zijn alle punten veranderd in _ underscore.

Dat betekend dat het tijdens het verzenden gebeurd?

ik verzend uit firefox de volgende url.
http://www.server.nl/in.php?BOM,010101010101010,,080608,133230,5228.3680,N,0436.2895,E,S,0,0,M,Test,I-blue,113,30,01.2,12.73,1864,204,4,3,1,GPRS,,,,06,EOM
 
- SanThe -

- SanThe -

11/06/2008 15:41:00
Quote Anchor link
Dat komt doordat je geen variabele hebt opgegeven in de get.

Edit: Typo.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.