mmofacts.com

Php problem

gepostet vor 19 Jahre von mountainman
Hi
ich bin atm dabie nen browsergame zu entwickeln, nun hab ich nen kleines problem mit nem script
 


//baumeister.php



mysql_connect("localhost", "root", "");
mysql_select_db("mygame");


$auslesen = "select * from planeten WHERE ID = '1'";
$ausgabe = mysql_query($auslesen);

if (mysql_num_rows ($ausgabe) > 0)


{


// Benutzerdaten in ein Array auslesen.


$data = mysql_fetch_array ($ausgabe);

$data["onbuild"];
$data["onbuild_building"];
$data["finish_time"];





}
$time = time();


if ($data["onbuild"]=1)
{


$timeless = $data["finish_time"] - time();

if ($data["finish_time"] > $time)
{

echo "Es werden noch";
echo $timeless ;
echo "secunden an dem gebäude :";
echo $data["onbuild_building "];
echo "gebaut.";
}


if ($data["finish_time"]< time())
{


$sql = " UPDATE
planeten
SET
onbuild= '0',
WHERE
ID = '1';";
mysql_query($sql) OR die("Fehler: ".mysql_error());


}
}


if ($data["onbuild"]=0)
{
?>
bauen
}
?>


die fehlermeldung lautet :

Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID = '1'' at line 5

wehre schön wenn mir jemand dabie helfen könnte .

mfg mountainman
gepostet vor 19 Jahre von Kampfhoernchen
Den Fehler kenne ich:

$sql = " UPDATE
planeten
SET
onbuild= '0',
WHERE
ID = '1';";
mysql_query($sql) OR die("Fehler: ".mysql_error());

Das Komma bei onbuild= '0', is zu viel. Stand wohl vorher noch was zwischen dem onbuild= '0', und dem Where, was dann rausgelöscht wurde. Bei großen Querry wird die Suche da echt schwierig.
gepostet vor 19 Jahre von mountainman
jo thx die Fehlermeldung ist weck.
aber wenn in der db bei onbild 0 steht, dann wird trozdem nicht der link zum bauen angezeigt, das versteh ich irgendwie überhupt nicht.
gepostet vor 19 Jahre von Klaus
da hilft nur debuggen, denn logische Fehler passieren immer wieder. :wink:
gepostet vor 19 Jahre von TheUndeadable
PHP ist eine relative typlose Sprache, daher würde ich bei allen Arbeiten mit Zahlen intval nutzen, wenn du diese aus den Request-Variablen oder aus der Datenbank erhalten hast

Konkret:
if ( intval ( $data [ 'onbuild' ] ) == 1 )

BTW:
Es heißt == (Vergleichsoperator ) nicht = (Zuweisungsoperator)
Wir sind hier nicht in BASIC ;-)
gepostet vor 19 Jahre von mountainman
thx das wars wohl was ich vertauscht hatte ......
leuft jetzt alles soweit....
gepostet vor 19 Jahre von Kampfhoernchen
Original von TheUndeadable
PHP ist eine relative typlose Sprache, daher würde ich bei allen Arbeiten mit Zahlen intval nutzen, wenn du diese aus den Request-Variablen oder aus der Datenbank erhalten hast

Konkret:
if ( intval ( $data [ 'onbuild' ] ) == 1 )

BTW:
Es heißt == (Vergleichsoperator ) nicht = (Zuweisungsoperator)
Wir sind hier nicht in BASIC ;-)


Etwas mehr performance bringt (int):
(int)$data [ 'onbuild' ] == 1

Wobei wenn was aus der Datenbank kommt, kann man eigentlich sicher sein, man schön ordentlich mit NOT NULL gearbeitet hat, kann man eigentlich sicher sein, dass das was da kommt ein Integer ist.
gepostet vor 19 Jahre von dama
was anderes...
$auslesen = "select * from planeten WHERE ID = '1'";


* ist immer bisserl lahm.. also wenn geht benennen.

anscheinend ist ' schneller als "; du mixt da

if ($data["onbuild"]=0)

{
?>
bauen
}


fehlt da nicht nen =
also

if ($data['onbuild'] == 0)....

ODER

if(empty($data['onbuild'])).....

und dazu gleich nochwas... strings sind immer schneller

also wenn du nen array what ever öfter benutzt... packs innen string

$data_onbuild = intval($data['onbuild']);
gepostet vor 19 Jahre von mountainman
erst mal thx für die tipps.

fehlt da nicht nen =


ja da fehlt nen = und nicht nur dort, deswegen haben die if anweißungen ja auch nicht funktioniert...... Ich hab halt nicht daran gedacht , das ich in php 2*"=" hinschreiben muss und nicht wie in basic nur ein "=" .....

noch ma thx an TheUndeadable

so und jetzt schreib ich die scripts nen bisschen um damit die auch schneller werden ......

mfg mountainman
gepostet vor 19 Jahre von dama
dann hab ich gleich noch nen tipp für dich...

wenn du prüfen möchtest, ob typ UND inhalt zweier variblen identisch sind, dann benutze einfach === statt ==

bsp.

$var_1 = 10; // variable vom typ int
$var_2 = "10"; // variable vom typ string

if($var_1 == $var_2) echo "ok vergleich 1"; // hier gibts ne erfolgsmeldung

if($var_1 === $var_2) echo "ok vergleich 2"; // hier nicht

if($var_1 === (int)$var_2) echo "ok vergleich 3"; // hier gibts ne erfolgsmeldung
gepostet vor 19 Jahre von Mays
Wo wir gerade bei = sind, wenn ich etwas mit Datenbanken machen schreibe ich meistens like statt =, gibt es da eigendlich einen Unterschied?
"SELECT id, auto FROM `user` WHERE id LIKE 4";
statt
"SELECT id, auto FROM `user` WHERE id = 4";
ich mache das damit ich nicht durcheinander komme.
gepostet vor 19 Jahre von knalli
Da man mit "=" nicht wie bei "LIKE" einen Platzhalter verwenden kann (spalte = '%wert' findet nur spalten mit %wert; spalte LIKE '%wert' findet spalte awert, kwert, wert und xyzwert), denke ich, dass die Variante "=" schneller ist. Analog zu der Situation mit dem einfachen und doppeltem Hochkomma in PHP.

Liege ich damit richtig?
gepostet vor 19 Jahre von Feagor
Ja, = ist um einiges schneller, weil halt die Wildcards (%) nicht überprüft werden müssen. Ist zumindest bei String-Feldern so, bei Zahlen o.ä. hab ich das noch nie probiert.

Auf diese Diskussion antworten