PHP Development
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me

The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.

Go Back   Dev Shed ForumsProgramming LanguagesPHP Development

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
  #1  
Old February 9th, 2013, 11:03 PM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
PHP MySQL Update Not Working

PHP Code:
 $queryUpdate mysql_query("UPDATE servers SET serverStatus='1', serverMessage='$serverMOTD', serverPlayersOnline='$serverPOnline', serverPlayersTotal='$serverMPlayers'") or die(mysql_error()); 

$serverMOTD $stats->motd
$serverPOnline $stats->online_players
$serverMPlayers $stats->max_players


When I use this, my rows in the database are not being updated. Well, there is one and it is serverStatus. I really think there is something wrong with using variables ($serverMPlayers).

I am not sure on what to do. Any help is greatly appreciated.
Thanks,
TJ

Reply With Quote
  #2  
Old February 10th, 2013, 12:38 AM
requinix's Avatar
requinix requinix is offline
Still alive
Click here for more information.
 
Join Date: Mar 2007
Location: Washington, USA
Posts: 12,690 requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)requinix User rank is General 120th Grade (Above 100000 Reputation Level)  Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1Folding Points: 417516 Folding Title: Super Ultimate Folder - Level 1
Time spent in forums: 5 Months 1 Week 4 Days 3 h 43 m 47 sec
Reputation Power: 8969
Send a message via AIM to requinix Send a message via MSN to requinix Send a message via Yahoo to requinix Send a message via Google Talk to requinix
You're trying to use the variables before you've actually given them values.

Reply With Quote
  #3  
Old February 10th, 2013, 03:24 AM
Jacques1's Avatar
Jacques1 Jacques1 is offline
pollyanna
Click here for more information.
 
Join Date: Jul 2012
Location: Germany
Posts: 1,861 Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 1 Day 18 h 15 m 23 sec
Reputation Power: 813
Hi,

apart from that, you need to work on the security of your code:

Do not insert raw values into query strings.
Do not display internal error messages.

Reply With Quote
  #4  
Old February 10th, 2013, 07:15 AM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
Thanks for the replies. But right now security isn't that important as I am going to rewrite my code later. I put my variables before the query and it still doesn't work.

Reply With Quote
  #5  
Old February 10th, 2013, 07:37 AM
Jacques1's Avatar
Jacques1 Jacques1 is offline
pollyanna
Click here for more information.
 
Join Date: Jul 2012
Location: Germany
Posts: 1,861 Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 1 Day 18 h 15 m 23 sec
Reputation Power: 813
Quote:
Originally Posted by tjswebdev
But right now security isn't that important as I am going to rewrite my code later.


... famous last words.

No, seriously: This isn't "only" about security. Inserting unescaped variables is technically wrong, because the whole thing will blow up with a syntax error as soon your variables happen to contain special characters like quotes, slashes, hyphens etc. If your query doesn't do anything at all, this "tiny security issue" could very well be the reason.

So don't even start with sloppy programming. Make it right from the beginning. This includes replacing the ancient mysql_ functions with one of the contemporary extensions.



Quote:
Originally Posted by tjswebdev
I put my variables before the query and it still doesn't work.


"Doesn't work" doesn't tell us anything. What exactly happens? What's the content of the variables?
PHP Code:
 var_dump($serverMOTD);  
var_dump($serverPOnline);  
var_dump($serverMPlayers); 

Last edited by Jacques1 : February 10th, 2013 at 07:47 AM.

Reply With Quote
  #6  
Old February 10th, 2013, 08:55 AM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
Quote:
Originally Posted by Jacques1
... famous last words.

No, seriously: This isn't "only" about security. Inserting unescaped variables is technically wrong, because the whole thing will blow up with a syntax error as soon your variables happen to contain special characters like quotes, slashes, hyphens etc. If your query doesn't do anything at all, this "tiny security issue" could very well be the reason.

So don't even start with sloppy programming. Make it right from the beginning. This includes replacing the ancient mysql_ functions with one of the contemporary extensions.
"Doesn't work" doesn't tell us anything. What exactly happens? What's the content of the variables?
PHP Code:
 var_dump($serverMOTD);  
var_dump($serverPOnline);  
var_dump($serverMPlayers); 




Oh. PHP is such an involving code. I'm pretty intermediate to it but this project I am doing paused me here. I'm only 16.5 so college isn't really an option at this time, so I'm stuck to reason books, tutorials, and YouTube videos. I also communicate with a few people that have been to college, but finding them is a hit an miss operation.

So enough chit-chat, I was seeing the var dump.

So is this code here correct?
PHP Code:
 $serverMOTD $stats->motd;  
$serverPOnline $stats->online_players;  
$serverMPlayers $stats->max_players


These var dumps:
PHP Code:
 var_dump($serverMOTD);  
var_dump($serverPOnline);  
var_dump($serverMPlayers); 

Should those vars be put into the main query? Instead of having just $serverMOTD

Thanks,
And sorry from any headaches!

Reply With Quote
  #7  
Old February 10th, 2013, 09:23 AM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
Alright. Amazing discovery - lol. I put the following in the body and I finally got it working - well somewhat.
PHP Code:
<?php
var_dump
($serverMOTD);
var_dump($serverPOnline);
var_dump($serverMPlayers);
?>


So, I'm not sure why but only the last server is being ran through this and it updates ALL servers in the database. Not really sure why. But here is my code:

PHP Code:
foreach(array('Server''Stats') as $file) {
    include 
sprintf('../MCServerStatus/Minecraft/%s.php'$file);
}

// I have my connection code here, but I excluded it.

