PHP - problema con funcion strpos()

 
Vista:
sin imagen de perfil

problema con funcion strpos()

Publicado por Eduardo (17 intervenciones) el 12/05/2020 17:20:02
Saludos, yo nuevamente,

Tengo el siguiente segmento de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$bus_string = trim( strtoupper( $_GET["buscad"] ) ) ;
$bus_tipo   = $_GET["bustip"] ;
$list_item  = -1 ;
echo 'Test A/ABCDEFG:'.IsIn( 'A' , 'ABCDEFG' )."</br>" ; //<- AQUI ME DEVUELVE true
foreach ( $list_prec as list($pro_cod,$pro_nom,$pro_dci,$pro_mar,$pro_gpo,$pro_vvf,$pro_igv,$pro_pvf,$pro_stk,$prc_num,$prc_pak,$prc_dia,$prc_gpo,$prc_tba,$prc_tbb,$prc_tbc,$prc_tbd,$prc_tbe,$prc_tbf,$uni_ped,$es_nuevo) ) {
 
  $list_item++ ;
  $match_ok = IsIn( $bus_string , $pro_nom  ) ;
  $grupo_ok = IsIn( $clie_gpo   , $prc_gpo  ) ;
  echo "producto:".$bus_string." / ".$pro_nom."cliente:".$clie_gpo."/".$prc_gpo."->".$match_ok."  ".$grupo_ok."</br>" ; // ESTE ECHO ES PARA REVISAR LOS CONTENIDOS DE LAS VARIABLES
  if( $grupo_ok = 'true' && $match_ok = 'true' ){
     $bus_lineas[] = $list_item ;
  }
 
}

Esta es mi funcion IsIn():

1
2
3
4
5
6
7
8
9
10
function IsIn( $corto , $largo ) {
 
    $pos = strpos( $largo , $corto );
    if($pos === false) {
       $rpt = 'false' ;
    }else{
       $rpt = 'true' ;
    }
    return $rpt;
}

Y aquí la captura del resultado:

IsIn

Como se ve las cadenas que se comparan son practicamente las mismas, pero la función me devuelve un resultado distinto en cada ocasión. Aqui otra captura de la comparación entre cadenas del campo "producto" que está más abajo en la lista:

IsIn2

Como se ve, IsIn() se comporta bien con el campo "producto", pero no con el campo "cliente" - ¿ COMO PUEDE SER SI ES LA MISMA FUNCION ? - Sin embargo si paso las cadenas directamente si devuelve true. ¡ De locos !

Recién estoy empezando con PHP así que estoy en nivel esquizoide, así que agradeceré cualquier orientación al respecto.

Cordiales saludos,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por Julio (830 intervenciones) el 12/05/2020 17:48:46
Hola.

¿Puedes poner esto en el sitio que te indico?

1
2
3
$match_ok = IsIn( $bus_string , $pro_nom  ) ;
$grupo_ok = IsIn( $clie_gpo   , $prc_gpo  ) ;
echo '<br>'; var_dump($clie_gpo); var_dump($prc_gpo); echo '<br>';

Y comprobar a ver qué imprime.

Por cierto, esto está mal:

1
2
3
if( $grupo_ok = 'true' && $match_ok = 'true' ){
     $bus_lineas[] = $list_item ;
}

La comparación es con doble igual == (o triple igual si es comparación estricta ===), pero un solo igual indica asignación, así que no estás haciendo lo que pretendes aquí. Debes poner doble igual para igualar.

Por cierto, no hace falta que pongas 'true' y 'false' entre comillas. Te vale con poner true y false que, además, es mejor, pues son los valores booleanos que se usan para verdadero y falso (aunque, caigo ahora, entonces no se te imprimirán como mensaje en pantalla para hacer las pruebas).

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con funcion strpos()

Publicado por Eduardo (17 intervenciones) el 12/05/2020 18:05:10
Hola Julio,

Agradecerte tu tiempo y gentileza.

Hice la modificación que me indicaste y este es el resultado:

IsIn3

Estaré atento a tus comentarios.

Cordiales saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por javier (547 intervenciones) el 12/05/2020 18:12:01
Hola

lo cambiaste asi?

