none
PHP a la escucha RRS feed

  • Pregunta

  • Buenos días,

    Recurro a vosotros por que no tengo ni idea de php, tengo una aplicación que manda peticiones POST, y en un apartado de mi servidor tengo un fichero php que debe recoger la respuesta. Pongo el error que me da y el código a ver si me podeis orientar: Creo que el error esta en que dice que no defino el indice, imagino que del array... Pero no se bien como hacerlo.

    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined index: notification in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 4
    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined offset: 1 in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 9
    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined offset: 2 in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 10
    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined offset: 3 in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 11
    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined offset: 4 in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 12
    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined offset: 5 in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 13

    Código:

    <?php
    
         // Se extrae la notificacion enviada en la petición HTTP POST. 
        $notification = $_POST['notification'];
    	
    	//Se separa el parámetro recibido en la petición en tres parámetros 
        $notificationArray = explode(',', $notification);
        $CUSTOMERID = $notificationArray[0];
        $ORDERID = $notificationArray[1];
        $MESSAGEID = $notificationArray[2];
    	$STATUS = $notificationArray[3];
        $NBMESSAGES = $notificationArray[4];
        $SUBJECT = $notificationArray[5];
        $MOBILEACK = $notificationArray[6];
        $MSISDN = $notificationArray[7];
    	$DATE = $notificationArray[8];
        $TIME = $notificationArray[9];
    
        //Se busca el idAck del envío en bdd para actualizar su estado
        //........
    	//Miramos si el fichero existe, si no existe lo creamos, si existe lo borramos.
    	$nombre_fichero = $notificationArray[1].".txt";
    
    	if (file_exists($nombre_fichero)) {
    		unlink($notificationArray[1].".txt");
    		
        //Creamos el archivo datos.txt
    	//ponemos tipo 'a' para añadir lineas sin borrar
    	$file=fopen($notificationArray[1].".txt","a") or die("Problemas");
    	//vamos añadiendo el contenido
    	fputs($file,$notificationArray[0]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[1]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[2]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[3]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[4]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[5]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[6]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[7]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[8]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[9]);
    	fclose($file);
    	
    	} else {
    		
            //Creamos el archivo datos.txt
    	//ponemos tipo 'a' para añadir lineas sin borrar
    	$file=fopen($notificationArray[1].".txt","a") or die("Problemas");
    	//vamos añadiendo el contenido
    	fputs($file,$notificationArray[0]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[1]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[2]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[3]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[4]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[5]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[6]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[7]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[8]);
    	fputs($file,"\n");
    	fputs($file,$notificationArray[9]);
    	fclose($file);
    	
    	}
    		
        // Se responde al servidor   
        // Se compone la cabecera de la respuesta HTTP
        header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	
    ?>

    jueves, 4 de enero de 2018 9:48

Respuestas

  • Buenas tardes.

    Podrías probar el siguiente código tal cual se encuentra sin cambiar nada a modo de realizar pruebas

    <?php
    
        $notification ='/mms/notifManager.pl?CUSTOMERID=13502&ORDERID=1509312801&STATUS=Message%201%20of%20the%20order%201509312801%20at%20destination%20of%20%2B447967010269%20has%20been%20received%20at%2015%3A31%3A15%20%28CET%29%20on%20the%2015-10-2004.&NBMESSAGE=1&SUBJECT=447967010269-6FD1696299--SMS&MESSAGEID=1&MSISDN=%2B447967010269&DATE=15-10-2004&TIME=15%3A31%3A15&MOBILEACK=1 HTTP/1.1
    
    Decoded status:
    
    STATUS= Message 1 of the order 1509312801 at destination of +447967010269 has been received at 15:31:15 (CET) on the 15-10-2004.';
    
     	$notificationArray = explode('&', $notification);
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	//vamos añadiendo todo el contenido mediante foreach
    	
    	foreach($notificationArray as $noti){
    	fputs($file,$noti." + ");
    	echo $noti." + " ;
    		}	
    	 header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	}
    	else{
    		echo "No existe el fichero Favor creelo primero";
    	}
       
    	
    ?>
    Saludos.


    • Editado osrol miércoles, 24 de enero de 2018 21:02
    • Marcado como respuesta J.Ramon jueves, 25 de enero de 2018 17:41
    miércoles, 24 de enero de 2018 21:01