$query mysql_query("SELECT * FROM servers") or die(mysql_error());
$servers = array(); 
while(
$row mysql_fetch_assoc($query)) { 
 
array_push($servers"{$row['serverIP']}"); 


foreach(
$servers as $server) {
    
$stats = \Minecraft\Stats::retrieve(new \Minecraft\Server($server));
    if(
$stats->is_online){
        
$serverMOTD $stats->motd;
        
$server;
        
$serverPOnline $stats->online_players;
        
$serverMPlayers $stats->max_players;
    } else {
        
$serverMOTD offline;
        
$server;
        
$serverPOnline offline;
        
$serverMPlayers offline;
    }
}

$queryUpdate mysql_query("UPDATE servers SET serverStatus='1', serverMessage='$serverMOTD', serverPlayersOnline='$serverPOnline', serverPlayersTotal='$serverMPlayers'") or die(mysql_error()); 

Reply With Quote
  #8  
Old February 10th, 2013, 09:57 AM
Jacques1's Avatar
Jacques1 Jacques1 is offline
pollyanna
Click here for more information.
 
Join Date: Jul 2012
Location: Germany
Posts: 1,861 Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 1 Day 18 h 15 m 23 sec
Reputation Power: 813
Quote:
Originally Posted by tjswebdev
I put the following in the body and I finally got it working - well somewhat.
PHP Code:
<?php
var_dump
($serverMOTD);
var_dump($serverPOnline);
var_dump($serverMPlayers);
?>


That's not possible. The var_dump()s were supposed to tell us the content of the variables. That's all they do.

Please put the var_dump()s after the
PHP Code:
foreach($servers as $server) {
    ...


and post the output here.

You should also turn on your error messages and fix the syntax errors with the unquoted "offline" string:
PHP Code:
 $serverMOTD offline

And what is the line
PHP Code:
 $server

supposed to do? An expression alone doesn't do anything, it's just evaluated and then discarded.



Quote:
Originally Posted by tjswebdev
So, I'm not sure why but only the last server is being ran through this and it updates ALL servers in the database. Not really sure why.


As long as you don't have a condition in your UPDATE query, the query will indeed update every single row in the table. That's how SQL works. If you only want to update certain rows, you need to actually specify them with a WHERE clause:
http://dev.mysql.com/doc/refman/5.5/en/update.html

Reply With Quote
  #9  
Old February 10th, 2013, 11:59 AM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
Quote:
Originally Posted by Jacques1
That's not possible. The var_dump()s were supposed to tell us the content of the variables. That's all they do.

Please put the var_dump()s after the
PHP Code:
foreach($servers as $server) {
    ...


and post the output here.

You should also turn on your error messages and fix the syntax errors with the unquoted "offline" string:
PHP Code:
 $serverMOTD offline

And what is the line
PHP Code:
 $server

supposed to do? An expression alone doesn't do anything, it's just evaluated and then discarded.





As long as you don't have a condition in your UPDATE query, the query will indeed update every single row in the table. That's how SQL works. If you only want to update certain rows, you need to actually specify them with a WHERE clause:
http://dev.mysql.com/doc/refman/5.5/en/update.html


I want to let you know I have got the script working. I want to thank you for your help. Do you want to know what I did?

Reply With Quote
  #10  
Old February 10th, 2013, 03:16 PM
Jacques1's Avatar
Jacques1 Jacques1 is offline
pollyanna
Click here for more information.
 
Join Date: Jul 2012
Location: Germany
Posts: 1,861 Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 1 Day 18 h 15 m 23 sec
Reputation Power: 813
Quote:
Originally Posted by tjswebdev
Do you want to know what I did?


Sure.

Reply With Quote
  #11  
Old February 10th, 2013, 03:18 PM
tjswebdev tjswebdev is offline
Contributing User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 69 tjswebdev User rank is Private First Class (20 - 50 Reputation Level)tjswebdev User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 14 h 5 m 2 sec
Reputation Power: 1
Send a message via Skype to tjswebdev
Quote:
Originally Posted by Jacques1
Sure.


All I had to do was copy the line to both.

PHP Code:
foreach($servers as $server) {
    
$stats = \Minecraft\Stats::retrieve(new \Minecraft\Server($server));
    if(
$stats->is_online){
        
$serverStatus 1;
        
$serverMOTD $stats->motd;
        
$server;
        
$serverPOnline $stats->online_players;
        
$serverMPlayers $stats->max_players;
        
$serverVersion $stats->game_version;
        
$queryUpdate mysql_query("UPDATE servers SET serverStatus='$serverStatus', serverMessage='$serverMOTD', serverPlayersOnline='$serverPOnline', serverPlayersTotal='$serverMPlayers', serverVersion='$serverVersion' WHERE serverIP='$server'") or die(mysql_error());
    } else {
        
$serverStatus 0;
        
$serverMOTD '?';
        
$server;
        
$serverPOnline '?';
        
$serverMPlayers '?';
        
$serverVersion '?';
        
$queryUpdate mysql_query("UPDATE servers SET serverStatus='$serverStatus', serverMessage='$serverMOTD', serverPlayersOnline='$serverPOnline', serverPlayersTotal='$serverMPlayers', serverVersion='$serverVersion' WHERE serverIP='$server'") or die(mysql_error());
    }


Reply With Quote
Reply

Viewing: Dev Shed ForumsProgramming LanguagesPHP Development > PHP MySQL Update Not Working

Developer Shed Advertisers and Affiliates



Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump

Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 


Powered by: vBulletin Version 3.0.5
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.

© 2003-2013 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap