Page 1 of 2

Duda dobre PHP..

PostPosted: Sat Aug 24, 2013 10:12 pm
by erkosone
Tengo este código que pretende imprimir en pantalla la ip del cliente, pero no pinta nada.. alguien puede orientar a un novato total en php sobre como hacerlo bien?
Source Code (PHP) [ Download ] [ Hide ]
  • <html>
  •         <head>
  •                 <title>Luis Lopez Martinez WEB SERVICES 1.0</title>
  •         </head>
  •         <body>
  •                 <?php
  •                         // Get the client ip address
  •                         $ip = $_SERVER['REMOTE_ADDR'];
  •                         echo ip;
  •                 ?>
  •         </body>
  • </html>

Re: Duda dobre PHP..

PostPosted: Sun Aug 25, 2013 11:40 am
by radianplus
erkosone wrote:Tengo este código que pretende imprimir en pantalla la ip del cliente, pero no pinta nada.. alguien puede orientar a un novato total en php sobre como hacerlo bien?
Source Code (PHP) [ Download ] [ Hide ]
  • <html>
  •         <head>
  •                 <title>Luis Lopez Martinez WEB SERVICES 1.0</title>
  •         </head>
  •         <body>
  •                 <?php
  •                         // Get the client ip address
  •                         $ip = $_SERVER['REMOTE_ADDR'];
  •                         echo ip;
  •                 ?>
  •         </body>
  • </html>


Así a ojo
Source Code (PHP) [ Download ] [ Hide ]
  • echo $ip;

Re: Duda dobre PHP..

PostPosted: Sun Sep 01, 2013 5:41 pm
by erkosone
Gracias por la aclaración, vaya despiste XD.. pero tenía algo mas mal.. bueno ya está solucionado, ahora tengo otra duda..
Como creo una estructura en PHP ?? creo que necesito declarar una class verdad? y luego.. como hago un array de class??? lo que quier conseguir es esto:

struct ranking[10];
string nick;
int score;
end

Para luego poder hacer algo parecido a esto: qsort( ranking, score, 1 );

- Osea, crear el equivalente a una estructura con 2 variables, una que indique el nick de un usuario y otra que indique su puntuación, y basicamente que el tipo de dato que cree sea posible de ordenar mediante el campo score.

Alguien me hecha una mano?

Re: Duda dobre PHP..

PostPosted: Mon Sep 02, 2013 4:36 pm
by erkosone
Bueno.. problema resuelto.. lo pego por si le sirve a alguien..

Source Code (PHP) [ Download ] [ Hide ]
  • $datos[] = array(0, '', '0');
  •         $datos[] = array(1, '', '0');
  •         $datos[] = array(2, '', '0');
  •         $datos[] = array(3, '', '0');
  •         $datos[] = array(4, '', '0');
  •         $datos[] = array(5, '', '0');
  •         $datos[] = array(6, '', '0');
  •         $datos[] = array(7, '', '0');
  •         $datos[] = array(8, '', '0');
  •         $datos[] = array(9, '', '0');
  •         $datos[] = array(10, '', '0');
  •          
  •         foreach ($datos as $key => $fila) {
  •                                 $nicks[$key]  = $fila[1]; // columna de nicks
  •                                 $scores[$key] = $fila[2]; //columna de scores
  •                         }
  •          
  •         //ordenamos ascendente por la columna elegida
  •         array_multisort($scores, SORT_ASC, $datos);
  •         print_r($datos);


Es basicamente un simil a una estructoria en C o C++ la cual se puede ordenar por una columna en concreto.

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 6:49 pm
by erkosone
Bueno.. tengo un ultimo problema para terminar de dejar 100% correcto el sistema de ranking online..
Haber si alguien que sepa PHP puede hecharme una mano :P

El caso es que no consigo comparar 2 strings y que de cierto si son iguales.. no se que está pasando..
La cosa es que si en el ranking ya está mi nick lo que hago es mirar si he enviado mas puntos que los que el ranking tenía registrados, pero para hacer esto necesito comprobar si el string que contiene el NICK que se ha enviado al formulario es igual que alguno de los que contiene el ranking.. y aquí es donde no me funciona.. nunca me da ture esto:
Source Code (PHP) [ Download ] [ Hide ]
  •         $a = (string)$datos[$i] [1];
  •         $b = (string)$_POST['nick'];
  •                
  •                 if($a == $b){
  •                         // existe una puntuación con mi nick..
  •                         // me guardo la posición dentro de la estructura..
  •                         // será donde añada los datos del post si es necesario..
  •                         echo 'COINCIDENCIA DETECTADA!!!';
  •                         $pos_nick = $i;
  •                 }



