PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script wird doppelt ausgeführt



GU4RDI4N
30-12-2005, 18:28
hi,
ich hab ein problem mit einem "längeren" script:
http://dd3.dd.funpic.de/game/game.php.txt

Das problem ist das es aus irgenteinem übersinnlichen grund inmmer doppelt ausgeführt wird.
es gibt zwar nur 1ne ausgabe der echo-ausgaben(vom ersten durchlauf),
aber alle mysql-querys, datei-schreiben oda sonstiges erfolgt zweimal.


da der fehler in dem teil sein muss der immer ausgeführt wird,
kann ich es auf folgendes beschränken:


<?php


@include 'settings.php';

$m_fd = @mysql_connect($m_hs,$m_un,$m_pw);
@mysql_select_db($m_db);

$un = @$_POST["un"]; if($un=="") {@$un =$_GET["un"];}
$key = @$_POST["key"]; if($key==""){@$key=$_GET["key"];}

$ok=1;
if($un==""){$ok=0;}
if($key==""){$ok=0;}

$key2=@implode("",mysql_fetch_row(@mysql_query('SELECT gkey FROM user WHERE un="'.$un.'"')));
$time=@implode("",mysql_fetch_row(@mysql_query('SELECT time FROM user WHERE un="'.$un.'"')));

if($key!=$key2) {$ok=0;}
if($time<time()){$ok=0;}

if($ok==1)
{
mysql_query('UPDATE user SET time="'.(time()+600).'" WHERE un="'.$un.'"');

$url=$_GET["url"];
if($url==""){$url=$_POST["url"];}
if($url==""){$url="home";}

echo implode("",file("style_oben.txt"));

$stop=2;$anz=1;$anzb=0;
while($stop==2)
{
$b_un=@implode("",mysql_fetch_row(mysql_query('SELECT nach FROM mails WHERE ID='.$anz)));
if($un==$b_un){$anzb=$anzb+1;}
if($b_un==""){$stop=1;}
$anz=$anz+1;
}

echo ' <div style="position:absolute;top:75px;left:189px"><img src="'.$logo.'" height=80 width=650 alt="LOGO"></div>
<div style="position:absolute;left:80px;top:220px;">

<div style="position:absolute;left:0px;top:0px;">
<a href="game.php?key='.$key.'&un='.$un.'&url=home">
<table border=5 width=110 bgcolor="#000000"><tr><td>Home</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:50px;"><a href="game.php?key='.$key.'&un='.$un.'&url=computer">
<table border=5 width=110 bgcolor="#000000"><tr><td>Computer</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:100px;"><a href="game.php?key='.$key.'&un='.$un.'&url=mail">
<table border=5 width=110 bgcolor="#000000"><tr><td>Mails('.$anzb.')</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:150px;"><a href="game.php?key='.$key.'&un='.$un.'&url=internet">
<table border=5 width=110 bgcolor="#000000"><tr><td>Internet</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:200px;"><a href="game.php?key='.$key.'&un='.$un.'&url=banner">
<table border=5 width=110 bgcolor="#000000"><tr><td>Banner</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:250px;"><a href="game.php?key='.$key.'&un='.$un.'&url=shop">
<table border=5 width=110 bgcolor="#000000"><tr><td>Shop</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:300px;"><a href="game.php?key='.$key.'&un='.$un.'&url=member">
<table border=5 width=110 bgcolor="#000000"><tr><td>Member</td></tr></table></a></div>

<div style="position:absolute;left:0px;top:350px;"><a href="game.php?key='.$key.'&un='.$un.'&url=logout">
<table border=5 width=110 bgcolor="#000000"><tr><td>Logout</td></tr></table></a></div>

</div>';



...
[Vieles Zeug das nich ausgef&uuml;hrt wird]
...



echo '<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>';

echo implode("",file("style_unten.txt"));
}

else
{
if($ok==0 && $m_fd) echo 'Sie sind nicht Eingeloggt!<br><br><a href="index.php?url=login">zum login</a>';
if(!$m_fd) echo 'Keine Verbindung zur DatenBank!';
}



?>


wenn ihr so nett währt diesen fehler zu finden wär ich euch sehr dankbar^^

quinte17
01-01-2006, 10:44
also für deine einlogg strategie rate ich dir sessions zu benutzen.

für deine mysql_query strategie rate ich dir auch noch zu überprüfen ob die query denn erfolgreich war oder nicht.

desweiteren ein mysql_fetch_row(@mysql_query) konstrukt zu verwenden ist wirklich schlecht. du unterdrückst zwar den fehler von mysql_query, bekommst aber den fehler von mysql_fetch_row trotzdem wenn die query nicht funzt... desweiteren machen solche sachen den code unübersichtlicher.

und ich glaube nicht, dass wenn alles angeblich doppelt ausgeführt wird, dass dann der output nur 1 mal kommt... dies würde ich nochmals überprüfen

greetz

GU4RDI4N
01-01-2006, 11:34
ich selber finds ja auch komisch, is aba so.

wenn ich in den code schreibe:


echo mysql_query('INSERT INTO test_table (a,b,c) VALUES ("1","2","3")');
echo " - fertig";


