Duda dobre PHP..

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Duda dobre PHP..

Post 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?
[Codebox=php file=Untitled.php]<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>[/Codebox]
User avatar
radianplus
Posts: 28
Joined: Fri Sep 17, 2010 10:26 am

Re: Duda dobre PHP..

Post by radianplus »

[Codebox=php file=Untitled.php][/Codebox]
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?
[Codebox=php file=Untitled.php]<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>[/Codebox]
Así a ojo
[Codebox=php file=Untitled.php]echo $ip;[/Codebox]
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: Duda dobre PHP..

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

Re: Duda dobre PHP..

Post by erkosone »

Bueno.. problema resuelto.. lo pego por si le sirve a alguien..

[Codebox=php file=Untitled.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');

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);[/Codebox]

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: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: Duda dobre PHP..

Post 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:
[Codebox=php file=Untitled.php]
$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;
}[/Codebox]


Pego el script al completo por si ayuda a clarificar el error..
receivePost.html
[code]
<!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>[/code]

receivePost_action.php
[Codebox=php file=Untitled.php]
<?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;
//------------------------------------------------------------------------------------
?>[/Codebox]


Cualquier ayuda será bien recibida!
User avatar
radianplus
Posts: 28
Joined: Fri Sep 17, 2010 10:26 am

Re: Duda dobre PHP..

Post 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)

[Codebox=php file=Untitled.php] $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;
}[/Codebox]
User avatar
BigHead
Posts: 1277
Joined: Sun Nov 30, 2008 1:28 pm
Contact:

Re: Duda dobre PHP..

Post 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??
Hañime Bushi, nekonoashi
User avatar
erkosone
Posts: 10656
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.
Contact:

Re: Duda dobre PHP..

Post 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 :?:
User avatar
BigHead
Posts: 1277
Joined: Sun Nov 30, 2008 1:28 pm
Contact:

Re: Duda dobre PHP..

Post 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!
Hañime Bushi, nekonoashi
User avatar
AmakaSt
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm
Contact:

Re: Duda dobre PHP..

Post 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)
Post Reply

Return to “Offtopic”