1
2
3
if( $grupo_ok ===  TRUE && $match_ok === TRUE ){
     $bus_lineas[] = $list_item ;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo
Val: 70
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por Eduardo (13 intervenciones) el 12/05/2020 19:00:37
Hola Javier,

Si, ya lo modifique así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ( isset($_GET["buscad"]) ) {
 
   $bus_string = trim( strtoupper( $_GET["buscad"] ) ) ;
   $bus_tipo   = $_GET["bustip"] ;
   $list_item  = -1 ;
   echo 'Test A/ABCDEFG:'.IsIn( 'A' , 'ABCDEFG' )."</br>" ;
   foreach ( $list_prec as list($pro_cod,$pro_nom,$pro_dci,$pro_mar,$pro_gpo,$pro_vvf,$pro_igv,$pro_pvf,$pro_stk,$prc_num,$prc_pak,$prc_dia,$prc_gpo,$prc_tba,$prc_tbb,$prc_tbc,$prc_tbd,$prc_tbe,$prc_tbf,$uni_ped,$es_nuevo) ) {
 
      $list_item++ ;
      $match_ok = IsIn( $bus_string , $pro_nom  ) ;
      $grupo_ok = IsIn( $clie_gpo   , $prc_gpo  ) ;
      echo '<br>'; var_dump($clie_gpo); var_dump($prc_gpo); echo '<br>';
      echo "producto:".$bus_string." / ".$pro_nom."cliente:".$clie_gpo."/".$prc_gpo."->".$match_ok."  ".$grupo_ok."</br>" ;
      if( $grupo_ok === 'true' && $match_ok === 'true' ){
         $bus_lineas[] = $list_item ;
      }
 
   }
 
}

Lo pongo entrecomillado por que IsIn() devuelve 'true' o 'false', estaré atento a sus observaciones amigos. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por Julio (830 intervenciones) el 12/05/2020 18:55:48
Fíjate, ahí tienes la clave. La primera variable, $clie_gpo, es un array. Fíjate que te lo muestra como [0] => string(1) "A". Por eso cuando entras a ver si esa variable está en el otro string te dice que no, porque realmente le estás pidiendo si el array está dentro del string, lo que obviamente no sucede.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo
Val: 70
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por Eduardo (13 intervenciones) el 12/05/2020 21:11:37
Hola Julio,

Agradecerte tu ayuda, efectivamente ese era el problema, para solucionarlo cambie la funcion simplexml_load_file() por una para leer .txt

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
 
    if ( isset($_GET["get_clicod"]) ) {
 
      require('funcion.php') ;
 
      $clie_codigo = $_GET["get_clicod"] ;
      $clie_txt    = 'clientes/'.$clie_codigo.'.txt' ;
      $clie_data = txt_to_array( $clie_txt );  // <- Aqui tenia simplexml_load_file()
 
      if ( count($clie_data) > 0 ) {
 
         $clie_ruc    = $clie_data[1] ;
         $clie_nombre = $clie_data[2] ;
         $clie_cat    = $clie_data[3] ;
         $clie_gpo    = $clie_data[4] ;
         $clie_plan   = $clie_data[5] ;
         $clie_vend   = $clie_data[6] ;
         $clie_pp     = $clie_data[7] ;
         $clie_mail   = $clie_data[8] ;
         $clie_dirs   = ARRAY() ;
 
         for ($x = 9; $x <= count($clie_data); $x++) {
            $dircad = $clie_data[$x] ;
            $divpos = strpos( $dircad , '|' ) ;
            $clie_dirs[] = array( left($dircad,$divpos-1) , right($dircad,strlen($dircad)-$divpos) ) ;
         }
 
         $list_csv   = 'lista.csv' ;
         $list_prec  = csv_to_array( $list_csv ) ;
         $bus_lineas = ARRAY() ;
 
      }
    }else{
      echo "ERROR DE ACCESO" ;
      die() ;
    }
 
    if ( isset($_GET["buscad"]) ) {
 
       $bus_string = trim( strtoupper( $_GET["buscad"] ) ) ;
       $bus_tipo   = $_GET["bustip"] ;
       $list_item  = -1 ;
       echo 'Test A/ABCDEFG:'.IsIn( 'A' , 'ABCDEFG' )."</br>" ;
       foreach ( $list_prec as list($pro_cod,$pro_nom,$pro_dci,$pro_mar,$pro_gpo,$pro_vvf,$pro_igv,$pro_pvf,$pro_stk,$prc_num,$prc_pak,$prc_dia,$prc_gpo,$prc_tba,$prc_tbb,$prc_tbc,$prc_tbd,$prc_tbe,$prc_tbf,$uni_ped,$es_nuevo) ) {
 
          $list_item++ ;
          $match_ok = IsIn( $bus_string , $pro_nom  ) ;
          $grupo_ok = IsIn( $clie_gpo   , $prc_gpo  ) ;
          echo '<br>'; var_dump($clie_gpo); var_dump($prc_gpo); echo '<br>';
          echo "producto:".$bus_string." / ".$pro_nom."cliente:".$clie_gpo."/".$prc_gpo."->".$match_ok."  ".$grupo_ok."</br>" ;
          if( $grupo_ok === 'true' && $match_ok === 'true' ){
             $bus_lineas[] = $list_item ;
          }
 
       }
 
    }
 
?>

isin-4

Creo que tambien esa era la razón por la cual session_start() no funcionaba cuando trataba de grabar esas variables en una sesión.

Agradecerte a ti y a Javier por sus indicaciones, gracias por su tiempo amigos.

Cordiales saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema con funcion strpos()

Publicado por javier (547 intervenciones) el 12/05/2020 17:54:14
Hola, tienes mal uno de los IF, igualas pero no comparas

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar