[PHP]Uitlezen pagina content na POST

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XxKr0n3xX
  • Registratie: Januari 2004
  • Niet online
Hoi Tweakers,

Ik zit met een klein probleem. Ik ben bezig met een applicatie die gegevens vanuit een MySQL database via een functie naar een handler script toe POST. Het versturen van deze gegevens gaat allemaal goed.

De pagina waar ik naar toe POST geeft bepaalde gegevens weer die ik weer moet opslaan als referentiepunt.
Onderstaand een voorbeeld van de content van de pagina waar ik naar toe POST.

company_login="COMPANYNAME"
company_password="COMPANYPASSWORD"
company_contact="Contact info"
id="12345"

Bovenstaande gegevens worden geretourneerd na een post waarbij <b>id</b> het referentienummer is wat ik op wil slaan. De content van bovenstaande pagina wordt in een variabele opgeslagen.
Wat heb ik zelf ondernomen:

Ik heb de variabele geprobeerd te splitten op basis van een newline.
Waarbij $var de geretourneerde pagina content is.

Voorbeeld:

[code=php]$array = split("[\n]+",$var);
foreach($array as $key => $value) {
print $key . " heeft de waarde " . $value . "<br>";
}[/code=php]
Dit gaat ok en alle regels komen netjes in het array te staan. Mijn probleem is echter het volgende. Ik wil alles behalve id="random nummertje" uit de array of desnoods de variabele slopen zodat ik alleen dat id nummer over houdt. Kan iemand mij de juiste richting in duwen?

dankjewel.

Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Nu online
Als ik je nu goed begrijp wil je toch gewoon een controle zodat de waarde van id niet afgedrukt wordt? Wat dacht je van een
PHP:
1
if($key != 'id')
toevoegen aan je code :? En wil je hem uit de array verwijderen kun je volgens mij wel de unset() functie gebruiken.

Wat heb je zelf al geprobeerd dan?

[ Voor 26% gewijzigd door Marcj op 10-07-2007 13:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

XxKr0n3xX schreef op dinsdag 10 juli 2007 @ 13:54:
Ik wil alles behalve id="random nummertje" uit de array of desnoods de variabele slopen zodat ik alleen dat id nummer over houdt.
Kun je niet splitten op het =-teken ipv de "\n"? Dan heb je je id-nummer in de laatste waarde van de array staan. Of snap ik je nu niet goed?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wil je "id=1234" of "1234"? In het eerste geval neem je $array[3], in het tweede geval kun je met preg_match aan de slag.

Je gebruikt nu trouwens split, terwijl je helemaal geen regexp nodig hebt (of komen er soms meerdere newlines voor?). In dit geval is explode eenvoudiger en sneller (hoewel het verschil zeer miniem is).

Acties:
  • 0 Henk 'm!

  • XxKr0n3xX
  • Registratie: Januari 2004
  • Niet online
Marcj schreef op dinsdag 10 juli 2007 @ 13:58:
Als ik je nu goed begrijp wil je toch gewoon een controle zodat de waarde van id niet afgedrukt wordt? Wat dacht je van een
PHP:
1
if($key != 'id')
toevoegen aan je code :? En wil je hem uit de array verwijderen kun je volgens mij wel de unset() functie gebruiken.

Wat heb je zelf al geprobeerd dan?
Het afdrukken van de array was slechts ter illustratie. En de vraag is ook of de geretourneerde waarde van de pagina in een array plaatsen de juiste keuze is.

Wat ik wil is het volgende. Ik post gegevens naar een handler script toe. Dit handler script verwerkt de gegevens in de database en retourneerd niet alleen de door mij gepostte gegevens maar ook een gegeven genaamd id. De gegevens worden in een variabele gestopt en zien er als volgt uit:

gegevenA="waardeA"
gegevenB="waardeB"
gegevenC="waardeC"
id="waardeID"
gegevenD="waardeD"
etc.

Dit is een lijst van zo'n 20 regels.

Wat heb ik geprobeerd:
Wat ik vervolgens bedacht has was de gehele variabele op te slurpen in een array en de boel te splitten op basis van een newline. Vandaar het split statement. Mijn volgende stap zou zijn het terug te vinden van de string "id" binnen de array en daar dan de value van op te halen.

Waar ik echter tegen aanloop is dat er op dit moment geen multidimensionele array wordt gecreerd maar slechts een single dimensional array. Het aanspreken van id gaat dus niet. Wat ik me dus afvraag is of dit een verstandige manier van werken is.
Verwijderd schreef op dinsdag 10 juli 2007 @ 14:00:
[...]


Kun je niet splitten op het =-teken ipv de "\n"? Dan heb je je id-nummer in de laatste waarde van de array staan. Of snap ik je nu niet goed?
Dat zou alleen kunnen als ID de laatste regel is in de geretourneerde content en dat is dus variabel. Het ene moment worden er meer gegevens vanuit ons verstuurd en dan weer minder. Het aantal regels en dus ook de lokatie van ID is dus variabel. Vandaar dat ik er in dacht te zoeken maar daarna ben ik het even kwijt.
GlowMouse schreef op dinsdag 10 juli 2007 @ 14:07:
Wil je "id=1234" of "1234"? In het eerste geval neem je $array[3], in het tweede geval kun je met preg_match aan de slag.

Je gebruikt nu trouwens split, terwijl je helemaal geen regexp nodig hebt (of komen er soms meerdere newlines voor?). In dit geval is explode eenvoudiger en sneller (hoewel het verschil zeer miniem is).
Het betreft een variabel aantal newlines. Dit hangt af van de grootte van mijn post. Als ik zou kunnen aanwijzen welke lokatie ID zou hebben in een single dimensional array dan had ik het ook met een while loop kunnen doorlopen. Het gaat me hier om de waarde 1234 de indicatie id= kan me gestolen worden en heb ik alleen nodig als aanknopingspunt.

Bedankt voor de snelle replies.

Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Nu online
XxKr0n3xX schreef op dinsdag 10 juli 2007 @ 14:25:
[...]
Waar ik echter tegen aanloop is dat er op dit moment geen multidimensionele array wordt gecreerd maar slechts een single dimensional array. Het aanspreken van id gaat dus niet. Wat ik me dus afvraag is of dit een verstandige manier van werken is.
Natuurlijk kan dit wel, maar als je dit als POST values doorstuurd maakt PHP er volgens mij gewoon standaard een multi-dimensional array van genaamd $_POST. Deze kun je dan toch gewoon gebruiken?

Als je het op de huidige manier wilt moet je elke value weer splitten op het eerste '='-teken, en dan kijken wat de waarde van de eerste helft is. Of je kunt controleren of de string begint met 'id='.

[ Voor 3% gewijzigd door Marcj op 10-07-2007 14:44 ]


Acties:
  • 0 Henk 'm!

  • XxKr0n3xX
  • Registratie: Januari 2004
  • Niet online
Marcj schreef op dinsdag 10 juli 2007 @ 14:42:
[...]

Natuurlijk kan dit wel, maar als je dit als POST values doorstuurd maakt PHP er volgens mij gewoon standaard een multi-dimensional array van genaamd $_POST. Deze kun je dan toch gewoon gebruiken?

Als je het op de huidige manier wilt moet je elke value weer splitten op het eerste '='-teken, en dan kijken wat de waarde van de eerste helft is. Of je kunt controleren of de string begint met 'id='.
Ik POST gegevens naar een website. Op basis hiervan wordt er output gegenereerd op de pagina waar ik naar toe POST. In deze data wordt een regel toegevoegd genaamd ID. Deze regel maakt in de eerste plaats geen deel uit van mijn eigen POST deze regel wordt aangemaakt door de pagina waar ik informatie naar toe post. Hoe kan ik deze benaderen in de $_POST? Volgens mij dus niet omdat het ID gegeven geen deel uit maakt van mijn initiele post.

Wat ik dus vraag is:

Ik heb een zooi regels met gegevens iedere regel begint met een naam dan een = teken en daarna de value tussen quotes. Ik wil alleen de waarde achter id= ophalen. Is hier een snellere en makkelijkere oplossing voor dan die ik aan het proberen ben?

Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Nu online
Ik heb geen idee hoe je het nu doet (ik volg je verhaal niet helemaal), maar als je nu gewoon eens print_r($_POST); doet, dan kun je zien welke post-informatie je nu naar je script toestuurd. Als het goed is decodeerd deze alles al voor je en kun je dat nummer gewoon opvragen via $_POST['id'].
GlowMouse schreef op dinsdag 10 juli 2007 @ 15:51:
[...]

$_POST heeft hier niets mee te maken omdat het script dat TS maakt niet het script is dat naartoe gepost wordt, maar het script dat een POST-request doet. Gebruik van preg_match lijkt me hier echt de aangewezen methode, door te exploden en daarna nog een keer te exploden wordt je code niet overzichtelijk.
Ah, dank je voor de uitleg, nu snap ik eindelijk wat het probleem is. Begrijpend lezen gaat mij vandaag blijkbaar niet zo goed af :X

Dan lijkt twee exploden mij de makkelijkste oplossing :)

[ Voor 51% gewijzigd door Marcj op 10-07-2007 15:58 . Reden: ok,ok ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Marcj schreef op dinsdag 10 juli 2007 @ 15:17:
Ik heb geen idee hoe je het nu doet (ik volg je verhaal niet helemaal), maar als je nu gewoon eens print_r($_POST); doet, dan kun je zien welke post-informatie je nu naar je script toestuurd. Als het goed is decodeerd deze alles al voor je en kun je dat nummer gewoon opvragen via $_POST['id'].
$_POST heeft hier niets mee te maken omdat het script dat TS maakt niet het script is dat naartoe gepost wordt, maar het script dat een POST-request doet. Gebruik van preg_match lijkt me hier echt de aangewezen methode; door te exploden en daarna nog een keer te exploden wordt je code niet overzichtelijk.
Dan lijkt twee exploden mij ook de beste oplossing
:'(

[ Voor 5% gewijzigd door GlowMouse op 10-07-2007 15:54 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Marcj, XxKr0n3xX wil juist de response handig parsen. ;)
XxKr0n3xX schreef op dinsdag 10 juli 2007 @ 15:14:
Ik heb een zooi regels met gegevens iedere regel begint met een naam dan een = teken en daarna de value tussen quotes. Ik wil alleen de waarde achter id= ophalen. Is hier een snellere en makkelijkere oplossing voor dan die ik aan het proberen ben?
Het opbouwen van een mooie array, of het werken met substr() icm strpos(), of desnoods preg_match() gebruiken (om maar 3 voor de hand liggende methodes te noemen) hoeft maar een tiental seconden te kosten als je de syntax kent.

Preg_match() is zo'n beetje de kortste methode, maar als je voor de array aanpak gaat heb je een variabele welke tenminste makkelijk te gebruiken is als je nog eens een van de andere waarden nodig hebt.
GlowMouse schreef op dinsdag 10 juli 2007 @ 15:51:
Gebruik van preg_match lijkt me hier echt de aangewezen methode, door te exploden en daarna nog een keer te exploden wordt je code niet overzichtelijk.
Als het voor de hand ligt dat andere waarden uit de response ook interessant gaan zijn in de toekomst, of als deze methode voor tal van requests gebruikt gaat worden, heeft de array aanpak toch wel mijn voorkeur. :)

{signature}


Acties:
  • 0 Henk 'm!

  • siknu
  • Registratie: Februari 2004
  • Laatst online: 30-06 15:56
Volgens mij kan je dergelijke dingen toepassen door middel van de curl library in php: www.php.net/curl
Over de technische implementatie kan ik je niks vertellen, daarvoor kan je de php site raadplegen.

Acties:
  • 0 Henk 'm!

  • XxKr0n3xX
  • Registratie: Januari 2004
  • Niet online
siknu schreef op dinsdag 10 juli 2007 @ 15:57:
Volgens mij kan je dergelijke dingen toepassen door middel van de curl library in php: www.php.net/curl
Over de technische implementatie kan ik je niks vertellen, daarvoor kan je de php site raadplegen.
cUrl gebruik ik nu om de gegevens te posten. Althans de class die ik gebruik maakt gebruik van curl library. Deze retourneerd de content van de pagina waar ik naar toe post naar een variabele. Uit deze variabele gevuld met regels zoals ik eerder heb aangegeven wil dat id vissen.

Ik ga even aan de slag met het gegeven advies. Mijn dank is groot als ik er weer niet uit kom trek ik wel aan de bel.
Pagina: 1