Duda dobre PHP..

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Duda dobre PHP..

Postby erkosone » Sat Aug 24, 2013 10:12 pm

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>
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda dobre PHP..

Postby radianplus » Sun Aug 25, 2013 11:40 am

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;
User avatar
radianplus
 
Posts: 28
Joined: Fri Sep 17, 2010 10:26 am

Re: Duda dobre PHP..

Postby erkosone » Sun Sep 01, 2013 5:41 pm

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?
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda dobre PHP..

Postby erkosone » Mon Sep 02, 2013 4:36 pm

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.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda dobre PHP..

Postby erkosone » Thu Sep 05, 2013 6:49 pm

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!
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda dobre PHP..

Postby radianplus » Thu Sep 05, 2013 8:37 pm

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;
  •                 }
User avatar
radianplus
 
Posts: 28
Joined: Fri Sep 17, 2010 10:26 am

Re: Duda dobre PHP..

Postby BigHead » Thu Sep 05, 2013 8:56 pm

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??
Hañime Bushi, nekonoashi
User avatar
BigHead
 
Posts: 1277
Joined: Sun Nov 30, 2008 1:28 pm

Re: Duda dobre PHP..

Postby erkosone » Thu Sep 05, 2013 9:03 pm

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 :?:
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda dobre PHP..

Postby BigHead » Thu Sep 05, 2013 11:10 pm

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!
Hañime Bushi, nekonoashi
User avatar
BigHead
 
Posts: 1277
Joined: Sun Nov 30, 2008 1:28 pm

Re: Duda dobre PHP..

Postby AmakaSt » Thu Sep 05, 2013 11:44 pm

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)
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Next

Return to Offtopic

Who is online

Users browsing this forum: No registered users and 3 guests