home Foro de soporte Espacio WEB PHP
 
Ayuda con con la comprobacion de players en un servidor
#1 ·

Bueno, estoy intentando reutilizar un codigo en el cual se conecta a el servidor i comprueba si esta online, cantidad de players totales entre otros, este tiene que poder revisar cualquier servidor ( cualquier ip )

empezemos con el codigo:

Index.php o el archivo que vaya a mostrar

Cita

        require('config-and-functions.php');

Uptime: <?PHP if($config['status']['serverStatus_online'] == 1) echo $config['status']['serverStatus_uptime'].''; else echo '0h 0m'; ?><br />
                                    Players Online: <?PHP if($config['status']['serverStatus_online'] == 1) echo $config['status']['serverStatus_players'].''; else echo '0'; ?><br />

config-and-functions.php

Cita:

<?PHP

$config['site'] = parse_ini_file('config/config.ini');
$config['server'] = parse_ini_file($config['site']['server_path'].'config.lua');
function logo_monster()
{
    return str_replace(" ", "", trim(mb_strtolower($GLOBALS['config']['site']['logo_monster'])));
}

$statustimeout = 1;
foreach(explode("*", str_replace(" ", "", $config['server']['statusTimeout'])) as $status_var)
    if($status_var > 0)
        $statustimeout = $statustimeout * $status_var;

$statustimeout = $statustimeout / 1000;
$config['status'] = parse_ini_file('cache/serverstatus');
if($config['status']['serverStatus_lastCheck']+$statustimeout < time())
{
    $config['status']['serverStatus_checkInterval'] = $statustimeout+3;
    $config['status']['serverStatus_lastCheck'] = time();
    $info = chr(6).chr(0).chr(255).chr(255).'info';
    $sock = @fsockopen("XXXXX", XXXXX, $errno, $errstr, 1);
    if ($sock)
    {
        fwrite($sock, $info);
        $data='';
        while (!feof($sock))
            $data .= fgets($sock, 1024);
        fclose($sock);
        preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
        $config['status']['serverStatus_online'] = 1;
        $config['status']['serverStatus_players'] = $matches[1];
        $config['status']['serverStatus_playersMax'] = $matches[2];
        preg_match('/uptime="(\d+)"/', $data, $matches);
        $h = floor($matches[1] / 3600);
        $m = floor(($matches[1] - $h*3600) / 60);
        $config['status']['serverStatus_uptime'] = $h.'h '.$m.'m';
        preg_match('/monsters total="(\d+)"/', $data, $matches);
        $config['status']['serverStatus_monsters'] = $matches[1];
        preg_match('/npcs total="(\d+)"/', $data, $matches);
        $config['status']['serverStatus_npcs'] = $matches[1];
    }
    else
    {
        $config['status']['serverStatus_online'] = 0;
        $config['status']['serverStatus_players'] = 0;
        $config['status']['serverStatus_playersMax'] = 0;
        $config['status']['serverStatus_monsters'] = 0;
        $config['status']['serverStatus_uptime'] = 0;
        $config['status']['serverStatus_npcs'] = 0;
    }
    $file = fopen("cache/serverstatus", "w");
    foreach($config['status'] as $param => $data)
    {
$file_data .= $param.' = "'.str_replace('"', '', $data).'"
';
    }
    rewind($file);
    fwrite($file, $file_data);
    fclose($file);
}

$views_counter = "cache/usercounter.dat";

if (file_exists($views_counter))
{
    $actie = fopen($views_counter, "r+");
    $page_views = fgets($actie, 9);
    $page_views++;
    rewind($actie);
    fputs($actie, $page_views, 9);
    fclose($actie);
}
else
{
    $actie = fopen($views_counter, "w");
    $page_views = 1;
    fputs($actie, $page_views, 9);
    fclose($actie);
}
?>

the ini just redirects to a .lua file with the config

config.ini

Cita

server_path = "C:\xampp\htdocs\config\"

config.lua ( muchas de estas funciones no hacen falta para lo que queremos )

