IPB

Willkommen, Gast ( Anmelden | Registrierung )

2 Seiten V   1 2 >  
Reply to this topicStart new topic
> PHP-Frage, Sortieren mit PHP
Conny
Beitrag 30.01.2005 - 14:00
Beitrag #1


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Moin Gemeinde!

Auf verschiedenen (php) Seiten auf meiner Homepage werden die Seitenbesuche gezählt (php-Zähler schreibt in log-Datei; Log-Datei wird ausgelesen und gibt Ergebnis raus.).
Um die Seitenbesuche alle auf einmal überblicken zu können, habe ich eine PHP-Seite gebastelt, die einfach die Log-Dateien der Seiten ausliest, die ein php-Counter haben. Das Ergebnis wird dann in einer Tabelle untereinander ausgegeben.
So weit, so gut.

Nun möchte ich aber, mit meinen bescheidenen php-Kenntniss, daß nicht nur ausgelesen wird, sondern, daß auch sortiert wird!
Also, alle Log-Dateien werden ausgelesen, die Seite stellt die Ergebnisse so da, daß das schlechteste Ergebnis (=die kleinste Zahl) oben steht.

Ich bin überzeugt, daß das geht!
Aaaber, WIE stelle ich sowas an?

cu
Conny
Go to the top of the page
 
+Quote Post
hondocrx
Beitrag 30.01.2005 - 16:15
Beitrag #2


is getting harder


Gruppe: User
Beiträge: 26
Mitglied seit: 24.09.2004
Mitglieds-Nr.: 3.770



Hilfreich wäre es wenn Du den Quellcode Deiner "Auswert-Seite" posten könntest.

Auch die STtuktur der LOG-Datei ist nicht uninteressant.


MfG hondocrx
Go to the top of the page
 
+Quote Post
db
Beitrag 30.01.2005 - 16:19
Beitrag #3


hdb
*****

Gruppe: User
Beiträge: 685
Mitglied seit: 26.10.2001
Wohnort: Köln
Mitglieds-Nr.: 5



http://www.php-faq.de/q/q-arrays-sortieren.html

Hier ein Link.
Go to the top of the page
 
+Quote Post
Conny
Beitrag 30.01.2005 - 18:38
Beitrag #4


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo hondocrx,
die Code ist nichts anders als eine Tabelle in der die Log-Datei aufgerufen wird.
Hier ein Ausschnitt:
HTML
<TABLE BORDER="0" CELLPADDING="20" SUMMARY="Plazierungstabelle">
<TR>
<TH>Counterdatum</TH>
<TH>Hits</TH>
<TH>Link</TH>
</TR>
<TR>
<TD><B>Counter:</B> Bilder vom Brand:<BR><B>Seit:</B> 17. Okt. 2004</TD>
<TD>&nbsp;<?php include('/home/www/web784/html/scripts/count/brand/counter.log');
?></TD>
<TD><A HREF="../../../galerie_brand.php" TARGET="_blank">galerie_brand.php</A></TD>
</TR>
<TR>
<TD><B>Counter:</B> Bilder Feriencamp<BR><B>Seit:</B> 14. Okt. 2004</TD>
<TD>&nbsp;<?php include('/home/www/web784/html/scripts/count/camp/counter.log');
?></TD>
<TD><A HREF="../../../galerie_camp.php" TARGET="_blank">galerie_camp.php</A></TD>
</TR>
<TR>
<TD><B>Counter:</B> Bilder Herbstturnier<BR><B>Seit:</B> 14. Okt. 2004</TD>
<TD>&nbsp;<?php include('/home/www/web784/html/scripts/count/herbst/counter.log');
?></TD>
<TD><A HREF="../../../galerie_herbst.php" TARGET="_blank">galerie_herbst.php</A></TD>
</TR>
************
usw.


Die Log-Datei ist nichts anderes als eine txt-Datei ohne Code mit nur eine Zahl, die sich immer um eins erhöht, wenn ein Besucher die entsprechende Seite anklickt.

Im Grunde muss das sortier-php-Script die Tabelle neu gestallten; die einzelne <TR>-Abschnitte müßen mit dem ausgelesenen Wert -aus der counter.log- so in die Tabelle zurückgeschrieben werden, daß die kleinst ausgelesene Zahl oben in der Tabelle erscheint.

@Dieter: Danke für den Link, werde mich damit befassen (und hoffe, daß ich *mithalten* kann wink.gif )