Todas las respuestas

  • Buenos días

    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined index: notification in /home2/optiplus/public_html/optiplus/web/smsSAP/notif.php on line 4

    Undefined index significa que estás intentando acceder a un índice inexistente de un array deberias verificar que datos recibe $notification = $_POST['notification']; porque al parecer no esta separado por comas o no recibe los datos como lo indicas en esta linea $notificationArray = explode(',', $notification); podrías probar depurando el proyecto para ver que datos recibes o con un simple echo que te muestre los datos.

    Obs: esta comentada esta linea //Se separa el parámetro recibido en la petición en tres  parámetros pero allí hay como 10 variables

    Espero te sirva de ayuda.

    Saludos.


    • Editado osrol jueves, 4 de enero de 2018 12:27
    jueves, 4 de enero de 2018 12:20
  • Me sirve muchísimo Osrol, el problema que tengo es que este código lo utilizo para otra aplicacion de otro proveedor que me manda los parámetros separados por ','  y antes eran 3 parámetros..

    Ahora son 10 parámetros y creo que van separados por lineas. Voy a ver si enccuentro como coger cada linea y meterla en el array.

    Por cierto, lo que en realidad necesito es coger lo que me mandan y meterlo en un .txt
    Se podría hacer mas "a saco" sin separarlo por arrays?? y sin decirle como va separado...

    Saludos.


    • Editado J.Ramon jueves, 4 de enero de 2018 16:18 edit
    jueves, 4 de enero de 2018 16:16
  • He cambiado la forma de extraer los datos con:

    $notificationArray = explode('\n', $notification);

    En principio así cojo cada linea, pero me sigue dando el mismo fallo:

    [04-Jan-2018 09:17:20 UTC] PHP Notice:  Undefined index: Line 4
    $notification = $_POST['notification'];

    jueves, 4 de enero de 2018 18:37
  • Estuve realizando pruebas con el foreach para no indicar los indices y no me genera ningún error

    <?php
    
        $notification ='uno-Dos-tres-cuatro';
    	
        $notificationArray = explode('-', $notification);
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	//vamos añadiendo todo el contenido mediante foreach
    	
    	foreach($notificationArray as $noti){
    	fputs($file,$noti." + ");
    	echo $noti." + " ;
    		}		
    fclose($file);
    
    	}
        header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	
    ?>

    si quieres escribir solo el contenido de la misma forma en que la recibes 

    <?php
    
        $notification ='uno-Dos-tres-cuatro';
        $notificationArray = explode('-', $notification);
    
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	fputs($file,$notification);
    	fclose($file);
    	}
        header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	
    ?>

    Espero te sirva de ayuda.

    Saludos.

    jueves, 4 de enero de 2018 20:56
  • Hola de nuevo,

    He intentado todo lo que me propones, he cambiado algunas cosas mas y sigue dandome el mismo error siempre...

    He probado:

        $notification = $_POST['notification'];
        $notification = file_get_contents("php://input");
    Error: Undefined index: notification

    Ellos me mandan esto:

    GET
    /mms/notifManager.pl?CUSTOMERID=13502&ORDERID=1509312801&STATUS=Message%201%20of%20the%20order%201509312801%20at%20destination%20of%20%2B447967010269%20has%20been%20received%20at%2015%3A31%3A15%20%28CET%29%20on%20the%2015-10-2004.&NBMESSAGE=1&SUBJECT=447967010269-6FD1696299--SMS&MESSAGEID=1&MSISDN=%2B447967010269&DATE=15-10-2004&TIME=15%3A31%3A15&MOBILEACK=1 HTTP/1.1

    Decoded status:

    STATUS= Message 1 of the order 1509312801 at destination of +447967010269 has been received at 15:31:15 (CET) on the 15-10-2004.

    martes, 9 de enero de 2018 9:44
  • Sigo con el mismo problema, si alguien pudiera echarme una mano se lo agradeceria mucho.

    He cambiado el POST por GET, pero me da el mismo error de indice.

    miércoles, 24 de enero de 2018 17:40
  • Buenas tardes.

    Podrías probar el siguiente código tal cual se encuentra sin cambiar nada a modo de realizar pruebas

    <?php
    
        $notification ='/mms/notifManager.pl?CUSTOMERID=13502&ORDERID=1509312801&STATUS=Message%201%20of%20the%20order%201509312801%20at%20destination%20of%20%2B447967010269%20has%20been%20received%20at%2015%3A31%3A15%20%28CET%29%20on%20the%2015-10-2004.&NBMESSAGE=1&SUBJECT=447967010269-6FD1696299--SMS&MESSAGEID=1&MSISDN=%2B447967010269&DATE=15-10-2004&TIME=15%3A31%3A15&MOBILEACK=1 HTTP/1.1
    
    Decoded status:
    
    STATUS= Message 1 of the order 1509312801 at destination of +447967010269 has been received at 15:31:15 (CET) on the 15-10-2004.';
    
     	$notificationArray = explode('&', $notification);
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	//vamos añadiendo todo el contenido mediante foreach
    	
    	foreach($notificationArray as $noti){
    	fputs($file,$noti." + ");
    	echo $noti." + " ;
    		}	
    	 header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	}
    	else{
    		echo "No existe el fichero Favor creelo primero";
    	}
       
    	
    ?>
    Saludos.


    • Editado osrol miércoles, 24 de enero de 2018 21:02
    • Marcado como respuesta J.Ramon jueves, 25 de enero de 2018 17:41
    miércoles, 24 de enero de 2018 21:01
  • Hola osrol,

    Efectivamente si creo el fichero logs.txt y lo crea:

    /mms/notifManager.pl?CUSTOMERID=13502 + ORDERID=1509312801 + STATUS=Message%201%20of%20the%20order%201509312801%20at%20destination%20of%20%2B447967010269%20has%20been%20received%20at%2015%3A31%3A15%20%28CET%29%20on%20the%2015-10-2004. + NBMESSAGE=1 + SUBJECT=447967010269-6FD1696299--SMS + MESSAGEID=1 + MSISDN=%2B447967010269 + DATE=15-10-2004 + TIME=15%3A31%3A15 + MOBILEACK=1 HTTP/1.1
    
    Decoded status:
    
    STATUS= Message 1 of the order 1509312801 at destination of +447967010269 has been received at 15:31:15 (CET) on the 15-10-2004. + 
    Si ahora pongo
    $notification = $_GET['notification']
    <?php
    
        $notification = $_GET['notification'];
    
     	$notificationArray = explode('&', $notification);
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	//vamos añadiendo todo el contenido mediante foreach
    	
    	foreach($notificationArray as $noti){
    	fputs($file,$noti." + ");
    	echo $noti." + " ;
    		}	
    	 header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	}
    	else{
    		echo "No existe el fichero Favor creelo primero";
    	}
       
    	
    ?>

    Me da error de indice en la linea 3
        $notification = $_GET['notification'];

    jueves, 25 de enero de 2018 10:17
  • Me funciona!!
    Con este código:

    <?php
    
        $notification = $_GET['STATUS'];
    
     	$notificationArray = explode('&', $notification);
     	$nombre_fichero = "logs.txt";
    
    	if (file_exists($nombre_fichero)) {
    	
    	$file=fopen( $nombre_fichero,"a") or die("Problemas");
    	//vamos añadiendo todo el contenido mediante foreach
    	
    	foreach($notificationArray as $noti){
    	fputs($file,$noti." + ");
    	echo $noti." + " ;
    		}	
    	 header("Content-Type:text/plain; charset=UTF-8");
        echo "OK";
    	}
    	else{
    		echo "No existe el fichero Favor creelo primero";
    	}
       
    	
    ?>

    Pero no se por que me duplica varias veces algunas cosas... Te pego lo que me crea:

    Your message has been correctly processed. 1 message(s) has(have) been generated with the order Id 1365752898. + Message 1 of the order 1365752898 at destination of +34691816072 has been sent at 13:31:48 (CET) on the 25-01-2018. + Message 1 of the order 1365752898 at destination of +34691816072 has been received at 13:31:49 (CET) on the 25-01-2018. + 

    Como podría coger el order Id que me mandan?
    En este caso 1365752898
    He intentado meterlo todo en un array pero me da error. La idea es cogerlo para poder crear el fichero txt y darle ese nombre.

    Saludos.

    jueves, 25 de enero de 2018 12:35
  • 'notification' no existe. Es evidente. Sino, muéstranos donde aparece en el querystring...

    $notificationArray ES $_GET. El arreglo en tu foreach debe ser $_GET.

    El id es, claro, $_GET['USERID']

    jueves, 25 de enero de 2018 12:46
  • Como te lo indica otro nico para capturar el order id con el método GET debes indicar el nombre del parámetro a capturar fíjate bien en la url como lo recibes  /mms/notifManager.pl?CUSTOMERID=13502&ORDERID=1509312801&STATUS= etc. son los nombres de parámetros a capturar

    $notification = $_GET['ORDERID'];

    jueves, 25 de enero de 2018 13:24
  • Muchas gracias Osrol, realmente no sabia muy bien que estaba haciendo, el código me lo pasaron y no tengo ni idea de php...aun así funciona a la perfección.

    Gracias.

    jueves, 25 de enero de 2018 17:43