seh ich im browser:


1 - fertig


und in der DB steht:


ID | a | b | c
-------------
1 | 1 | 2 | 3
2 | 1 | 2 | 3



am server liegts nich,
weil ich aufm funpic server genau das gleiche ergebniss kriege.
und mit mehreren browsern hab ichs auch schon probiert.

Turbohummel
01-01-2006, 21:38
Mach mal nen die() direkt nach dem absetzen des Querys. Auch wenn sich mir der Fehler auch nicht so ganz erschließt.

BLUESCREEN3D
01-01-2006, 23:48
Guck mal in der Log-Datei des Webservers, ob das Script in der gleichen Sekunde mehrmals abgerufen wird.

GU4RDI4N
02-01-2006, 00:42
das ich auf die logs nich selber gekommen bin^^
das sieht SEHR eigenartig aus:
bilder und grafiken wurden nur 1mal aufgerufen, aber das script 2x

edit:
hier ein ausschnitt:


127.0.0.1 - - [05/Jan/2000:00:51:54 -0500] "GET /game/game.php?url=home&un=asd&key=13724818 HTTP/1.1" 200 2795 "http://localhost/game/index.php" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:51:57 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1362 "http://localhost/game/game.php?url=home&un=asd&key=13724818" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:51:57 -0500] "GET /game/game.php?url=home&un=asd&key=13724818 HTTP/1.1" 200 2795 "http://localhost/game/game.php?url=home&un=asd&key=13724818" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:05 -0500] "GET /game/game.php?key=13724818&un=asd&url=internet HTTP/1.1" 200 4126 "http://localhost/game/game.php?url=home&un=asd&key=13724818" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:05 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1370 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:05 -0500] "GET /game/game.php?key=13724818&un=asd&url=internet HTTP/1.1" 200 4126 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:07 -0500] "GET /game/game.php?key=13724818&un=asd&url=mail HTTP/1.1" 200 3046 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:07 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1362 "http://localhost/game/game.php?key=13724818&un=asd&url=mail" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:07 -0500] "GET /game/game.php?key=13724818&un=asd&url=mail HTTP/1.1" 200 3046 "http://localhost/game/game.php?key=13724818&un=asd&url=mail" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:08 -0500] "GET /game/game.php?key=13724818&un=asd&url=downloads HTTP/1.1" 200 2879 "http://localhost/game/game.php?key=13724818&un=asd&url=mail" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:08 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1372 "http://localhost/game/game.php?key=13724818&un=asd&url=downloads" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:09 -0500] "GET /game/game.php?key=13724818&un=asd&url=downloads HTTP/1.1" 200 2879 "http://localhost/game/game.php?key=13724818&un=asd&url=downloads" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:10 -0500] "GET /game/game.php?key=13724818&un=asd&url=internet HTTP/1.1" 200 4126 "http://localhost/game/game.php?key=13724818&un=asd&url=downloads" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:10 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1370 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:10 -0500] "GET /game/game.php?key=13724818&un=asd&url=internet HTTP/1.1" 200 4126 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:11 -0500] "GET /game/game.php?key=13724818&un=asd&url=mail HTTP/1.1" 200 3046 "http://localhost/game/game.php?key=13724818&un=asd&url=internet" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:11 -0500] "GET /game/images/bin.PNG HTTP/1.1" 404 1362 "http://localhost/game/game.php?key=13724818&un=asd&url=mail" "Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.6) Gecko/20040114"
127.0.0.1 - - [05/Jan/2000:00:52:11 -0500] "GET /game/game.php?key=13724818&un=asd&url=mail HTTP/1.1" 200 3046

undefined
02-01-2006, 15:43
Seht euch mal die while Schleife etwas genauer an ;)

quinte17
02-01-2006, 16:09
Seht euch mal die while Schleife etwas genauer an ;)
ja stimmt schon da wird der SELECT 2 mal ausgeführt, ist aber nicht das problem hier...

greetz

GU4RDI4N
04-01-2006, 10:22
Jetz weis ich es,
Die variable $logo oben is leer,
und hat dadurch ein <img src=""> verursacht,
was mit <img src="game.php?blablabla"> interpretiert wurde.
hab den fehler eben hoben^^

Pingu
04-01-2006, 12:26
Seht euch mal die while Schleife etwas genauer an ;)
Wobei die wirklich nicht schön ist.

Ich würde es eher derart machen:
$anz = 0;
$anzb = 0;

do {

$query = sprintf("SELECT nach FROM mails WHERE ID = %d", ++$anz);
$result = mysql_query($query);

// falls die Ausführung fehl schlägt
if (!$result) break;

$queryRes = mysql_fetch_object($result);

$anzb += ($un == $queryRes->nach) ? 1 : 0;

} while (!empty($queryRes->nach)));


Denn das schafft meiner Meinung nach mehr Übersichlichkeit.

Oder man nutzt gleich die Möglichkeiten der Datenbank:

$anzb = 0;
$query = sprintf("SELECT m1.ID AS anzahl ");
$query .= sprintf("FROM mails AS m1, mails AS m2 ");
$query .= sprintf("WHERE ((m1.ID + 1) = m2.ID) AND (m1.nach != '') AND (m2.nach == '') ");
$query .= sprintf("ORDER BY m2.ID LIMIT 1");
$result = mysql_query($query);

if ($result) {

$queryRes = mysql_fetch_object($result);
$anzb = $queryRes->anzahl;

} // if ($result)

Der Nachteil meiner zweiten Lösung ist, daß die Abfrage länger dauert als eine einzelne Abfrage wie in der ersten Version.
Der Vorteil ist, daß es nur eine Abfrage ist. Denn man muß bedenken, daß es auch dauert bis eine Anfrage von PHP an die Datenbank durchgereicht wurde und bis das Ergebnis von der Datenbank an PHP zurückgeliefert wird. Dies macht sich insbesondere dann bemerkbar, wenn die Datenbank auf einem getrennten Rechner läuft und somit jede Anfrage auf beiden Seiten noch über den TCP/IP-Stack durchgereicht werden muß.

Pingu

GU4RDI4N
04-01-2006, 14:22
die schleife hab ich inzwischen garnichtmehr im code,
is von daher also auch egal.

edit:
hab aber nen neues prob:
ich will eine mail senden mit


<?php

echo mail("GU4RDI4N@gmx.net","test","123test456abc789");

?>


es gibt keine fehlermeldung,
und keine versendete mail.
was mach ich falsch?

(hab ich von http://www.phpbox.de/php_tutorials/formularversenden2.php)

Pingu
04-01-2006, 14:32
Dann ist Dein Mailer (MTA, z.B. sendmail oder postfix) nicht richtig eingerichtet. Er nimmt die mail von PHP zwar entgegen (deswegen keine Fehlermeldung von PHP), aber weiß dann nicht was er damit tun soll. Also in den Logs vom Mailer nachsehen.

Pingu

Turbohummel
04-01-2006, 14:42
Bzw. prüfen ob die Mail-Funktion vom Hoster unterstützt wird.

GU4RDI4N
04-01-2006, 16:05
ok,
ich hab mal nachgesehen,
und bemerkt das postfix vorinstalliert ist.

also hab ich gegoogelt, was gefunden, und versucht mein postfix zu konfigurieren.

aber das funzt nicht so ganz.
logs:


Jan 20 21:42:39 linux postfix/pickup[9347]: D586C4DF00: uid=30 from=<wwwrun>
Jan 20 21:42:39 linux postfix/cleanup[10306]: D586C4DF00: message-id=<20000121024237.D586C4DF00@linux.site>
Jan 20 21:42:44 linux postfix/qmgr[9348]: D586C4DF00: from=<wwwrun@linux.site>, size=305, nrcpt=1 (queue active)
Jan 20 21:42:45 linux postfix/smtp[10859]: connect to mx0.gmx.net[213.165.64.100]: server dropped connection without sending the initial SMTP greeting (port 25)
Jan 20 21:42:45 linux postfix/smtp[10859]: connect to mx0.gmx.de[213.165.64.100]: server dropped connection without sending the initial SMTP greeting (port 25)

(von http://people.freenet.de/howto/postfix.html)

bei GMX steht das man das passwort und kundennummer bei der software mit angeben soll, nur wie geht das bei postfix?

edit:
ok, nun bin ich weitergekommen,
aber er kommt mit der smtp_auth nicht zurecht:


mail.gmx.net 27308426:XXX


(27308426 is meine kundenummer, XXX symboliesiert mein passwort)

dann hab ich "postmap smtp_auth" ausgeführt,
wies in dem tutor steht,
und dann das script neugeladen.
ergebniss:

logs:


Jan 20 22:58:35 linux postfix/pickup[20076]: 4ADAF4DF6C: uid=30 from=<wwwrun>
Jan 20 22:58:35 linux postfix/cleanup[22591]: 4ADAF4DF6C: message-id=<20000121035835.4ADAF4DF6C@localhost>
Jan 20 22:58:38 linux postfix/qmgr[9348]: 4ADAF4DF6C: from=<wwwrun@localhost.domain.tld>, size=313, nrcpt=1 (queue active)
Jan 20 22:58:38 linux postfix/smtp[22655]: fatal: open dictionary: need "type:name" form instead of: "/etc/postfix/smtp_auth"
Jan 20 22:58:39 linux postfix/master[9346]: warning: process /usr/lib/postfix/smtp pid 22655 exit status 1
Jan 20 22:58:39 linux postfix/master[9346]: warning: /usr/lib/postfix/smtp: bad command startup -- throttling



in dem tutor steht nur ich sollschreiben:
[host] [name]:[passwort]

aber das funzt irgentwie nicht

(tutor: http://www.tuxhausen.de/frameset/postfix_smtp_auth_frameset.html)

edit:
ich hab weiter gegoogelt,
und gelesen das gmx den richtigen absender haben will,
den hab ich dann zu "GU4RDI4N@gmx.net" geändert.
aber in den logs steht als absender dann immer:
wwwrun@GU4RDI4N@gmx.net

wie bekomm ich das wwwrun@ weg?