Pego el script al completo por si ayuda a clarificar el error..
receivePost.html
Source Code (HTML) [ Download ] [ Hide ]
  • <!DOCTYPE html>
  • <html lang="en">
  • <head>
  •     <meta charset="UTF-8">
  •     <title>Formulario</title>
  • </head>
  • <body>
  • <form action="receivePost_action.php" method="post">
  •  <p>File: <input type="text" name="file" /></p>
  •  <p>Cmd: <input type="text" name="cmd" /></p>
  •  <p>Nick: <input type="text" name="nick" /></p>
  •  <p>Score: <input type="text" name="score" /></p>
  •  <p><input type="submit" /></p>
  • </form>
  • </body>
  • </html>


receivePost_action.php
Source Code (PHP) [ Download ] [ Hide ]
  • <?php
  •         //------------------------------------------------------------------------------------
  •         $datos[] = array(0, ' ', '0');
  •         $datos[] = array(1, ' ', '0');
  •         $datos[] = array(2, ' ', '0');
  •         $datos[] = array(3, ' ', '0');
  •         $datos[] = array(4, ' ', '0');
  •         $datos[] = array(5, ' ', '0');
  •         $datos[] = array(6, ' ', '0');
  •         $datos[] = array(7, ' ', '0');
  •         $datos[] = array(8, ' ', '0');
  •         $datos[] = array(9, ' ', '0');
  •         $datos[] = array(10,' ', '0');
  •         //------------------------------------------------------------------------------------
  •         // compruebo si el archivo existe.. para cargar sus datos..
  •         $nombre_fichero = $_POST['file'];
  •         if(file_exists($nombre_fichero)){
  •                 //echo "El fichero $nombre_fichero existe";
  •                 $handle = fopen($_POST['file'], "r");
  •                 $i = 0;
  •                 while($i<11){
  •                         $letra = fgetc($handle);
  •                         while($letra != '@'){
  •                                 $nick_ = $nick_.$letra;
  •                                 $letra = fgetc($handle);
  •                         }
  •                         $letra = fgetc($handle);
  •                         while($letra != '@'){
  •                                 $score_ = $score_.$letra;
  •                                 $letra = fgetc($handle);
  •                         }
  •                         $datos[] = array($i, $nick_, $score_);
  •                         $nick_ = '';
  •                         $score_ = '';
  •                         $i ++;
  •                 }
  •                 fclose($handle);
  •         }
  •         //------------------------------------------------------------------------------------
  •         // si los datos posteados no están en la lista..
  •         // los añado a la ultima posición de la estructura..
  •         $pos_nick = -1;
  •         $flag_score = false;
  •         $i = 0;
  •         for($i=0; $i<10; $i++){
  •                 //if($datos[$i] [1] == $_POST['nick']){
  •                
  •                 $a = (string)$datos[$i] [1];
  •                 $b = (string)$_POST['nick'];
  •                
  •                 if($a == $b){
  •                         // existe una puntuación con mi nick..
  •                         // me guardo la posición dentro de la estructura..
  •                         // será donde añada los datos del post si es necesario..
  •                         echo 'COINCIDENCIA DETECTADA!!!';
  •                         $pos_nick = $i;
  •                 }
  •                 if($datos[$i] [2] < $_POST['score']){
  •                         // si la puntuación del post es mayor que alguna del ranking..
  •                         $flag_score = true;
  •                 }
  •         }
  •         //------------------------------------------------------------------------------------
  •         // si mi nick estaba en el ranking miro si tengo una puntuación superior..
  •         if($pos_nick > -1){
  •                 if($flag_score == true){
  •                         // actualizo la información por ser mejor que la contenida en el ranking..
  •                         $datos[$pos_nick] [1] = $_POST['nick'];
  •                         $datos[$pos_nick] [2] = $_POST['score'];
  •                 }
  •         }
  •         if($pos_nick == -1){
  •                 // si mi nick no está en el ranking pero tengo mas puntos que la peor puntuación guardada..
  •                 if($flag_score == true){
  •                         // me añado en la ultima posición del ranking..
  •                         $datos[10] [1] = $_POST['nick'];
  •                         $datos[10] [2] = $_POST['score'];
  •                 }
  •         }
  •         //------------------------------------------------------------------------------------
  •         // accesors a las columnas por indices separados..
  •         foreach ($datos as $key => $fila){
  •                 $nicks[$key]  = $fila[1]; // columna de nicks
  •                 $scores[$key] = $fila[2]; //columna de scores
  •         }
  •        
  •         //ordenamos ascendente por la columna elegida
  •         array_multisort($scores, SORT_DESC, $datos);
  •         //------------------------------------------------------------------------------------
  •         // actualizar el archivo del ranking..
  •         $nombre_fichero = $_POST['file'];
  •         // creo el archivo..
  •         $handle2 = fopen($_POST['file'], "w");
  •         //recorro la lista de datos..
  •         $i = 0;
  •         while($i<11){
  •                 $nick_  = $datos[$i] [1];
  •                 $score_ = $datos[$i] [2];
  •                 fwrite( $handle2, $nick_ );
  •                 fwrite( $handle2, '@' );
  •                 fwrite( $handle2, $score_ );
  •                 fwrite( $handle2, '@' );
  •                 $i ++;
  •         }
  •         fclose( $handle2 );
  •         //------------------------------------------------------------------------------------
  •         //------------------------------------------------------------------------------------
  •         $counter = 0;
  •         while($counter<11){
  •                 echo $datos[$counter] [1] . " " . $datos[$counter] [2];
  •                 echo '<br>';
  •                 $counter ++;
  •         }
  •         echo $pos_nick;
  •         echo '<br>';
  •         echo $flag_score;
  •         //------------------------------------------------------------------------------------
  • ?>



Cualquier ayuda será bien recibida!

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 8:37 pm
by radianplus
No tengo idea de PHP, como dices que cualquier ayuda será bien recibida, ahí va.

strcasecmp() - compara dos strings y devuelve cero si son iguales (no hace diferencia mayusculas/minusculas)

Source Code (PHP) [ Download ] [ Hide ]
  •  $a = (string)$datos[$i] [1];
  •         $b = (string)$_POST['nick'];
  •                
  •                 if (strcasecmp($a,$b)==0){
  •                         // existe una puntuación con mi nick..
  •                         // me guardo la posición dentro de la estructura..
  •                         // será donde añada los datos del post si es necesario..
  •                         echo 'COINCIDENCIA DETECTADA!!!';
  •                         $pos_nick = $i;
  •                 }

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 8:56 pm
by BigHead
tienes esto, $nombre_fichero = $_POST['file']; pero luego usas $_POST para las comparaciones ? por que si es asi es posible que sea por esto y debas usar $nombre_fichero para las comparaciones, no estoy muy seguro porque soy de ASP pero en asp se haría de la manera que te comento, tb la opcion que te comenta radiamplus puede ser mas efectiva,

la opcion que yo te doy es SQL, para esto es la leche, con una sola consulta dices que te busque el nombre en la tabla y listo, luego en esa mismas fila añades la nueva puntuacion y listo, ahora tengo que salir, pero si luego me da tiempo te envio un ejemplo. de todos modos deberia funcionarte con tu método, pero php y asp a veces son muy toca webos con estas cosillas.

La pregunta es si te devuelve algun error el servidor a pantalla??

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 9:03 pm
by erkosone
No me devuelve ningún error, solo que no se cumple nunca que $a sea igual a $b, y en realidad si los pinto en pantalla son lo mismo, algo se me escapa, haber si alguien mas le da un vistazo haber :?:

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 11:10 pm
by BigHead
es posible que sea por los tipos de datos, quizá tengas que convertir alguno de los dos, eso me ha pasado en asp, no te da error pero no coinciden, imprimes en pantalla ey es correcto, y al final es esto, creo que hay un funcion para convertir, convierte los dos al mismo a ver si te funciona, asp (imagiuno quye php tambien ) es muy pejigueras con estas cosas sobre todo pq muchas veces no te devuelve error al comparar tipos de datos y te vuelves loco mirando que es y no ves nada, a ver si te rula, animo!

Re: Duda dobre PHP..

PostPosted: Thu Sep 05, 2013 11:44 pm
by AmakaSt
erkosone wrote:No me devuelve ningún error, solo que no se cumple nunca que $a sea igual a $b, y en realidad si los pinto en pantalla son lo mismo, algo se me escapa, haber si alguien mas le da un vistazo haber :?:


Has probado con: if ($a === $b)