[SOLUCIONADO][PHP] Error: Undefined offset: 1

Iniciado por $francisco, Noviembre 04, 2014, 07:39:50 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 04, 2014, 07:39:50 PM Ultima modificación: Noviembre 18, 2014, 05:10:52 PM por blackdrake
Muy buenas y saludos a todos.

función php:

Código: php
function getData($data){
$lines = explode("\n", $data);
$keyarray = array();
$num = count($lines);

for($i=1; $i<$num;$i++){
//list($key,$var) = split("=",$lines[$i],2);
$works = split("=",$lines[$i]);
$keyArray[$works[0]] = $works[1];
echo("key: ".$works[0]." value: ".$works[1]);
}
return array($lines[0],$keyArray);
}


mas código:

Código: php
$responsePaypal = getData($var);

if(strpos($responsePaypal[0],'SUCCESS') === 0 AND $code == 200){
echo "SUCCESS!!!";
}


texto que recive en la variable data:

Código: php
SUCCESS\n
mc_gross=20.00\n
invoice=AF000001\n
protection_eligibility=Eligible\n
address_status=confirmed\n
payer_id=ADSZV7LHTCJM4\n
tax=0.00\n
address_street=Candy+Road+77\n
payment_date=12%3A04%3A18+Oct+19%2C+2010+PDT\n
payment_status=Completed\n
charset=windows-1252\n
address_zip=99501\n
first_name=Alice\n
mc_fee=0.88\n
address_country_code=US\n
address_name=Alice+Foobar\n
custom=\n
payer_status=unverified\n
business=paypal%40business.example.com\n
address_country=United+States\n
address_city=Anchorage\n
quantity=1\n
payer_email=alice.foobar%40example.com\n
txn_id=6BC88318RN685282M\n
payment_type=instant\n
last_name=Foobar\n
address_state=AK\n
receiver_email=paypal%40business.example.com\n
payment_fee=0.88\n
receiver_id=JNNUMM42GJB9U\n
txn_type=web_accept\n
item_name=Stuffed+bear\n
mc_currency=USD\n
item_number=BEAR05\n
residence_country=US\n
receipt_id=3354-8100-5749-2926\n
handling_amount=0.00\n
transaction_subject=Stuffed+bear\n
payment_gross=20.00\n
shipping=0.00\n


me imprime todo esto:

Código: php
......
......
......
......
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: key: payment_gross value: 20.00
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 81

Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: key: shipping value: 0.00
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 81

Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: SUCCESS!!!


Como podéis ver al final de todo me llega como si todo estuviera bien, pero me dice que esta indefinido la offset 1, pero para depurar el código hice unas impresiones como podéis ver de el contenido de el array que devuelve la función split, y el array esta ocupando el offset 0 y el 1 entonces ¿A que se debe el error?

gracias.


¿Qué código está en la línea 82 del index?
Visita mi blog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

En la linea 8 del codigo php que puse en
Código: php

$works = split("=",$lines[$i]);

Noviembre 06, 2014, 01:32:14 PM #3 Ultima modificación: Noviembre 06, 2014, 01:37:11 PM por kid_goth
en el For, no lo inicies desde 1 ponlo desde 0 :)

Código: php

for($i=0; $i<$num;$i++){
//...


y por otro lado creyendo que es mejor usa preg_split en vez de explode (aunque bueno daría casi igual)

[Edito]

Si es el offset 1 es que no te esta haciendo el explode... pregunta... el $data viene tal cual lo muestras o sea con el \n?? si es asi intenta explode("\\n", $data) o con comillas simples explode('\n', $data);

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte

Gracias, todo solucionado, lo solucioné cambiando en el for el inicio como me dijisteis desde 0 y cambiando el explode poniendo comillas simples quedo de la siguiente manera.

Código: php
function getData($data){
$lines = explode('\n', $data);
$keyarray = array();
$num = count($lines);

for($i=0; $i<$num;$i++){
$works = split("=",$lines[$i]);
$keyArray[$works[0]] = $works[1];
}
return array($lines[0],$keyArray);
}


y otra cosa, ¿cual es la diferencia entre usar comillas simples y dobles en el caso de explode para palabras reservadas como "\n"?

en el código que yo tengo si esta "\n" porque es una simulación que estoy haciendo ha paypal, lo almaceno en una variable.

Código: php
$var = <<<EOT
SUCCESS\n
mc_gross=20.00\n
invoice=AF000001\n
protection_eligibility=Eligible\n
address_status=confirmed\n
payer_id=ADSZV7LHTCJM4\n
tax=0.00\n
address_street=Candy+Road+77\n
payment_date=12%3A04%3A18+Oct+19%2C+2010+PDT\n
payment_status=Completed\n
charset=windows-1252\n
address_zip=99501\n
first_name=Alice\n
mc_fee=0.88\n
address_country_code=US\n
address_name=Alice+Foobar\n
custom=\n
payer_status=unverified\n
business=paypal%40business.example.com\n
address_country=United+States\n
address_city=Anchorage\n
quantity=1\n
payer_email=alice.foobar%40example.com\n
txn_id=6BC88318RN685282M\n
payment_type=instant\n
last_name=Foobar\n
address_state=AK\n
receiver_email=paypal%40business.example.com\n
payment_fee=0.88\n
receiver_id=JNNUMM42GJB9U\n
txn_type=web_accept\n
item_name=Stuffed+bear\n
mc_currency=USD\n
item_number=BEAR05\n
residence_country=US\n
receipt_id=3354-8100-5749-2926\n
handling_amount=0.00\n
transaction_subject=Stuffed+bear\n
payment_gross=20.00\n
shipping=0.00\n
EOT;

las comillas dobles interpretan mientras las simples no, puede probar asi y veras la diferencia:

var $proof = 'hola';
echo "$proof \r\n Otra Linea?\n";
echo '$proof \r\n Otra Linea?';

la salida seria:

hola
Otra Linea?
$proof \r\n Otra Linea?

:)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acepta con humildad y aprecio que en la vida la muerte es inevitable y amarás ésta, adorando la muerte