PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitüberschreitung?



Darkmiller
28.12.2008, 15:31
Moin Leute,

ich habe anscheinend einen Fehler, der darin liegt, dass die Datei angeblich zu lange lädt, hier der Fehler:

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\BWG\weapons\weapon01.php on line 11


<?php
session_start();
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('user', $db);
class weapon01{
private $name = "Stock";
private $preis = 10;
private $dmg = 5;
public function atk($str, $gegner) {
$sql = "SELECT `char`.`le` FROM `user` WHERE `char`.`id` = '$gegner'";
$leben = mysql_query($sql);
$schaden = $str + $dmg;
if($schaden > 0){
$leben = $leben - $schaden;
}
if($leben <= 0){
$leben = 1;
}
$sql = "UPDATE `user`.`char` SET `le` = '$leben' WHERE `char`.`id` = '$gegner'";
$result = mysql_query($sql);
}
public function ausgeben(){
echo $this->name;
}
};
?>

Wie man sieht will er da was aus der Datenbank lesen, wtf ist das verfickte problem^^?

Darkraiser
28.12.2008, 15:58
hmm ich kenn mich zwar mit Php nicht so sonderlich aus ... aber muss die SQL anweisung nicht mit , getrennt werdn anstatt mit . ???

also imprinzip so..


'user', 'username', 'password', 'database'

Darkmiller
28.12.2008, 16:01
ne daran liegt es leider nicht, ich vermute, das die Datenbank überlastet ist, da die Klasse von einer Datei aufgerufen wird die ebenfalls auf die Datenbank zugreift, was aber wenig sinn macht^^

ich hab eine neue idee, weiß aber nicht wie genau ich das verwirklichen soll, und zwar will ich den Wert der Leben wieder zurück an die Seite geben, die die Klasse aufruft, nur wie nehme ich diesen Wert an?

Cout
28.12.2008, 16:24
ne daran liegt es leider nicht, ich vermute, das die Datenbank überlastet ist, da die Klasse von einer Datei aufgerufen wird die ebenfalls auf die Datenbank zugreift, was aber wenig sinn macht^^


Blödsinn, wie willst du in der Klasse daten abfragen wenn du keinen handle übergibst oder dich neu zur Datenbank verbindest?

Hier ein paar Anmerkungen.



<?php

// Du musst dir angewöhnen den Code einzurücken

// Ich sehe nirgendwo das du dir die Mühe machst und
// nachschaust was Mysql für einen Fehler angibt:
// if (mysql_errno) echo mysql_error ();
// Der Fehler wird angezeigt.

// Bau dir lieber deine eigene session Funktion
session_start();

// Wo ist deine MySql Klasse
$db = mysql_connect('localhost', 'root', '');

// Hier gibst du auch ein handle an aber in der Klasse nicht sehr schlau!
mysql_select_db('user', $db);


// Wo übergibst du den handle von der datanbank?
class weapon01
{
private $name = "Stock";
private $preis = 10;
private $dmg = 5;

// MySql handle
private $handle = null;


/**
* @name __construct
* @desc Konstruiert die Klasse
* @access public
* @param int
*/
public function _construct( $param )
{
$this -> handle = $param;
}

/**
* @name atk
* @desc ?
* @access public
* @param int
* @param int
*/
// überleg dir besser namen für die methoden , varibalen
// und alle anderen bezeichnungen auch in der datenbank
public function atk( $str , $gegner )
{
// Wo überprüfst du ob $gegener ein int ist. Ganz böser fehler.
// Du hast limit vergessen
$sql = "SELECT `char`.`le` FROM `user` WHERE `char`.`id` = '$gegner'";
// Ohne handle kannst du wohl kaum auf die Datenbank zugreifen!
// Oder wo glaubst du kommen die Zugangsdaten her?
$leben = mysql_query( $sql /* */ , $this -> handle);

$schaden = $str + $dmg;

// übersichtlicher
if( $schaden > 0 ) $leben = $leben - $schaden;
if($leben <= 0) $leben = 1;

// Bitte mit , trennem
$sql = "UPDATE `user`.`char` SET `le` = '$leben' WHERE `char`.`id` = '$gegner'";
// Ohne handle kannst du wohl kaum auf die Datenbank zugreifen!
$result = mysql_query( $sql /* */ , $this -> handle );
}

/**
* @name ausgeben
* @desc Gibt den namen aus
* @access public
*/
public function ausgeben(){
echo $this -> name;
}
};
?>

Hier mal eine kleine MySql KLasse von mir:



<?php

/**
* @name sql
* @desc connect to the database
* @access public
*/
class sql
{


/**
* @name host
* @desc get the host addr
* @access private
* @var string
*/
private $host;


/**
* @name host
* @desc get the user name
* @access private
* @var string
*/
private $user;


/**
* @name passwort
* @desc get the passwort
* @access private
* @var string
*/
private $password;


/**
* @name db
* @desc get the db name
* @access private
* @var string
*/
private $db;

/* IDs */
public $link_id = 0;
public $query_id = "";


/**
* @name __construct
* @desc
* @param string
* @param string
* @param string
* @param string
* @access public
* @return bool
*/
public function __construct( $host , $user , $password , $db )
{
try
{
$this -> host = $host;
$this -> user = $user;
$this -> password = $password;
$this -> db = $db;
$this -> connect();
} catch ( Exception $e ) {
echo $e -> getMessage();
die();
}
return true;
}



/**
* @name connect
* @desc connect to the database
* @access private
* @return bool
*/
private function connect()
{
$this -> link_id = mysql_connect( $this -> host, $this -> user, $this -> password);
if ( !$this -> link_id ) throw new Exception( 'Link-ID == false, connect failed' );
if ( !empty( $this -> db ) ) mysql_select_db($this -> db, $this -> link_id);
else throw new Exception( 'Database was not defined' );
return true;
}


/**
* @name query
* @desc send a query to the database
* @param string
* @param int [optional]
* @param int [optional]
* @access public
* @return string
*/
public function query( $query_string , $limit=0 , $offset=0 )
{
try
{
if($limit!=0) $query_string.=" LIMIT $offset, $limit";
$this -> query_id = mysql_query( $query_string,$this -> link_id );
if ( !$this -> query_id ) throw new Exception( $query_string );
} catch ( Exception $e ) {
echo '
<style lang="text/css">
<!--
table { margin:30px auto; border:1px solid #666; }
thead { background-color:#d4d4d4; }
td { padding:10px; }
-->
</style>


<table rules="all">
<thead>
<tr><td colspan="2"> Database error</td></tr>
</thead>
<tbody>
<tr><td> query:</td><td> ' . $e -> getMessage() . '</td></tr>
<tr><td> mysql error:</td><td> ' . mysql_error().'</td></tr>
<tr><td> location:</td><td> ' . $e -> getFile().'</td></tr>
<tr><td> mysql error number:</td><td> ' . mysql_errno().'</td></tr>
<tr><td> php version:</td><td> ' . phpversion().'</td></tr>
<tr><td> Date:</td><td> ' . date('d.m.Y @ H:i').'</td></tr>
<tr><td> Script:</td><td> ' . getenv('REQUEST_URI').'</td></tr>
<tr><td> Referer:</td><td> ' . getenv('HTTP_REFERER').'</td></tr>
</tbody>
</table>';
die();
}
return $this -> query_id;
}


/**
* @name fetch_array
* @desc fetch a result row as an associative array, a numeric array, or both
* @param int
* @access public
* @return array
*/
public function fetch_array( $result )
{
return mysql_fetch_array( $result );
}


/**
* @name num_rows
* @desc get number of rows in result
* @param int
* @access public
* @return int
*/
function num_rows( $query_id = -1 )
{
if ( $query_id != -1 ) $this -> query_id = $query_id;
return mysql_num_rows( $this -> query_id );
}


/**
* @name affected_rows
* @desc get number of affected rows in previous MySQL operation
* @access public
* @return int
*/
function affected_rows()
{
return mysql_affected_rows( $this -> link_id );
}


/**
* @name num_rows
* @desc get the ID generated from the previous INSERT operation
* @access public
* @return int
*/
function insert_id()
{
return mysql_insert_id( $this -> link_id );
}

};


?>


EDIT:

ch hab eine neue idee, weiß aber nicht wie genau ich das verwirklichen soll, und zwar will ich den Wert der Leben wieder zurück an die Seite geben, die die Klasse aufruft, nur wie nehme ich diesen Wert an?

Bitte was? Du initalisierst die KLasse rufst die Methode auf und gibts ein return zurück. Oder was willst du machen`?

PS Was willst du den für ein Browsergame schreiben?

Added after 23 hours 2 minutes:

Hast du es hinbekommen? Wenn nicht Frag einfach ich hab heute und morgen nichts zutun.