hilfdirselbst.ch
Facebook Twitter gamper-media
Murmel
Beiträge: 16
16. Mär 2003, 09:53
Beitrag #1 von 9
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Hallo.

Wenn ich bei meinen Berechnungsscript die Tabelle.php mit require oder include aufrufe, dann ist sie leider unsortiert. Warum ? http://murmel.traffichouse.de/super.php
wenn ich sie normal aufrufe, dann sortiert er sie richtig http://murmel.traffichouse.de/tabelle.php

Anscheinend liest er die die Daten nicht neu aus der Datenbank aus (was er bei einem direkten Aufruf der Tabelle (ohne include  und require) jedoch macht.

Was kann man dagegen machen. ?

Thx,

Murmel

Top
 
X
Miro Dietiker
Beiträge: 699
16. Mär 2003, 11:28
Beitrag #2 von 9
Beitrag ID: #28258
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Leider sehen wir nur die ausgabe und den Code nicht ...

Grundsätzlich aber kann ich Dir sagen, dass die Datenbank NIE
von alleine sortiert, da dies relativ aufwendig ist .)

Du musst dazu NACH der WHERE-Anweisung zusätzlich schreiben:

" ORDER BY spaltennamen asc"
Für Aufsteigende Sortierung

" ORDER BY spaltenname desc"
Für absteigende Sortierung

Das sollte eigentlich schon genügen!
Komplett auch also:

" SELECT FROM tabelle
ORDER BY spaltennamen asc"

wenn kein WHERE drin ist .)
PS: Die PHP-Codezeichen musst du dir jetzt halt selber denken .)

GrEeZ: Miro Dietiker
als Antwort auf: [#28253] Top
 
Anonym
Beiträge: 22827
16. Mär 2003, 13:12
Beitrag #3 von 9
Beitrag ID: #28264
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Sorry.

include ("connect.php");
$abfrage = mysql_query("select team, plustore, minustore, diff, staerke, liga, ligapunkte, spieltag, unensp, gewonnesp, verlorenesp from fp_account limit 0,18");
while($vereins = mysql_fetch_array($abfrage)){
$teams[] = $vereins['team'];
$staerke[] = $vereins['staerke'];
$ligapunkte[] = $vereins['ligapunkte'];
$plustore[] = $vereins['plustore'];
$minustore[] = $vereins['minustore'];
$diff[] = $vereins['diff'];
$liga[] = $vereins['liga'];
$spieltag[] = $vereins['spieltag'];
$unensp[] = $vereins['unensp'];
$gewonnesp[] = $vereins['gewonnesp'];
$verlorenesp[] = $vereins['verlorenesp'];
$spieltag[] = $vereins['spieltag'];
}
mysql_close();

Ich habe die zwei Module super.php (Bewertung) , und Tabelle.php (Tabelle)
So werden die Daten in Arrays aus der DB gelesen, damit gearbeitet, und zurück in die DB geschrieben. Das selbe setzte ich auch in der Tabelle.php so ein.

Jetzt habe ich die vermutung das wenn ich durch das "include Tabelle.php" die Tabelle neu aufrufe, das die Arrays nich neu eingelesen werden. Kann man schon definierte arrays wieder löschen in php ?

Das Problem besteht nämlich bei einem direkten Aufruf der Tabelle.php nicht. Deshalb kann es eigendlich nur ein Problem der Arrays sein.

Die DB selber ist bei mir immer gleich, und wird nur geupdatet. Ich will nur immer die neue Werte wieder in die Arrays einlesen.



als Antwort auf: [#28253] Top
 
Miro Dietiker
Beiträge: 699
16. Mär 2003, 22:50
Beitrag #4 von 9
Beitrag ID: #28306
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Hallo!

Ich habe Dein Vorgehen leider noch nicht ganz verstanden, aber
folgendes zu deinem Script:
Wenn dieses Script zweimal aufgerufen wird, sind die arrays
dobbeltsogross und so weiter, da sie alle Resultate immer angehängt
kriegen.

Löschen kann man sie so:
unset($variablenname);
Oder einfach neu mit Leerarray zuweisen:
$neuerarray = Array();

Weiterer Punkt: Hinsichtlich darauf, dass es immer mehr daten werden,
ist es nicht sinnvoll ein Administrationsscript so zu machen, dass
mal ALLE Datensätze komplett ausliest - dabei sehe ich dein LIMIT,
also hält sich die ausgelesenen Anzahl Werte in Grenzen - sondern
man kann das meist problemlos direkt verwerten und ausgeben nach
jedem Zugriff (Also direkt in der While-Schleife .. auch fallen
dann auch alle die vielen Arrays weg und man kann direkt auf die
Spalten zugreifen :)

SORTIERUNG GENERELL:
Die Sortierung ist hier nicht gewährleistet! Wenn Du wirklich
sortierte Ergebnisse willst, kannst Du den SQL-Befehl erweitern:

$abfrage = mysql_query("select team, plustore, minustore, diff, staerke, liga, ligapunkte, spieltag, unensp, gewonnesp, verlorenesp from fp_account limit 0,18 ORDER BY team");
-> Die Erwaiterung "ORDER BY spaltenname" wie bereits geschrieben!

Ganz was wichtiges hier noch:
Schau zu, dass deine Scripts...
- Nur einmal zur DB connecten, also die Includes sinnvoll gestalten
- Niemals in einem Script die erstellte Verbindung einfach
geschlossen wird "mysql_close()"... Lieber weglassen, da es
automatisch geschieht wenn das Script beendet ist

Hmm .. mal sehen wie's weiter verläuft .)

GrEeZ: Miro Dietiker
als Antwort auf: [#28253] Top
 
Murmel
Beiträge: 16
16. Mär 2003, 23:38
Beitrag #5 von 9
Beitrag ID: #28311
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Danke erstmal für Deine Tips. Ich bin noch Anfänger in php, und so schliesse ich natürlich jede Datenbankabfrage wieder *schäm* Genauso so wie "include" das ich dann öfters verwende. Führt das zu Problemen ?

So sieht im Moment meine DB aus:

id username e_mail pass team staerke geld ligapunkte plustore minustore diff unensp gewonnesp verlorenesp liga

Mein Plan ist das die Datenbank immer so bleiben soll wie sie ist, sie wird nur durch neue Werte geupdatet, aber nie wird was in der DB selber sortiert. Dann im Script lese ich die Datenbank daten in ein array ein, damit ich damit arbeiten kann. Deshalb muss ich ja die aktuellen Daten immer aus der DB holen.

Die Tabellensortierung war kein Problem, denn die klappt ja. Nun meine beiden Module super.php und Tabelle.php beginnen so:

super.php:

// Variablen definieren
$teams[0]="fehler";
$staerke[0]="fehler";
$ligapunkte[0]=0;
$plustore[0]=0;
$minustore[0]=0;
$diff[0]=0;
$unensp[0] = 0;
$gewonnesp[0] = 0;
$verlorenesp[0] = 0;
$spieltag[0] = 0;
$i=0; $b=1; $aa=1; $bb=18;
$spielp=array(1 => 18,1,17,2,3,16,15,4,5,14,13,6,7,12,11,8,9,10,1,17,16,18,2,15,14,3,4,13,12,5,6,11, 10,7,8,9,16,1,15,17,18,14,13,2,3,12,11,4,5,10,9,6,7,8,1,15,14,16,17,13,12,18,2,11, 10,3,4,9,8,5,6,7,14,1,13,15,16,12,11,17,18,10,9,2,3,8,7,4,5,6,1,13,12,14,15,11,10, 16,17,9,8,18,2,7,6,3,4,5,12,1,11,13,14,10,9,15,16,8,7,17,18,6,5,2,3,4,1,11,10,12, 13,9,8,14,15,7,6,16,17,5,4,18,2,3,10,1,9,11,12,8,7,13,14,6,5,15,16,4,3,17,18,2,1, 9,8,10,11,7,6,12,13,5,4,14,15,3,2,16,17,18,8,1,7,9,10,6,5,11,12,4,3,13,14,2,18,15, 16,17,1,7,6,8,9,5,4,10,11,3,2,12,13,18,17,14,15,16,6,1,5,7,8,4,3,9,10,2,18,11,12, 17,16,13,14,15,1,5,4,6,7,3,2,8,9,18,17,10,11,16,15,12,13,14,4,1,3,5,6,2,18,7,8,17, 16,9,10,15,14,11,12,13,1,3,2,4,5,18,17,6,7,16,15,8,9,14,13,10,11,12,2,1,18,3,4,17, 16,5,6,15,14,7,8,13,12,9,10,11,1,18,2,17,16,3,4,15,14,5,6,13,12,7,8,11,10,9,17,1, 18,16,15,2,3,14,13,4,5,12,11,6,7,10,9,8,1,16,17,15,14,18,2,13,12,3,4,11,10,5,6,9, 8,7,15,1,16,14,13,17,18,12,11,2,3,10,9,4,5,8,7,6,1,14,15,13,12,16,17,11,10,18,2,9, 8,3,4,7,6,5,13,1,14,12,11,15,16,10,9,17,18,8,7,2,3,6,5,4,1,12,13,11,10,14,15,9,8, 16,17,7,6,18,2,5,4,3,11,1,12,10,9,13,14,8,7,15,16,6,5,17,18,4,3,2,1,10,11,9,8,12, 13,7,6,14,15,5,4,16,17,3,2,18,9,1,10,8,7,11,12,6,5,13,14,4,3,15,16,2,18,17,1,8,9, 7,6,10,11,5,4,12,13,3,2,14,15,18,17,16,7,1,8,6,5,9,10,4,3,11,12,2,18,13,14,17,16, 15,1,6,7,5,4,8,9,3,2,10,11,18,17,12,13,16,15,14,5,1,6,4,3,7,8,2,18,9,10,17,16,11, 12,15,14,13,1,4,5,4,2,6,7,18,17,8,9,16,15,10,11,14,13,12,3,1,4,2,18,5,6,17,16,7,8, 15,14,9,10,13,12,11,1,2,3,18,17,4,5,16,15,6,7,14,13,8,9,12,11, 10);
include ("connect.php");
$abfrage = mysql_query("select team, plustore, minustore, diff, staerke, liga, ligapunkte, spieltag, unensp, gewonnesp, verlorenesp from fp_account limit 0,18");
while($vereins = mysql_fetch_array($abfrage)){
$teams[] = $vereins['team'];
$staerke[] = $vereins['staerke'];
$ligapunkte[] = $vereins['ligapunkte'];
$plustore[] = $vereins['plustore'];
$minustore[] = $vereins['minustore'];
$diff[] = $vereins['diff'];
$liga[] = $vereins['liga'];
$spieltag[] = $vereins['spieltag'];
$unensp[] = $vereins['unensp'];
$gewonnesp[] = $vereins['gewonnesp'];
$verlorenesp[] = $vereins['verlorenesp'];
$spieltag[] = $vereins['spieltag'];

Das ist tabelle.php

// Variablen definieren
$teams1[0]="fehler";
$staerke1[0]="fehler";
$ligapunkte1[0]=0;
$plustore1[0]=0;
$minustore1[0]=0;
$diff1[0]=0;
$liga1[0]=0;
$unensp1[0] = 0;
$gewonnesp1[0] = 0;
$verlorenesp1[0] = 0;
$i=0; $b=1;
include ("connect.php");
$abfrage = mysql_query("SELECT team, ligapunkte, plustore, minustore, diff, unensp, gewonnesp, verlorenesp, liga, spieltag FROM `fp_account` ORDER BY `ligapunkte` DESC, `liga` ASC, `diff` DESC");
while($vereins1 = mysql_fetch_array($abfrage)){
$teams1[] = $vereins1['team'];
// $staerke[] = $vereins1['staerke'];
$ligapunkte1[] = $vereins1['ligapunkte'];
$plustore1[] = $vereins1['plustore'];
$minustore1[] = $vereins1['minustore'];
$diff1[] = $vereins1['diff'];
$liga1[] = $vereins1['liga'];
$unensp1[] = $vereins1['unensp'];
$gewonnesp1[] = $vereins1['gewonnesp'];
$verlorenesp1[] = $vereins1['verlorenesp'];
$spieltag1[] = $vereins1['spieltag'];
}
mysql_close();

Tabelle.php lief seperat gut, aber wenn es durch super.php aufgerufen wurde (include,require) da war die tabellensortierung falsch.
Ich habe jetzt mit der "1" im array praktisch ein neues gemacht, und mir damit beholfen. Aber es ist natürlich Schwachsinn.

Wundere Dich nicht über den Code, ich habe früher mal sowas in Basic geschrieben, und daher der schlechte Programmierstil. Ich habe noch mehr auf Lager, wenn das verdaut wurde :)

Grüße,

Murmel
als Antwort auf: [#28253] Top
 
Miro Dietiker
Beiträge: 699
17. Mär 2003, 00:06
Beitrag #6 von 9
Beitrag ID: #28312
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Hast du bemerkt, dass du beim oberen Script garkeine Sortierung
von der Datenbank verlangst? Oder habe ich falsch verstanden dass
u.A. genau da die Sortierung falsch sein soll?

Was Dein $spielp sein soll, verstehe ich auch nichr, schliesslich
wäre dieser Inhalt genau in der Datenbank am richtigsten.. und nicht
ins Script einzubinden .)

Irgendwie scheint mir ich habe das Problem einfach noch nicht
verstanden.. Guter Stil macht auch die Erklärung des Problemes
einfacher ,) und ist nicht nur einfach für sehr komplexe sachen
nur empfehlenswert *smile*

GrEeZ: Miro Dietiker
als Antwort auf: [#28253] Top
 
Anonym
Beiträge: 22827
17. Mär 2003, 01:18
Beitrag #7 von 9
Beitrag ID: #28314
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


>Hast du bemerkt, dass du beim oberen Script garkeine Sortierung
>von der Datenbank verlangst? Oder habe ich falsch verstanden dass
>u.A. genau da die Sortierung falsch sein soll?

Nein. Nur in der Tabelle.php findet eine Sortierung statt, und zwar nach Punkten, Tordifferenz, und liga. Das Problem war das ich in super.php und Tabelle.php die gleichen arrays aus der DB lese. Wenn ich Tabelle.php seperat aufrufe dann klappt es mit der Sortierung. Wenn ich es durch super.php mit "include" aufrufe dann nicht. Deshalb habe ich in der Tappelle.php alle Arrays eine "1" dazu verpasst, Mit einem neuen Array klappt es dann.

>Was Dein $spielp sein soll, verstehe ich auch nichr, schliesslich
>wäre dieser Inhalt genau in der Datenbank am richtigsten.. und nicht
>ins Script einzubinden .)


Also, die Datenbank hat (bei mir) feste Punkte (im Moment 1-18). Der
Spielp setzt die Spielpaarungen für 34 Spieltage. Der Spieltag wird aus der DB gelesen, und danach per If die Schleife eingestellt.

Ich hatte erst vor es in ner DB zu speichern, aber es wäre zu aufwendig und unnöig gewesen (finde ich).
Ich denke das der Unterschied hier ist das ich mit festen Positionen arbeite, und nicht per Programmierkust prüfe wohin was gehört :)

>Irgendwie scheint mir ich habe das Problem einfach noch nicht
>verstanden.. Guter Stil macht auch die Erklärung des Problemes
>einfacher ,) und ist nicht nur einfach für sehr komplexe sachen
>nur empfehlenswert *smile*