cu
Conny
Go to the top of the page
 
+Quote Post
Andreas
Beitrag 30.01.2005 - 20:14
Beitrag #5


____________________
Gruppensymbol

Gruppe: Admin
Beiträge: 1.220
Mitglied seit: 20.10.2001
Mitglieds-Nr.: 3



Du musst Dir ein Array bauen und dort (z.B.) Name der Datei mit dem korrespondierenden Zähler einbauen. Das sortierst Du dann, und gibst es in einer Schleife aus.

Ich gucke dazu immer in SelfPHP:
Array sortieren: http://www.selfphp.info/funktionsreferenz/...ionen/asort.php

Wobei Array nur 'ne Tabelle ist mit 2 Spalten. Einmal ein Key und ein dazugehöriger Value. Bei Dir wäre Key halt der Name der Seite und Value der Zählerstand. Das kannst Du dann sortieren ... und ausgeben.

Ist ein Abend einlesen und basteln *g*

Grüße

Andreas
Go to the top of the page
 
+Quote Post
Conny
Beitrag 30.01.2005 - 20:51
Beitrag #6


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hi,
nun, die Logik dahinter habe ich verstanden, sowohl bei Dieters als auch bei Andreas Link.
Was mir schwer fällt, ist die richtige Einbindung in der HTML-Code.
Wie definiere ich die Tabelle als Array?
Und wie binde ich $key und $val so ein, daß der echo die Tabelle -oder die Tabellenzeilen?- richtig schreibt, bzw. ausgibt?

cu
Conny (schwer, schwer, schwer)
Go to the top of the page
 
+Quote Post
Andreas
Beitrag 30.01.2005 - 22:33
Beitrag #7


____________________
Gruppensymbol

Gruppe: Admin
Beiträge: 1.220
Mitglied seit: 20.10.2001
Mitglieds-Nr.: 3



So lese ich z.B. Verzeichnisnamen in ein Array:
HTML
function leseVerzeichnis() {

$verz=opendir ('.');

while ($file = readdir($verz)){
if($file != "." && $file != ".." && substr($file, -4) == ".txt"){

$fp = fopen("$file","r");
flock($fp,2);
$info = trim(fgets($fp,1000));
$kapitel = trim(fgets($fp,1000));
flock($fp,3);
fclose($fp);

$speicher[$kapitel] = $file;

}
}
closedir($verz);

ksort($speicher);
$speicher = array_values($speicher);

return $speicher;

}

Bei Dir könnte $kapitel der Zählerstand sein (danach möchtest Du ja sortieren) und $file ist halt der Dateiname. Nur $speicher = array_values($speicher); musst Du weglassen ... damit verwandelst würdest Du $kapitel weglöschen und der Reihe nach Durchnummerieren. Das willst Du ja nicht!

Grüße

Andreas
Go to the top of the page
 
+Quote Post
Conny
Beitrag 30.01.2005 - 22:56
Beitrag #8


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



hi,
ich dachte mehr an:
  1. lese Log-Datei 1 (function)
  2. lese Log-Datei 2
  3. lese Log-Datei usw.
  4. Sortiere das was gelesen wurde von klein nach groß (asort)
  5. Schreibe das Ergebnis in einer Tabelle (echo)
Sicherlich Laienhaft dagestellt, aber zeigt vielleicht wo ich hin möchte.
Wenn ich den Bereich (array) -in der die Zahlen gesucht werden- Vorher festlege , wo soll denn nachher das Ergebnis hinein geschrieben werden?
Im gleichen Array (wird also nach auslesen überschrieben?)

Conny (noch kein Durchblick...)
Go to the top of the page
 
+Quote Post
hondocrx
Beitrag 30.01.2005 - 23:58
Beitrag #9


is getting harder


Gruppe: User
Beiträge: 26
Mitglied seit: 24.09.2004
Mitglieds-Nr.: 3.770



zweiter Versuch mit meinem Script. War schon ein wenig spät.

Das Problem bei Dir ist, das Du die verschiedensten Texte (Bilder Feriencamp, Bilder vom Brand, usw) mitsortieren musst.

Nun ist die Frage wie oft diese Statistik aufgerufen wird.
Bei stetigem Benutzen empfehle ich eine MySQL-DB für den Counter und die Ausgabetexte.

Das untenstehende Script arbeitet mit deinen Logfiles. Ist deswegen aber auch etwas umständlich.

Diesen Code bitte einfügen nach <TH>Link</TH></TR>

und vor </table>


MfG

QUELLTEXT
<?

//
//  einlesend er Logfiles in die entsprechenden Arrays
//
$brand_array    =file('/home/www/web784/html/scripts/count/brand/counter.log');
$camp_array     =file('/home/www/web784/html/scripts/count/camp/counter.log');
$herbst_array   =file('/home/www/web784/html/scripts/count/herbst/counter.log');

//
//   test mit lokalen Dateien
//
//   $brand_array    =file('brand.log');
//   $camp_array     =file('camp.log');
//   $herbst_array  =file('herbst.log');

//
//   Übergeben des Quelltextes  --> $xxxx1 ist vom <TR> bis vor den Counterwert
//   Übergeben des Quelltextes  --> $xxxx2 ist vom Counterwert bis zum </TR>
//
$brand1='<TR><TD><B>Counter:</B> Bilder vom Brand:<BR><B>Seit:</B> 17. Okt. 2004</TD><TD>&nbsp;';
$brand2='</TD><TD><A HREF="../../../galerie_brand.php" TARGET="_blank">galerie_brand.php</A></TD></TR>';

$camp1='<TR><TD><B>Counter:</B> Bilder Feriencamp<BR><B>Seit:</B> 14. Okt. 2004</TD><TD>&nbsp;';
$camp2='</TD><TD><A HREF="../../../galerie_camp.php" TARGET="_blank">galerie_camp.php</A></TD></TR>';

$herbst1='<TR><TD><B>Counter:</B> Bilder Herbstturnier<BR><B>Seit:</B> 14. Okt. 2004</TD><TD>&nbsp;';
$herbst2='</TD><TD><A HREF="../../../galerie_herbst.php" TARGET="_blank">galerie_herbst.php</A></TD></TR>';

//
//   Übergen der Daten in ein Mehrdimensionales Array
//   Kann nach belieben erweitert werden, die Reihenfolge muss beachtet werden
//

$anzahl = array (array($brand_array[0],$camp_array[0],$herbst_array[0]),array($brand1,$camp1,$herbst1),array($brand2,$camp2,$herbst2));


//
//   sortieren der Couterwerte, heir aufsteigend. Soll zuerst der größte wert
//   ausgegeben werden muss SORT_ASC durch SORT_DESC ersetzt werden
//

array_multisort ($anzahl[0], SORT_ASC, SORT_NUMERIC,$anzahl[1],$anzahl[2]);


//
//   Ausgabe des Quellcodes und der Counterwertes  
//   Muß nicht angepasst werden. Egal wie viele Logs eingelesen werden
//

for ($i=0;$i<count($anzahl[0]);$i++)
   {
echo $anzahl[1][$i];
echo $anzahl[0][$i];
echo $anzahl[2][$i];
   }
?>


Der Beitrag wurde von hondocrx bearbeitet: 31.01.2005 - 10:47
Go to the top of the page
 
+Quote Post
Conny
Beitrag 31.01.2005 - 11:07
Beitrag #10


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo hondocrx,
die ersten Gehversuche sind vielversprechend! biggrin.gif

Mit Deiner Vorlage bin ich -glaube ich- in der Lage die Tabelle so weiter auszubauen bis alle Counterlinks richtig plaziert sind.
Vielen Dank icon13.gif

Bei weiteren Fragen, bin ich so frei und melde mich wieder smile.gif

Zu Deiner Anmerkungen:
Es handelt sich hier um eine art 'Kontrol-Seite' meinerseits und wird nicht so oft aufgerufen (wenn, dann auch nur von mir). Ich möchte bei diesen Bilder-Seiten nur ein wenig Überblick behalten. Wenn sie irgendwann kaum noch besucht werden (Wenn alle sich an den Bilder Satt gesehen haben) kommt die Seite raus und wird ausgetauscht gegen eine neue Bildergalerie-Seite.
Daher auch das Datum 'seit dem so-und-so-vielsten' .

cu
Conny
Go to the top of the page
 
+Quote Post
Google Bot
Beitrag
Beitrag #


Google Ads









Go to the top of the page
 
Quote Post

2 Seiten V   1 2 >
Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



RSS Vereinfachte Darstellung Aktuelles Datum: 28.03.2024 - 22:51

taschenkalender
expertise-panel IPS Driver Error

IPS Driver Error

There appears to be an error with the database.
You can try to refresh the page by clicking here