anpera.net
https://anpera.homeip.net/phpbb3/

Arbeitsamt
https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=3205
Seite 2 von 2

Autor:  Linus [ Fr 13 Mär, 2009 23:30 ]
Betreff des Beitrags:  Re: Arbeitsamt

Ja die sind wohl egal, denke ich! :)

Autor:  Lyn [ So 15 Mär, 2009 17:55 ]
Betreff des Beitrags:  Re: Arbeitsamt

-----

Autor:  vernisage [ Fr 15 Jul, 2011 14:22 ]
Betreff des Beitrags:  Re: Arbeitsamt

Servus!
Ich brauche eure Hilfe. Vllt seh ich den Wald vor lauter Bäumen nicht.
Habe bei mir ebenfalls eine Art Stellenmarkt und mir komplette Teile von der arbeit.php übernommen. Mit Angabe im Quelltext :P.
Soweit alles super. Nun möchte ich in meiner Ruhmeshalle jedwede Bürger mit ihren Anstellungen anzeigen lassen.
Quasi so:

Name des Bürgers | Name der Anstellung
vernisage | Schreiberin

Wenn ich mich mal als Bsp nehmen darf :P.

Ihr versteht, worauf ich hinaus will, richtig?

In meiner hof.php habe ich wie folgt eingesetzt:

PHP:
////////////////
// ANSTELLUNGEN
else if ($_GET[op]=="arbeit"){
output("In diesem Nebenraum der Ruhmeshalle findest du eine Liste mit allen Arbeitenden, die es hier in Esgorath gibt!`n`n");
$sql = "SELECT name FROM accounts WHERE arbeit_ID >0";
$result = db_query($sql);
output("<table border=0 cellpadding=6 cellspacing=1 bgcolor='#38342D' align='center'><tr class=trkopf><td>Name</td><td>Anstellung</td></tr>", true);
while ($row = db_fetch_assoc($result)) {
output("<tr class=".($i%2?"trlight":"trdark")."><td>" . $row['name'], true);
output("</td>", true);

$sqla = "SELECT name FROM arbeit WHERE ID=".$row['arbeit_ID']."";
$resulta = db_query($sqla) or die(db_error(LINK));
if($rowa = db_fetch_assoc($resulta))
output("<td>" . $rowa['name'] . "</td>", true);
else
output("<td>`c---`c</td>", true);

}
output("</tr></table>",true);
/////////// Ende ANSTELLUNG


Aaaaaber... jeht natürlich nicht. *hmpfz*
Ich krieg obligatorische weiße Fehlerseite mit dem Spruch:
SELECT name FROM arbeit WHERE ID=

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 '' at line 1

Ich hole aus der Tabelle `accounts` alle User, dessen 'arbeit_ID' größer 0 ist. Die 'arbeit_ID' stimmt mit der 'ID' aus der Tabelle `arbeit` überein. Wieso geht das nicht? Wo ist mein Denkfehler?
Wer kann es mir verdeutlichen?

Vielen Dank & Gruß, verni

[Edit]: benutzte php's in meiner Source: freimarkt.php, arbeit_editor.php, hof.php. <--- kann sie nicht entblocken im Source_Viewer. Keine Ahnung, warum... Wenn ich sie bei legen soll, bitte posten

Autor:  Charon [ Fr 15 Jul, 2011 15:56 ]
Betreff des Beitrags:  Re: Arbeitsamt

Hallo,

$row['arbeit_ID'] ist leer, da es in deiner ersten Abfrage nur in der WHERE Bedingung vorkommt. Änder es mal auf
$sql = "SELECT name, arbeit_ID FROM accounts WHERE arbeit_ID >0";

Von der Performance her wäre es allerdings besser, nur eine einzige Datenbankabfrage mittels JOIN der Tabellen auszuführen. Solltest du eine größere Anzahl an Spielern mit Arbeit haben, kann sich das recht schnell bemerkbar machen, wenn du bei jedem nochmal eine zusätzliche Abfrage generierst.

Autor:  vernisage [ Fr 15 Jul, 2011 16:07 ]
Betreff des Beitrags:  Re: Arbeitsamt

OH Mann, natürlich!! EY !! ... Ich sag ja, seh den Wald vor Bäumen nicht!
Und wegen meiner zwei Abfragen... ist das wirklich so 'böse'? Wie kann ich es denn schöner verarbeiten?

Autor:  Charon [ Fr 15 Jul, 2011 21:59 ]
Betreff des Beitrags:  Re: Arbeitsamt

Also "böse" ist natürlich relativ, aber angenommen 50 Spieler haben eine Arbeit, dann hast du auf diese Weise an der Stelle schon 51 Datenbankabfragen, obwohl es mit einer einzigen machbar wäre. Das schlägt dir auf die Zeit zur Seitengenerierung und belastet natürlich auch den Server entsprechend mehr. Angenommen du hast dann noch ein paar solcher Stellen mehr und genug User die sich dort rumtreiben, kann es schnell störend werden. Vor allem bei Leuten, die sich einen Server auch noch mit anderen Seiten teilen müssen, haben dann letztlich alle ihren "Spaß" dran.

Nur so als Beispiel: Ich hab auf meinem Entwicklungssystem mal was Vergleichbares in der Kämpferliste gemacht, da ich quick&dirty was testen wollen. Das gab dann schnell eine Sekunde Aufschlag auf die Seitengenerierung, vor allem wenn die Abfrage auch noch eine Sortierung enthält.

Hier mal eine performantere und etwas verbesserte Lösung für dich. Ich habe noch die Schleife verändert, da dir das $i für die wechselnde Zeilenfarbe gefehlt hat (kannst du natürlich auch in die while-Schleife einbauen, wenn dir die lieber ist) und beim Tabellenaufbau gab es nur ein einzelnes </tr> ganz am Ende.

$this->bbcode_second_pass_code('', '
elseif ($_GET['op']=="arbeit")
{
$out = "In diesem Nebenraum der Ruhmeshalle findest du eine Liste mit allen Arbeitenden, die es hier in Esgorath gibt!`n`n";

$sql = "SELECT a.name, b.name AS arbeitname FROM accounts a JOIN arbeit b ON a.arbeit_ID=b.ID";
$result = db_query($sql);
$anzahl = db_num_rows($result);

$out.="<table border=0 cellpadding=6 cellspacing=1 bgcolor='#38342D' align='center'><tr class=trkopf><td>Name</td><td>Anstellung</td></tr>";
for ($i=0;$i<$anzahl;$i++)
{
$row = db_fetch_assoc($result);
$out.="<tr class=".($i%2?"trlight":"trdark")."><td>".$row['name']."</td><td>".$row['arbeitname']."</td></tr>";
}
$out.="</table>";
output($out,true);
}')
Ist ungetestet, aber ich denke das müsste so funktionieren.

Gruß
Charon

Autor:  vernisage [ Sa 16 Jul, 2011 15:05 ]
Betreff des Beitrags:  Re: Arbeitsamt

Okay, das werd ich mal in Kürze probieren,
aber kannst du mir ggf sagen, warum Berufe, die einen Umlaut wie äöü haben, in badnav führen und nicht angenommen werden können?
Da gibts doch bestimmt nen Trick?

Autor:  Charon [ Sa 16 Jul, 2011 21:11 ]
Betreff des Beitrags:  Re: Arbeitsamt

Gib bei solchen Fragen bitte auch die Datei und den "op" an, bei dem das Problem auftritt. Das macht es für potentielle Helfer dann einfacher, gerade wenn man das Skript nicht kennt. ;)

Aber versuch mal in arbeit.php das
PHP:
output("<a href=arbeit.php?op=annehmen&ID={$row['ID']}&name=".$row['name'].">ANNEHMEN</a>",true);
addnav("","arbeit.php?op=annehmen&ID={$row['ID']}&name=".$row['name']."");
zu ersetzen mit
PHP:
output("<a href=arbeit.php?op=annehmen&ID={$row['ID']}&name=".urlencode($row['name']).">ANNEHMEN</a>",true);
addnav("","arbeit.php?op=annehmen&ID={$row['ID']}&name=".urlencode($row['name'])."");
Umlaute und Sonderzeichen uncodiert in der URL zu übertragen geht schief. :)

Autor:  vernisage [ So 17 Jul, 2011 11:18 ]
Betreff des Beitrags:  Re: Arbeitsamt

Hallo Charon,

zum Beitrag mit der DB-Abfrage: funktioniert :)
zur codierten URL: funktioniert :) (im Übrigen sollte sowas dann in der "Vorlage-PHP" dringenst abgeändert werden!!)

Ich dank dir sehr für deine Hilfsbereitschaft!

Viele Grüße
verni :wink:

Seite 2 von 2 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/