Sorry ich will niemanden nerven. Wenn Du Dich damit nicht auseinandersetzen willst ist das kein Problem für mich :) Das Problem ist die doppeldefination der arrays die wohl durch einen Include-Aufruf vorkommen. Ich habe jetzt neue definiert
(+1 im Namen), muss sie aber in Zukunft wohl versuchen zu löschen.
Das mit dem Problem schildern, da hast Du natürlich Recht :) Als Anfänger erhofft man sich natürlich immer irgenwelche Tips die größeren Schaden (das heisst verschenkte Zeit):) verhindern.

Trotzdem Danke für die Hilfe,

Grüße, Murmel
als Antwort auf: [#28253] Top
 
Miro Dietiker
Beiträge: 699
17. Mär 2003, 14:47
Beitrag #8 von 9
Beitrag ID: #28400
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


.) Re!

Nun, Mod bin ich deswegen, weil ich mich auch gerne mal mit anderen
Problemen als meinen eigenen Auseinandersetzen soll.. Sonst wäre ich
wohl am falschen Platz ,) Und nerven darf ich mich wohl über meine
eigenen Fehler, nicht aber über andere - das müssen die nach ihrer
Einsicht dann selber für sich übernehmen =)

Variablen kann man einfach mit unset löschen oder einfach leer neu
zuweisen wie ich es Dir bereits geschrieben habe.

Ich empfehle dies auch in dem include zu gewährleisten!
VARIANTE A:
<?PHP
unset($array);
$array[]="Erster Eintrag";
$array[]="Zweiter Eintrag";
?>

VARIANTE B:
<?PHP
$array = Array();
$array[]="Erster Eintrag";
$array[]="Zweiter Eintrag";
?>

Have Phun!

GrEeZ: Miro Dietiker
als Antwort auf: [#28253] Top
 
Murmel
Beiträge: 16
17. Mär 2003, 20:36
Beitrag #9 von 9
Beitrag ID: #28454
Bewertung:
(1113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Variablen Problem ?


Hi.

Ich wollte Dir nichts unterstellen, ich bin immer dankbar wenn jemand seine Freizeit opfert jemanden anderen zu helfen. Es liegt auch an mir der total umständlich programmiert jemandem anderen meinen Code zu erklären :)

Übrigens Danke, dieses Unset ist genau das was ich brauche :)


Grüße,
Murmel
als Antwort auf: [#28253] Top
 
X