-
Update database
Salut. Am o mica problema cu update-ul bazei de date.
Ca sa fiu mai pe inteles. Am o baza de date, cu tabele TABELA unde am 200 de inregistrari, iar fiecare inregistrare are status = 0.
Acum vine faza unde trebuie sa fac update la tabela cu statusul 0 ( ramane asa ), respectiv 1, iar aceasta imi face update, dupa ce un script mic imi verifica statusul lor.
Asta este pentru un site cu servere de jocuri si vreau sa le verific non stop si sa le fac update, cand este online/offline.
Am incercat cu, codul
Cod PHP:
$select = mysql_query("SELECT ip from servere");
WHILE ($row = mysql_fetch_array($select)){
$ip = $row['ip'];
$status = $data['status'];
if (!$status == 1){
$update = mysql_query("UPDATE servere SET status ='0' WHERE ip ='".$ip."'");
}
else{
$update =mysql_query("UPDATE servere SET status =1 WHERE ip ='".$ip."'");
}
Problema mea e, ca nu imi ia decat o inregistrare din baza de date, adica prima. Cum pot sa le extrag pe toate deodata si sa le faca update, cu statusul respectiv?
Multumesc
-
in primul rand foloseste mysql_fetch_assoc in loc la ..._array ( pt performanta)
in al doilea rand if(!status==1) este gresit, probabil vroiai sa pui if($status!=1) .In PhP nu folosi variabile gen $status cu val 0 sau 1 pentru ca in ifuri sau alte functii de conditii acestea pot fi tratate ca tipuri booleane
Cum ai scris tu intotdeauna o sa intre pe else.
-
Cod PHP:
<?
$select = mysql_query("SELECT ip, status from servere");
WHILE ($row = mysql_fetch_row($select))
{
$ip = $row[0];
$status = $row[1];
if ($status == 0)
{
$update = mysql_query("UPDATE servere SET status = '0' WHERE ip = '$ip' LIMIT 1");
}
else
{
$update = mysql_query("UPDATE servere SET status = '1' WHERE ip = '$ip' LIMIT 1");
}
}
?>
-
din ce am inteles, $status este setat de o functie care verifica statusul serverului si iti returneaza starea curenta a acestuia. dar in loop-ul tau vad ca ai $status=$data['status']; ceea ce inseamna ca statusul este preluat dintr-o alta variabila ($data), care este setata in afara loop-ului (deci fara a lua in calcul serverul curent) si care intotdeauna va avea aceeasi valoare.
-
Da, asa este. Imi cer scz ca nu m-am exprimat mai corect, dar era cam tarziu! Inca nu am reusit sa fac update-ul la fiecare server in parte, pentru ca si atunci cand un server este offline, tot imi introduce status = 1 ( server online ).
Deci eu am scriptul complet asa
Cod PHP:
include('Servers.php');
$select = mysql_query("SELECT ip, status from servere");
WHILE ($row = mysql_fetch_row($select))
{
$ip = $row[0];
$onoff = array('server 1' => array('cs', ''.$ip.''),);
$gq = new Servers();
$gq->addServers($onoff);
$gq->setOption('timeout', 200);
$gq->setFilter('normalise');
$gq->setFilter('sortplayers', 'gq_ping');
$results = $gq->requestData();
foreach ($results as $id => $data)
$gqs = array('gq_online', 'gq_address', 'gq_port', 'gq_prot', 'gq_type');
$online = $data['gq_online'];
if ($online == 0)
{
$update = mysql_query("UPDATE servere SET status = '0' WHERE ip = '$ip' LIMIT 1");
}
else
{
$update = mysql_query("UPDATE servere SET status = '1' WHERE ip = '$ip' LIMIT 1");
}
}
Statisticile pentru un singur server, nu e problema, imi returneaza rezultatul corect, dar la o lista de servere, la care vreau sa le fac update, imi returneaza toate statusul 1, cu toate ca unele sunt offline!