Cita:


    worldId = 0
    ip = " "
    bindOnlyGlobalAddress = false
    loginPort = 7171
    gamePort = 7172
    loginTries = 3
    retryTimeout = 5 * 1000
    loginTimeout = 60 * 1000
    maxPlayers = 1000
    motd = ""
    displayOnOrOffAtCharlist = false
    onePlayerOnlinePerAccount = true
    allowClones = 0
    serverName = "OTServ"
    loginMessage = ""
    statusTimeout = 5 * 60 * 1000
    replaceKickOnLogin = true
    forceSlowConnectionsToDisconnect = false
    loginOnlyWithLoginServer = false

 
    statusPort = 7171
    ownerName = ""
    ownerEmail = ""
    url = ""
    location = ""

realmente, no se como hacer lo que busco, pero bueno espero que podais ayudarme

todos los archivos estan simplificados evitando lo superfluo.

gracias


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#2 ·

alguien puede ayudarme?


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#3 ·
Escrito originalmente por Dochhh

alguien puede ayudarme?

dices, a tener paciencia?


De interés Público
NO AGREGARME COMO AMIGO, gracias
Asuntos claros en los temas
Consultas en temas no afines serán borradas
Tratemos de expresarnos bien, que así da gusto leer



Moderador
Moderador
Haz clic para ver el perfil del usuario
Mensajes: 20.751
Desde: 20/Dic/2002
· ·
#4 ·

Realmente, escribes para decir eso? porque si es así te lo puedes ahorrar, gracias


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#5 ·

me sé un par de poemas si quieres... Pero la verdad voy a que hay veces que los usuarios no saben la respuesta o quien la sabe no ha pasado por acá. La paciencia es una virtud a cultivar en todo sistema de foros en que quieras preguntar/participar


De interés Público
NO AGREGARME COMO AMIGO, gracias
Asuntos claros en los temas
Consultas en temas no afines serán borradas
Tratemos de expresarnos bien, que así da gusto leer



Moderador
Moderador
Haz clic para ver el perfil del usuario
Mensajes: 20.751
Desde: 20/Dic/2002
· ·
#6 ·
Escrito originalmente por Dochhh

alguien puede ayudarme?

Teniendo en cuenta que pones un montón de código y no das una pista ni del fallo que te da... pues lo mejor es que preguntes al autor del código que te explique como lo ha hecho y como se hace para que funcione.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#7 ·
Escrito originalmente por NoSetup.org
Escrito originalmente por Dochhh

alguien puede ayudarme?

Teniendo en cuenta que pones un montón de código y no das una pista ni del fallo que te da... pues lo mejor es que preguntes al autor del código que te explique como lo ha hecho y como se hace para que funcione.

no da ningun fallo, pero quiero adaptarlo a lo que necesito, aparte de comprobar si la ip X del servidor con X puerto esta online, estas X son dadas a partir de la DB y ademas tiene que decirme tambien los players online y cuanto tiempo lleva uptime, que es ahi donde ya me pierdo


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#8 ·
Escrito originalmente por Dochhh
Escrito originalmente por NoSetup.org
 

no da ningun fallo, pero quiero adaptarlo a lo que necesito, aparte de comprobar si ...y ademas tiene que .... y .... que es ahi donde ya me pierdo

A ver... si quieres hacer todo a la vez, nada te va a salir.

Tendrás que empezar a hacer una cosa, y cuando te salga la siguiente...

Por lo que, elige por donde empezar, después empieza a programar y cuando te pierdas en un paso en concreto pregunta, indicando que quieres hacer, hasta donde llegas y que has intentado.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#9 ·

de momento tengo esto:

Cita:

 <?php
 ini_set('display_errors', 'Off');
ini_set('display_startup_errors', 'Off');
error_reporting(0);
        require('seguridad.php');

/* UPTIME */

$downtime = (mysql_query("SELECT `downtime` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC"));
$al = ($downtime / 43200) X 100;
$totalup = (1 - $al);


?>
 <?php
 $site = mysql_query("SELECT `host` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC");
$puerto = mysql_query("SELECT `port` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC");
$timeout= 6;

  function ping($site,$puerto,$timeout)

   {

          @$fsock = fsockopen($site, $puerto, $errno, $errstr, $timeout);

     if ( ! $fsock )
           {
        return FALSE;
           }
          else
          {
                  return TRUE;
        }
}




/* esta online? */
$up = ping($site,$puerto,$timeout);
/* condicion */
if ($up == TRUE){
mysql_query("INSERT INTO servers where banned = 0 (online, uptime, players, on) VALUES (1, '.$totalup.', '.$players.', 1)")
}
else
{
mysql_query("INSERT INTO servers where banned = 0 (online, uptime, players, on) VALUES ('0', '.$totalup.', 0, '0')")
}


?>

y me saltan 2 errores, uno en el calculo del uptime i otro en la condicion del si esta online, alguien ve el fallo?


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#10 ·
Escrito originalmente por Dochhh

de momento tengo esto:

Cita:

/* UPTIME */

$downtime = (mysql_query("SELECT `downtime` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC"));
$al = ($downtime / 43200) X 100;
$totalup = (1 - $al);

y me saltan 2 errores, uno en el calculo del uptime

¿En esta parte del código te da el problema?

¿Que tienes en la variable $downtime? (ojo, no que quieres tener, sino que tienes)

Respecto al otro error... después.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#11 · ·
Escrito originalmente por NoSetup.org
Escrito originalmente por Dochhh

de momento tengo esto:

Cita:

/* UPTIME */

$downtime = (mysql_query("SELECT `downtime` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC"));
$al = ($downtime / 43200) X 100;
$totalup = (1 - $al);

y me saltan 2 errores, uno en el calculo del uptime

¿En esta parte del código te da el problema?

¿Que tienes en la variable $downtime? (ojo, no que quieres tener, sino que tienes)

Respecto al otro error... después.

downtime se supone que es un numero, el 0 , principalmente

y me da error en el apartado de la division, un T_String


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#12 · ·

Tienes una sentencia mysql_query...

Código:
$downtime = (mysql_query("SELECT `downtime` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC"));

¿Que sale?

Lo mejor que puedes hacer es hacer un print_r($downtime); y veras lo que sale... y lo copias aquí... y veras si con eso, después se puede trabajar o se tiene que transformar...

Recuerda, no quiero saber lo que se supone tiene que salir, eso lo sabes tu, quiero lo que realmente sale...


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#13 · ·

parece ser que la consulta no esta bien hecha, no aparece nada

de todas formas me parece que esta no es la manera correcta de hacer lo que quiero conseguir. Quiero comprovar cada servidor de mi db, comprovar cada una de sus columnas, actualizar datos, i pasar al servidor siguiente para hacer lo mismo, con este query solo me saldra el numero de servidores que cumplen esa condicion


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#14 ·

Entiendo que tienes una serie de direcciones que quieres comprobar si están o no funcionado ¿verdad?

¿Como quieres comprobar si una dirección funciona?


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#15 ·
Escrito originalmente por NoSetup.org

Entiendo que tienes una serie de direcciones que quieres comprobar si están o no funcionado ¿verdad?

¿Como quieres comprobar si una dirección funciona?

se pingea minimamente una direccion con un puerto, si hay respuesta es que esta online, este seria el codigo,  he comprobado que funciona:

Cita:

ini_set('display_errors', 'Off');
ini_set('display_startup_errors', 'Off');
error_reporting(0);

   /* our simple php ping function */

 $site = @$_POST["site"] or die('Unknown Adress');;
$puerto = @$_POST["puerto"] or die('Unknown Port');;
$timeout= 6;

  function ping($site,$puerto,$timeout)

   {

          @$fsock = fsockopen($site, $puerto, $errno, $errstr, $timeout);

     if ( ! $fsock )
           {
        return FALSE;
           }
          else
          {
                  return TRUE;
        }
}



/* check if the host is up */


$up = ping($site,$puerto,$timeout);



/* display */
echo '<img src="'.($up ? 'on' : 'off').'.jpg" alt="'.($up ? 'The Adress is Online' : 'The Adress is Offline').'" />';

?>

intento coger cada direccion de la db comprobar si responde entre otros, esto es lo que tengo por el momento pero me salta el fallo anterior que comenté, este codigo no esta testeado:

Cita:

<?php
 ini_set('display_errors', 'Off');
ini_set('display_startup_errors', 'Off');
error_reporting(0);
        require('seguridad.php');

/* COMPROBAR LA CANTIDAD DE SERVERS QUE HAY */
$totalservers = ("SELECT COUNT(*) FROM `servers` WHERE `id`>0 AND `banned` = 0");
while( $totalservers > 0) {

/*cALCULAR EL UPTIME */

$downtime = (mysql_query("SELECT `downtime` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC"));
$al = ($downtime / 43200) X 100;
$totalup = (1 - $al);

?>
 <?php
/*COMPROBAR SI LA WEB ESTA ON */
 $site = mysql_query("SELECT `host` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC");
$puerto = mysql_query("SELECT `port` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC");
$timeout= 6;

  function ping($site,$puerto,$timeout)

   {

          @$fsock = fsockopen($site, $puerto, $errno, $errstr, $timeout);

     if ( ! $fsock )
           {
        return FALSE;
           }
          else
          {
                  return TRUE;
        }
}




/* esta online? */
$up = ping($site,$puerto,$timeout);
/* condicion */
if ($up == TRUE){
mysql_query("INSERT INTO servers where banned = 0 (online, uptime, players, on) VALUES (1, '.$totalup.', '.$players.', 1)")
}
else
{
mysql_query("INSERT INTO servers where banned = 0 (online, uptime, players, on) VALUES ('0', '.$totalup.', 0, '0')")
}}

$totalservers--;
}
?>

gracias por tu atencion


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#16 ·

Es decir, ahora tienes una base de datos con direcciones y necesitas hacer una consulta para sacar cada una de ellas ¿verdad?

Código:
 $site = mysql_query("SELECT `host` FROM `servers` WHERE `banned` = 0 ORDER BY `id` DESC");

El problema que tienes, es que crees que en $site tienes una dirección o similar... cuando lo que tienes es otro cosa, haz un print_r($site); y veras que tipo de información te saca y como tendrás que trabajar con ella dentro de un bucle.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#17 ·

he cambiado un poco el codigo, para poder hacer el while con la id (que tiene llave primaria) de cada server

Cita:

/* COMPROBAR LA CANTIDAD DE SERVERS QUE HAY */

$totalservers = ("SELECT COUNT(*) FROM `servers` WHERE `id`> 0 AND `banned` = 0 AND `deleted` = 0");

/* BUSCAR POR ID*/
$id = ("SELECT * FROM servers WHERE id ='$totalservers' AND banned = 0 AND deleted = 0 ORDER BY id DESC");
$row = mysql_fetch_assoc($id); /* no se si esta bien esta parte */
while( $id > 0) {

/*cALCULAR EL UPTIME */

$downtime = $row["downtime"];
$al = (($downtime / 43200) X 100);
$totalup = (1 - $al);

.....

$totalservers--;
}

la parte del row no se si esta bien, ya que los he visto pero no usado nunca, he buscado info pero me sale el error de T_String, a ver si alguien ve el error, gracias


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#18 ·

A ver... haces una consulta a una base de datos... que te devuelve un array, con 0 resultados, con 1 o con varios...

 Mira este código...

Código:
   $result = mysql_query('SELECT * FROM ....); // Sentencia SQL
    $n=mysql_num_rows($result);            // Número de registros, por si es necesario
    while ($row = mysql_fetch_array($result)) // Vamos mirando registro a registro
    {
       echo 'El dato es: '.$row['id'].'<br />';
    }

Si haces esto, modificando el código, obviamente... empezarías a sacar datos...


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#19 ·

he estado comprobando el codigo por separado porque ya no se que hacer y el problema viene de las queries me temo:

Código:
<?php
mysql_connect("localhost","xxxxxx","xxxxx");
mysql_select_db("xxxxx");

/* COMPROBAR LA CANTIDAD DE SERVERS QUE HAY */
$totalservers = mysql_query('SELECT COUNT(*) FROM `servers` WHERE `id` > 0 AND `banned` > 0 AND `deleted` > 0 ORDER BY `id` DESC') or die ('A');;


       echo 'El dato es: '.$totalservers.''

?>

me devuelve:

Cita:

El dato es: Resource id #4

Supongo que por eso ya se fastidian las operaciones y las otras queries.. apesar de que me tendrian que salir 6 no 4 que son los servers que tengo de prueba en la db...como podria hacer para que me devolviera solo un numero?


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#20 ·

Te dije que sacases el dato con un print_r($...); no con un echo.

Y mira y entende el código que te he puesto.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#21 · ·

ok, ya he comprobado el codigo, pero ahora surje un problema, y es que me devuelve un array con los valores de todas las filas que se elijan, como toca, pero necesito que me devuelva el valor de una fila en concreto, solo 1 valor, para poder hacer las operaciones necesarias con este, i poder hacer las comprobaciones de ip etc. He modificado un poco el codigo :

Código:
<?php
        require('seguridad.php');/* COMPROBAR LA CANTIDAD DE SERVERS QUE HAY */
$totalservers = mysql_query('SELECT COUNT(id) AS totalservers FROM `servers` WHERE `banned` = 0 AND `deleted` = 0 ORDER BY `id` DESC');
$result = mysql_query('SELECT * FROM `servers` WHERE id = totalservers AND `banned` = 0 AND `deleted` = 0 ORDER BY `id` DESC');
$n = mysql_num_rows($result);
while ($row = mysql_fetch_array($result))
{
/*CALCULAR EL UPTIME */
$minutos = 43200;
$al = $row['downtime'] / $minutos X 100;
$totalup = 1 - $al;
mysql_query("UPDATE servers SET downtime = $totalup");
/*COMPROBAR SI LA WEB ESTA ON */
$site = $row['host'];
$puerto = $row['puerto'];
$timeout= 6;  function ping($site,$puerto,$timeout)   {          @$fsock = fsockopen($site, $puerto, $errno, $errstr, $timeout);     if ( ! $fsock )
           {
        return FALSE;
           }
          else
          {
                  return TRUE;
        }
}
/* esta online? */
$up = ping($site,$puerto,$timeout);
/* condicion */
if ($up == TRUE){
mysql_query("UPDATE servers SET WHERE banned = 0 (online, uptime, players, on) VALUES (1, '.$totalup.', '.$players.', 1)")
}
else
{
mysql_query("UPDATE servers SET WHERE banned = 0 (online, uptime, players, on) VALUES ('0', '.$totalup.', 0, '0')")
}}$totalservers--;
}
?>

la primera variable, cuenta las id's i las llama totalserver, la variable segunda se supone que escoje la fila con la id que asigna la primera variable, luego necesito que el loop sea solo con el array que devuelve la 2º variable, con el objetivo que no me devuelva toda la fila de arrays sino las de la id especifica i luego ya hacer los calculos i las compobaciones, el codigo tine algun fallo en la 2º variable de/*CALCULAR EL UPTIME */ un T_SRING, gracias por ayudarme NoSetup.org, en php soy autodidactico, no tengo estudios


[cabe decir que el codigo que intento hacer se ejecutara cada X tiempo y solo sirve para actualizar la db otro codigo mostrara los datos, pero ese es otro tema]


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#22 ·
Escrito originalmente por Dochhh

ok, ya he comprobado el codigo, pero ahora surje un problema, y es que me devuelve un array con los valores de todas las filas que se elijan, como toca, pero necesito que me devuelva el valor de una fila en concreto, solo 1 valor

El código te devuelve un array con varias filas, una por servidor, si solo quieres una fila, tendrás que adaptar el código para que haga eso.

Por lo que veo en $totalservers intentas meter un número ¿lo consigues?

Después con ese número intentas hacer un SELECT buscando por id ¿es realmente la fila que estas buscando? es decir, por un lado $totalservers cuenta un número de resultados, que podría ser 10, pero después ¿quieres sacar la fila con id = 10 ? además, haces metes más condicionates, seguimos en la segunda sentencia, para hacer el SELECT, cuando el id ya es único. Además metes un ORDER cuando en principio, solo quieres sacar 1 fila, por lo que no tiene sentido.

Es decir, creo que fallas en como seleccionas el servidor.

También te vendría bien imprimir $n, pues te dice cuantas filas hay en tu última selección, si da más de 1, es que esta mal el código...


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#23 · ·

vuelve a dar lo de resource id #4, nose porque pasa, quizas tiene que salir eso, luego examinaré el codigo e intentaré volverlo hacer de otra manera o solucionarlo

en la primera variable, cuando pongo lo de

Código:
AS totalservers

no lo pilla como variable, no se muy bien como hacer queries con variables en php


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#24 · ·

ok ya casi lo tengo, $totalservers ya guarda el valor numerico correcto y $result coje el array bien del valor que le asigna $totalservers, ahora el empujon que necesito es hacer que $totalservers una vez a terminado con la primera id( es decir la mas grande, ya que esta ordenada en DESC) disminuya en 1 su valor i vuelva a actualizar los datos de la id inferior

( si por ejemplo tengo 10 id's, que al terminar de comprobar i actualizar la decima id pase a la novena i asi sucesivamente hasta llegar a la ID 1 dondedeberia parar de comprobar y actualizar)

Código:
<?php
$conexion = mysql_connect("xxxx", "xxxxxxxxx", "xxxxxxxxxxxx");
mysql_select_db("xxxxxxx", $conexion);/* COMPROBAR LA CANTIDAD DE SERVERS QUE HAY */
$totalserversquery = mysql_query("SELECT id FROM `servers` WHERE `banned` = 0 AND `deleted` = 0 ORDER BY `id` DESC");
$totalservers = mysql_num_rows($totalserversquery);
$result = mysql_query("SELECT * FROM `servers` WHERE id = '$totalservers' AND `banned` = 0 AND `deleted` = 0 ORDER BY `id` DESC");$line = mysql_num_rows($result);
while ($row = mysql_fetch_array($result))
{
echo 'compruebo el dato y lo actualizo: '.$row['id'].'<br />';
echo 'compruebo el dato y lo actualizo: '.$row['host'].'<br />';
echo 'compruebo el dato y lo actualizo: '.$row['puerto'].'<br />';
$totalservers--;
}?>

Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#25 ·
Escrito originalmente por Dochhh

ok ya casi lo tengo, $totalservers ya guarda el valor numerico correcto y $result coje el array bien del valor que le asigna $totalservers, ahora el empujon que necesito es hacer que $totalservers una vez a terminado con la primera id( es decir la mas grande, ya que esta ordenada en DESC) disminuya en 1 su valor i vuelva a actualizar los datos de la id inferior

No tienes que hacer que disminuya uno... sino tienes que hacer un bucle con la primera busqueda... es decir, NO te interesa saber cuantas filas hay... te interesa manejar todas y cada una de ellas.

Si te fijas en tu código, tienes dos sentencias SQL, la primera cuentas servers y la segunda para ver uno en concreto. Eso es ta MAL, con la primera sentencia tienes suficiente, si después les metes el bucle este hara que se vaya recorriendo mientras haya registros que se cumplan las condiciones puestas.

Espero un código con solo una sentencia SQL.

Y a nivel informátivo:

Además, sigo diciendo que tienes un problema de concepto, $totalservers te puede dar 15 por ejemplo, pero después puede que NO haya uno con ID=15, por lo que el script fallaría.

Y en la segunda sentencia SQL si metes una selección por ID, el resto de factores en principio sobrarian, por lo que no cargues el código con cosas innecesarias.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#26 · ·

aqui esta el codigo con una sentencia, el calcular uptime no me funciona, no se como hacer la operacion aritmetica i guardarla el $al para luego restarle $al a 1 i almacenarlo en la db, de momento el codigo le asigna el valor 1 a todas las filas de downtime, supongo que porque en $totalup se salta el restarle el $al que no va.

sobre lo de que si la ID=15 no existirera, hice una especie de remedio un poco chapuza, y es que si alguien quiere borrar su cuenta en lugar de borrarla i quedar por ejemplo ID=14 i la siguiente fila ID=16 seria poner el valor 1 en la casilla de delete en la cuenta que hade ser borrada, i asi el codigo se saltaria esa fila tal vez esto se podria quitar usando un try o nose..

Código:
<?php
$conexion = mysql_connect("xxxx", "xxxxx", "xxxxx");
mysql_select_db("xxxxxxxxx", $conexion);
$totalserversquery = mysql_query("SELECT * FROM `servers` WHERE `banned` = 0 AND `deleted` = 0 ORDER BY `id` DESC");
$totalservers = mysql_num_rows($totalserversquery);
while ($totalservers = mysql_fetch_array($totalserversquery))
{
echo 'El dato es: '.$totalservers['id'].'<br />';
echo 'El dato es: '.$totalservers['host'].'<br />';
echo 'El dato es: '.$totalservers['puerto'].'<br />';

/*cALCULAR EL UPTIME */
$num1 = 43200;
$num2 = 100;
$al =$totalservers['downtime'] / $num1 X $num2;
$totalup = 1 - $al;
mysql_query("UPDATE servers SET downtime = $totalup");}
?>

Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#27 ·

¿Ya consigues recorrer todos los registros que te interesan? SI / NO

El tema del uptime ¿lo quieres para todos los registros? ¿o solo para uno en concreto?

¿$al ya te da un valor númerico? ¿es el que quieres guardar? ¿o quieres guardar $totalup?


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#28 ·
Escrito originalmente por NoSetup.org

¿Ya consigues recorrer todos los registros que te interesan? SI / NO

El tema del uptime ¿lo quieres para todos los registros? ¿o solo para uno en concreto?

¿$al ya te da un valor númerico? ¿es el que quieres guardar? ¿o quieres guardar $totalup?

Si, ya se corren todos los registros

el uptime es para todos los registros, todo este codigo no servira para enseñar nada solo para actualizar datos a todos las filas de la db

quiero conseguir guardar la operacion

Código:
$totalservers['downtime'] / $num1 X $num2;

en $al, pero al parecer esta no esta bien codeada


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
#29 ·

A ver... se supone que ya recorres todos los registros y en ese bucle tienes a $totalup tienes un valor númerico que quieres actualizar en ese registro... por lo que cuando hagas la SQL, tendrás que decirle en cual estas... con un WHERE ID=... de esta forma, lo guardar en el registro indicado.


@man / @woman
@man / @woman
Haz clic para ver el perfil del usuario
Mensajes: 30.308
Desde: 01/Mar/2003
· ·
#30 · ·
Escrito originalmente por NoSetup.org

A ver... se supone que ya recorres todos los registros y en ese bucle tienes a $totalup tienes un valor númerico que quieres actualizar en ese registro... por lo que cuando hagas la SQL, tendrás que decirle en cual estas... con un WHERE ID=... de esta forma, lo guardar en el registro indicado.

supongo que seria asi

Código:
/*cALCULAR EL UPTIME */
$num1 = 43200;
$num2 = 100;
$al = $totalservers['downtime'] / $num1 X $num2;
$totalup = 1 - $al;
mysql_query("UPDATE servers SET downtime = $totalup WHERE id = $totalservers['id']");

 pero de todas formas algo pasa aqui, me tira un T_String en esta linea

Código:
$al = $totalservers['downtime'] / $num1 X $num2;

Dios que fallo mas tonto, en lugar de poner * en la multiplicacion puse X, ahora añado mas codigo y si necesito ayuda, posteo de momento eso ya va


Usuario habitual
Usuario habitual
Haz clic para ver el perfil del usuario
Mensajes: 34
Desde: 04/Mar/2012
·
33 Mensajes
<<  <  1  2  >  >>
ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Foro de soporte · Espacio WEB · PHP
Opciones:
Subscríbete a este tema
Date de baja de este tema
Ir al subforo:  
TU NO PUEDES Escribir nuevos temas en este foro
TU NO PUEDES Responder a los temas en este foro
TU NO PUEDES Editar tus propios mensajes en este foro
TU NO PUEDES Borrar tus propios mensajes en este foro
Ahora son las 22:59 UTC+02:00 DST
Temas similares
No se han encontrado temas similares