Suche auf lima-city
-
in: ip auf Webseite anzeigen lassen, und loggen
geschrieben von webnfo
Hallo
kleines, einfaches Beispiel zum Speichern als Log-Datei
<?php // ------------------------------------------------------------------ // ------ get current request data ------ $user_ipaddr = $_SERVER['REMOTE_ADDR']; $user_method = $_SERVER['REQUEST_METHOD']; $user_rqtime = $_SERVER['REQUEST_TIME']; $user_rqpage = $_SERVER['REQUEST_URI']; // --- usw --- HTTP_REFERER --- HTTP_USER_AGENT --- // ------ get current date/time ------ $tx_yea = date('Y'); $tx_mon = date('m'); $tx_day = date('d'); // ------------------------------------------------------------------ // ------ set logfile path/name --- each month ------ $log_file = 'ilog_'.$tx_yea.'_'.$tx_mon.'.txt'; // ------ set logfile path/name --- each day ------ ## $log_file = 'ilog_'.$tx_yea.'_'.$tx_mon.'_'.$tx_day.'.txt'; // ------------------------------------------------------------------ // ------ create new data row --- csv string ------ $new_row_str = ''.$user_ipaddr.'|'.$user_method.'|'.$user_rqtime.'|'.$user_rqpage.'|'."\n"; // ------ write new logfile --- if not exists ------ if (!file_exists($log_file)) { $top_row_str = 'userip|method|time|page|'."\n"; $save_new = file_put_contents($log_file, $top_row_str, LOCK_EX); } // ------ write into logfile --- new data row ------ $save_row = file_put_contents($log_file, $new_row_str, FILE_APPEND | LOCK_EX); // ------------------------------------------------------------------ ?>
für das Speichern der Log-Files könnte / sollte man einen eigenen Ordner nehmen
z.B: logdata/ ...
$log_file = 'logdata/ilog_'.$tx_yea.'_'.$tx_mon.'.txt';
Datei Beispel für November 2014 sieht dann so aus:
logdata/ilog_2014_11.txt
zum Auslesen dann die Dateien als CSV behandeln mit Trenner | (Pipe-Zeiichen)
Anstatt csv Datei könnte / sollte man sowas in (MySQL) Datenbank speichern,
dann kann man auch mehr damit machen ... beim Speichern und Daten wieder auslesen
-
in: jQuery bzw. JS - Stunden aus 2 Zeiten berechnen
geschrieben von webnfo
naja ... fast ... bei Deiner neuen Version ( jsfiddle ) kommt
von 22:00 bis 01:00 ---> 45 Stunden
von 22:00 bis 02:00 ---> 44 Stunden
ich habe auch noch einmal die Rechnung selber neu überarbeitet,
bei mir funktioniert es jetzt .... siehe meine neue Version: http://jsfiddle.net/Sm5Dm/3/
von 22:00 bis 01:00 ---> 3 Stunden
von 22:00 bis 02:00 ---> 4 Stunden
diie neue Berechnung sieht bei mir so aus
<html> <head> <title>Stunden</title> <script type="text/javascript"> var zeit = 0; var von, bis; function change(von, bis, ergebnis) { var value1 = document.getElementById(von).options[document.getElementById(von).selectedIndex].value; var value2 = document.getElementById(bis).options[document.getElementById(bis).selectedIndex].value; value1 = value1.substr(0, 2) * 60 + value1.substr(3, 2) * 1; value2 = value2.substr(0, 2) * 60 + value2.substr(3, 2) * 1; if (value1 == value2) { zeit = 24 * 60; } else if (value1 > value2) { zeit = (((24 - (value1/60)) + (value2/60)) * 60); } else { zeit = value2 - value1; } var hrs = (zeit / 60); document.getElementById(ergebnis).value = hrs } </script> </head> <body> <h1>Stunden</h1> <br> <form name="jump" method="post" action=""> Tag1 ... Zeit von: <select id="von_01" onChange="change('von_01', 'bis_01', 'hrs_01');"> <option value="00:00">00:00</option> <option value="00:30">00:30</option> <option value="01:00">01:00</option> <option value="01:30">01:30</option> <option value="02:00">02:00</option> <option value="02:30">02:30</option> <option value="03:00">03:00</option> <option value="03:30">03:30</option> <option value="04:00">04:00</option> <option value="04:30">04:30</option> <option value="05:00">05:00</option> <option value="05:30">05:30</option> <option value="06:00">06:00</option> <option value="06:30">06:30</option> <option value="07:00">07:00</option> <option value="07:30">07:30</option> <option value="08:00">08:00</option> <option value="08:30">08:30</option> <option value="09:00">09:00</option> <option value="09:30">09:30</option> <option value="10:00">10:00</option> <option value="10:30">10:30</option> <option value="11:00">11:00</option> <option value="11:30">11:30</option> <option value="12:00">12:00</option> <option value="12:30">12:30</option> <option value="13:00">13:00</option> <option value="13:30">13:30</option> <option value="14:00">14:00</option> <option value="14:30">14:30</option> <option value="15:00">15:00</option> <option value="15:30">15:30</option> <option value="16:00">16:00</option> <option value="16:30">16:30</option> <option value="17:00">17:00</option> <option value="17:30">17:30</option> <option value="18:00">18:00</option> <option value="18:30">18:30</option> <option value="19:00">19:00</option> <option value="19:30">19:30</option> <option value="20:00">20:00</option> <option value="20:30">20:30</option> <option value="21:00">21:00</option> <option value="21:30">21:30</option> <option value="22:00">22:00</option> <option value="22:30">22:30</option> <option value="23:00">23:00</option> <option value="23:30">23:30</option> <option value="24:00">24:00</option> </select> ... Zeit bis: <select id="bis_01" onChange="change('von_01', 'bis_01', 'hrs_01');"> <option value="00:00">00:00</option> <option value="00:30">00:30</option> <option value="01:00">01:00</option> <option value="01:30">01:30</option> <option value="02:00">02:00</option> <option value="02:30">02:30</option> <option value="03:00">03:00</option> <option value="03:30">03:30</option> <option value="04:00">04:00</option> <option value="04:30">04:30</option> <option value="05:00">05:00</option> <option value="05:30">05:30</option> <option value="06:00">06:00</option> <option value="06:30">06:30</option> <option value="07:00">07:00</option> <option value="07:30">07:30</option> <option value="08:00">08:00</option> <option value="08:30">08:30</option> <option value="09:00">09:00</option> <option value="09:30">09:30</option> <option value="10:00">10:00</option> <option value="10:30">10:30</option> <option value="11:00">11:00</option> <option value="11:30">11:30</option> <option value="12:00">12:00</option> <option value="12:30">12:30</option> <option value="13:00">13:00</option> <option value="13:30">13:30</option> <option value="14:00">14:00</option> <option value="14:30">14:30</option> <option value="15:00">15:00</option> <option value="15:30">15:30</option> <option value="16:00">16:00</option> <option value="16:30">16:30</option> <option value="17:00">17:00</option> <option value="17:30">17:30</option> <option value="18:00">18:00</option> <option value="18:30">18:30</option> <option value="19:00">19:00</option> <option value="19:30">19:30</option> <option value="20:00">20:00</option> <option value="20:30">20:30</option> <option value="21:00">21:00</option> <option value="21:30">21:30</option> <option value="22:00">22:00</option> <option value="22:30">22:30</option> <option value="23:00">23:00</option> <option value="23:30">23:30</option> <option value="24:00">24:00</option> </select> ... Stunden: <input id="hrs_01" type="text" name="hrs_01" size="4" maxlength="4"> <br> <br> Tag2 ... Zeit von: <select id="von_02" onChange="change('von_02', 'bis_02', 'hrs_02');"> <option value="00:00">00:00</option> <option value="00:30">00:30</option> <option value="01:00">01:00</option> <option value="01:30">01:30</option> <option value="02:00">02:00</option> <option value="02:30">02:30</option> <option value="03:00">03:00</option> <option value="03:30">03:30</option> <option value="04:00">04:00</option> <option value="04:30">04:30</option> <option value="05:00">05:00</option> <option value="05:30">05:30</option> <option value="06:00">06:00</option> <option value="06:30">06:30</option> <option value="07:00">07:00</option> <option value="07:30">07:30</option> <option value="08:00">08:00</option> <option value="08:30">08:30</option> <option value="09:00">09:00</option> <option value="09:30">09:30</option> <option value="10:00">10:00</option> <option value="10:30">10:30</option> <option value="11:00">11:00</option> <option value="11:30">11:30</option> <option value="12:00">12:00</option> <option value="12:30">12:30</option> <option value="13:00">13:00</option> <option value="13:30">13:30</option> <option value="14:00">14:00</option> <option value="14:30">14:30</option> <option value="15:00">15:00</option> <option value="15:30">15:30</option> <option value="16:00">16:00</option> <option value="16:30">16:30</option> <option value="17:00">17:00</option> <option value="17:30">17:30</option> <option value="18:00">18:00</option> <option value="18:30">18:30</option> <option value="19:00">19:00</option> <option value="19:30">19:30</option> <option value="20:00">20:00</option> <option value="20:30">20:30</option> <option value="21:00">21:00</option> <option value="21:30">21:30</option> <option value="22:00">22:00</option> <option value="22:30">22:30</option> <option value="23:00">23:00</option> <option value="23:30">23:30</option> <option value="00:00">00:00</option> </select> ... Zeit bis: <select id="bis_02" onChange="change('von_02', 'bis_02', 'hrs_02');"> <option value="00:00">00:00</option> <option value="00:30">00:30</option> <option value="01:00">01:00</option> <option value="01:30">01:30</option> <option value="02:00">02:00</option> <option value="02:30">02:30</option> <option value="03:00">03:00</option> <option value="03:30">03:30</option> <option value="04:00">04:00</option> <option value="04:30">04:30</option> <option value="05:00">05:00</option> <option value="05:30">05:30</option> <option value="06:00">06:00</option> <option value="06:30">06:30</option> <option value="07:00">07:00</option> <option value="07:30">07:30</option> <option value="08:00">08:00</option> <option value="08:30">08:30</option> <option value="09:00">09:00</option> <option value="09:30">09:30</option> <option value="10:00">10:00</option> <option value="10:30">10:30</option> <option value="11:00">11:00</option> <option value="11:30">11:30</option> <option value="12:00">12:00</option> <option value="12:30">12:30</option> <option value="13:00">13:00</option> <option value="13:30">13:30</option> <option value="14:00">14:00</option> <option value="14:30">14:30</option> <option value="15:00">15:00</option> <option value="15:30">15:30</option> <option value="16:00">16:00</option> <option value="16:30">16:30</option> <option value="17:00">17:00</option> <option value="17:30">17:30</option> <option value="18:00">18:00</option> <option value="18:30">18:30</option> <option value="19:00">19:00</option> <option value="19:30">19:30</option> <option value="20:00">20:00</option> <option value="20:30">20:30</option> <option value="21:00">21:00</option> <option value="21:30">21:30</option> <option value="22:00">22:00</option> <option value="22:30">22:30</option> <option value="23:00">23:00</option> <option value="23:30">23:30</option> <option value="00:00">00:00</option> </select> ... Stunden: <input id="hrs_02" type="text" name="hrs_02" size="4" maxlength="4"> <br> <br> ... OK ... <input type="submit" name="run" value="Speichern"> </form> <br> <br> </body> </html>
habe aus der Variable value mal value1 gemacht,
weil "value" in JS schon selbst eine "Bedeutung" hat
die entscheidende Teil in meiner neuen Berechnung ist:
... else if (value1 > value2) { zeit = (((24 - (value1/60)) + (value2/60)) * 60); }
und es sieht so aus, als ob es damit funktioniert, habe es bischen getestet :=)
PS: Du kannst (wenn es funktioniert) meinen Code auch in dein github übernehmen :=)
Jetzt brauch ich das ganze noch für 31 Tage
und mit Summe: Stunden Gesamt (alle Tage) am Ende
EDIT:
... habe mal vesucht die onChange Funktion nur den Tag als eizigen Wert zu übergeben
z.b:
... und nicht alle 3 IDs in Funktions-AufrufonChange="change('02')"
die Funktion soll dann aus übergebenem Tag (z.B: '02') die Strings der 3 IDs selber bauen
function change(d) { var von = "von_" + d; var bis = "bis_" + d; var ergebnis = "hrs_" + d; ... }
aber (keine Ahnung warum) das funktioniert irgendwie nicht ... ?!?
-
in: 2 Hintergrundbilder übereinander legen mit CSS
geschrieben von webnfo
einfach 2 Hintergrund-Bilder mit CSS bei body und bei Deinem Content DIV
body { background: url('ganze_breite.jpg') no-repeat; } #content { width:960px; background: url('zweites_bild.jpg') no-repeat; }
das zweite Billd (CSS background) muss halt in die "richtige" id für Dein Content DIV
hier nur als Beispiel für die id="content", Deine id kann auch anderen Name haben.
wenn Bild zu klein / zu groß ist,
kann man es mit CSS auch auf die Box-Breite strecken
BSP
#content { width:960px; background: url('zweites_bild.jpg') no-repeat; -moz-background-size: 100%; -webkit-background-size: 100%; -khtml-background-size: 100%; background-size: 100%; }
oder CSS3 ... cover
#content { width:960px; background: url('zweites_bild.jpg') no-repeat; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; }
siehe dazu auch: http://css-tricks.com/perfect-full-page-background-image/
oder googeln nach "CSS hintergrund strecken" oder ähnliche Suche
-
in: [PHP] Array alphabetisch ordnen und dann Buchstaben mitgeben
geschrieben von webnfo
Du kannst auch ein Hilfs-Array anlegen,
das für alle Buschstaben von A bis Z jeweils ein Sub-Array enthält
und dann, je Anfangs-Buschstabe, den Name in das passende Sub-Array ablegen
Dann kannst Du dieses Hilfs-Array mit foreach() durchlaufen,
und jeden Buschstaben als Titel ausgeben, und wenn im
Sub-Array auch was steht, dann die Namen als Liste ausgeben
wenn nicht, einfach eine Leer-Zeile z.B: mit <p> </p>
der folgende Code ist (hofentlich) selbst-Erklärend
<?php // -------------------------------------------- $verz_data = array( 'A' => array(), 'B' => array(), 'C' => array(), 'D' => array(), 'E' => array(), 'F' => array(), 'G' => array(), 'H' => array(), 'I' => array(), 'J' => array(), 'K' => array(), 'L' => array(), 'M' => array(), 'N' => array(), 'O' => array(), 'P' => array(), 'Q' => array(), 'R' => array(), 'S' => array(), 'T' => array(), 'U' => array(), 'V' => array(), 'W' => array(), 'X' => array(), 'Y' => array(), 'Z' => array(), ); // -------------------------------------------- $alledateien = scandir('.'); foreach ($alledateien as $verzeichnis) { if(($verzeichnis != '.') && ($verzeichnis != '..') && is_dir($verzeichnis)) { $buschstabe = strtoupper(substr($verzeichnis, 0, 1)); $verz_data[$buschstabe][] = $verzeichnis; } } // -------------------------------------------- foreach ($verz_data as $key => $val) { print "<hr />\n"; print "<h2>$key</h2>\n"; // --- der Buschstabe aus Alphabet --- print "<hr />\n"; if (!empty($val)) { // --- Name(n) zum Buschstabe vorhanden --- sort($val); print "<ul>\n"; foreach($val as $name) { print "<li>$name</li>\n"; } print "</ul>\n"; } else { print "<p> </p>\n"; // --- kein Name zum Buschstabe vorhanden --- } } print "<hr />\n"; // -------------------------------------------- ?>
sonst einfach nochmal nach-fragen :=)
mit diesem Code wird jeder Buschstabe (A bis Z) ausgegeben,
wenn mit Namen dazu, dann diese als Liste (sonst nur Leerzeile)
... anstatt <h2> für Buschstabe und <ul> Liste für Namen
kannst Du ja auch eine andere HTML Formatierung machen
-
in: jQuery bzw. JS - Stunden aus 2 Zeiten berechnen
geschrieben von webnfo
Hallo @willstdueswissen
vielen Dank, schonmal ein ganz guter Ansatz, aber gleich als Github Projekt ?!
solange man noch am experimentieren / testen / entwickeln ist finde ich JsFiddle besser,
dort kann man den Code gleich ausführen und neue Version erstellen (ohne Account)
oder für nur Quellcode gibt es ja auch noch Pastebin, etc.
.... naja, egal ... ich bin ja nur zu faul mir einen Account anzulegen ... :=)
Dein Code funktioniert auch, solange von / bis innerhalb von einem Tag ist
aber wenn ich z.B. von 23:00 Uhr bis 01:00 Uhr mache, dann kommt als Ergebnis = 47
oder wenn ich z.B. von 23:00 Uhr bis 02:00 Uhr mache, dann kommt als Ergebnis = 47
... bei von 23:00 kommt immer 47 raus ... wenn bis kleiner als 23:00 ist (Tagesgrenze)
oder wenn ich z.B. von 22:00 Uhr bis 01:00 Uhr mache, dann kommt als Ergebnis = 46
oder wenn ich z.B. von 22:00 Uhr bis 02:00 Uhr mache, dann kommt als Ergebnis = 46
... bei von 22:00 kommt immer 46 raus ... wenn bis kleiner als 22:00 ist (Tagesgrenze)
habe den Code zum Testen mal auf 2 Tage erweitert
und bei JsFiddle eingetragen ... hier: http://jsfiddle.net/Sm5Dm/
(da kann man mit Button "Run" den Code ausführen und sieht das Ergebnis)
ich habe eine Excel Formel dazu, die scheinbar ganz gut funktioniert
... hier Zeile 10 der Tabelle, wobei ... D = Zeit von ... und ... E = Zeit bis
=WENN(ISTKTEXT(D10); WENN(E10>D10;STUNDE(E10-D10)+(MINUTE(E10-D10))/60;STUNDE(1-D10+E10)+ABS((MINUTE(E10)-MINUTE(D10))/60));" ")
vielleicht kann man ja diese Excel Formel in JavaScript umsetzen,
bzw. durch Vergleich den "Fehler" finden, der bei Tagesgrenze auftritt.
-
in: jQuery bzw. JS - Stunden aus 2 Zeiten berechnen
geschrieben von webnfo
Hallo
ich möchte für mehrere Tage die Stunden zwischen zwei Zeiten berechnen.
je Tag kann User aus DropDown (select) die Zeit "von" und die Zeit "bis" auswählen
per JS / jQuery sollen damit je Tag die Stunden zwischen den Zeiten berechnet werden,
BSP: von = 18:30 ... bis = 22:00 ... Ergebnis = 3,5 Stunden
BSP: von = 16:00 ... bis = 18:00 ... Ergebnis = 2,0 Stunden
das ganze soll auch über die Tages-Grenze hinweg funktionieren
BSP: von = 23:30 ... bis = 01:00 ... Ergebnis = 1,5 Stunden
BSP: von = 22:00 ... bis = 06:00 ... Ergebnis = 8,0 Stunden
Das Ergebnis soll dann (automatisch per JS / jQuery)
für den jeweiligen Tag is das input text feld für "Stunden" eingetragen werden
Beispiel Code siehe hier: http://jsfiddle.net/r53Yj/1/
Zudem soll auch eine Summe der Stunden im Feld "Stunden Gesamt" ankommen
leider habe ich dabei Probleme ... mit meiner jQuery .change(function () { }
+ wie nur die Werte (value) für aktuellen Tag ermitteln ... mit id / name selector ?
+ und dann auch nur für diesen Tag die Stunden in das Stunden-Textfeld eintragen
Die einzelnen Felder (select / input) haben zwar eindeutige IDs, ("von_01", "von_02", etc)
aber ich bekomme es nicht hin, jeweils nur die zusammen gehörenden
auszulesen / anzusprechen ... evtl muss ich andere ID-Struktur machen ?? wie?
also mein
holt immer alle Texte$( "select" ).change(function () { ... }
aber immer nur den ersten Value .... wie kann ich je für nur 1 Tag (Zeile) auswerten ?
Ihr könnt gerne mein jsfiddle Code ab-ändern und neue Version hier ver-Linken.
Danke
-
in: Pulldown-Menü, Zeichenanzahl begrenzen
geschrieben von webnfo
Hallo
Wenn Dir die DropDown Box zu Breit für Dein Layout / Design ist,
dann kannst Du die Breite der select Box per CSS width festlegen
<select name="top" style="width:140px;"> <option>Michael Jackson</option> <option>Nina Hagen</option> <option>Marianne Rosenberg</option> </select>
Die DropDown Box ist dann genau so breit wie mit CSS festgelegt (hier 140 Pixel)
und bei Auswahl sieht man dann trotzdem den längeren Text der <option> Elemente
Oder du baust die select Box <option> Elemente (per PHP) so zusammen,
dass der Text ein anderer (kürzer) ist als der Wert (value), der übergeben wird.
<select name="top"> <option value="Michael Jackson">M.Jackson</option> <option value="Nina Hagen">N.Hagen</option> <option value="Marianne Rosenberg">M.Rosenberg</option> </select>
Bsp mit PHP und Array (key => value)
$top_data = array( 'M.Jackson' => 'Michael Jackson', 'N.Hagen' => 'Nina Hagen', 'M.Rosenberg' => 'Marianne Rosenberg', ); print "<select name=\"top\">\n"; foreach($top_data as $key=>$val) { print " <option value=\"$val\">$key</option>\n"; } print "</select>\n";
Anstatt den Key schon im Array vorhanden, kann man auch
Array nur mit Werte haben und (mit PHP) kürzen, z.B. mit substr()
aber dann bekommt man oft nur Teil des Vornamen (zu kurz)
hier BSP ... nur die ersten 8 Zeichen im Text
$top_data = array( 'Michael Jackson', 'Nina Hagen', 'Marianne Rosenberg', ); $max_length = 8; // --- maximale Zeichen print "<select name=\"top\">\n"; foreach($top_data as $val) { if ($short_length < strlen($val) { $short = substr($val, 0, $max_length); } print " <option value=\"$val\">$short</option>\n"; } print "</select>\n";
EDIT: ich denke das mit $max_length könnte für Dich das richtige sein,
aber mach es nicht zu kurz, damit noch klar ist, was überhaupt gemeint ist
um vom Wort vor Leerzeichen nur den ersten Buschtabe übrig zu lassen,
könnte mit explode und dann substr von erstem Element davon machen,
$top_data = array( 'Michael Jackson', 'Nina Hagen', 'Marianne Rosenberg', ); print "<select name=\"top\">\n"; foreach($top_data as $val) { $namedata = explode(' ',$val); $vor_name = substr($namedata[0], 0, 1); $nachname = $namedata[1]; $txtshort = $vor_name.'.' '.$nachname; print " <option value=\"$val\">$txtshort</option>\n"; } print "</select>\n";
ist nur ne Idee ... ungetestet ....
es gibt bestimmt auch noch andere Möglichkeiten, z.B. preg_replace mit Pattern
-
in: Benutzer-ip Speichern
geschrieben von webnfo
Hallo
mach mal HTML-Zeilenumbruch z.B. <br /> zwischen die IP Ausgabe zur Test-Ansicht
dann kann man besser sehen, ob es die "gleichen" sind, wenn sie untereinander stehen
und dann .... FRAGE: .... wird denn bei ....
echo('<br />'.$post_ip); echo('<br />'.$_SERVER['REMOTE_ADDR']);
.... genau das gleiche ausgegeben ??
ahh ... ich denke es ist in $post_ip noch der Zeilenumbruch
mit dran,\n
denn beim Speichern hängst du ja das
mit dran,\n
was aber in $_SERVER['REMOTE_ADDR'] nicht vorkommt, daher immer ungleich
das könnte dazu führen, dass die if-Bedingung nicht hinhaut,
also mach noch trim() mit rein
if ( trim($post_ip) != $_SERVER['REMOTE_ADDR']) { ... }
oder halt schon eine Zeile vorher ....$post_ip = trim($post_ip);
damit dieses \n vom Ende des String (der letzten IP) entfernt wird.
Edit:
oder schon beim Einlesen der Daten mit file() die Umbrüche weg lassen:
$post_ip = file('ip.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
PS: grundsätzlich ist Deine Herangegensweise es so zu speichern Quatsch,
denn es wird immer nur die letzte Zeile / letzte IP geprüft, und wenn mehr als 1 User
gleichzeitig Online sind, dann kann das sooooo schon nicht mehr klappen !!!
Speichere die IP und die Zeit besser in eine Zeile (mit Trenner-Zeichen dazwischen)
und lesen dann mit fgetscsv() alle Zeilen in ein (multidiemensionales) Array,
dann kannst du dieses Array durchlaufen ob die IP darin schon vorkommt.
Dann hast Du noch das Problem, dass die eine Datei größer und größer wird
also du solltest sehr "alte" Einträge auch wieder (automatisch) löschen,
oder (wie in Antwort oben) je Monat eine neue Datei anlegen ...
oder noch besser, das mit MySQL machen, das würde alle Probleme lösen :)
-
in: Benutzer-ip Speichern
geschrieben von webnfo
hier ein BSP Code um
+ mehr als "nur" die IP-Adresse speichern
... (Zeit, Browser, Referer, etc) ... in CSV Datei
+ für jeden Monat eine neue Datei (in einem Unter-Ordner)
... denn wenn alles in eine Datei, dann wird die schnell sehr groß
---> allgemein ... sowas sollte man ehh besser in MySQL DB speichern
aber hier mal als BSP mit Speichern in Datei (csv)
FILE: save_user_ip.php
<?php // ----------------------------------------------- $save_path = 'udata'; if (!file_exists($save_path)) { mkdir($save_path,0777); } // --- der CHMOD Wert 0777 kann auch anders, z.B.: 0666 // --- oder den Ordner per Hand vorher in FTP anlegen $save_date = date('Y').'_'.date('m'); $save_file = $save_path.'/ips_'.$save_date.'.csv'; // ----------------------------------------------- $usr_ipadr = $_SERVER['REMOTE_ADDR']; $usr_rtime = $_SERVER['REQUEST_TIME']; $usr_agent = $_SERVER['HTTP_USER_AGENT']; $usr_refer = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : 'no-referer'; ### $srv_host = $_SERVER['HTTP_HOST']; $usr_rquri = $_SERVER['REQUEST_URI']; $delimiter = '|'; $head_strg = ''; $head_strg .= 'ipadr'.$delimiter; $head_strg .= 'rtime'.$delimiter; $head_strg .= 'agent'.$delimiter; $head_strg .= 'refer'.$delimiter; ### $head_strg .= 'shost'.$delimiter; $head_strg .= 'rquri'."\n"; $save_strg = (!file_exists($save_file)) ? $head_strg : ''; $save_strg .= $usr_ipadr.$delimiter; $save_strg .= $usr_rtime.$delimiter; $save_strg .= $usr_agent.$delimiter; $save_strg .= $usr_refer.$delimiter; ### $save_strg .= $srv_host.$delimiter; $save_strg .= $usr_rquri."\n"; $fp = fopen($save_file, 'a'); fwrite($fp, $save_strg); fclose($fp); // ----------------------------------------------- // --------- Ausgabe der gespeicherten Daten ----- print '<p>File Name: <u>'.$save_file.'</u></p>' . "\n"; print '<p>CSV String:</p>' . "\n"; print '<pre style="margin:18px 4px; padding:6px; text-align:left; background:#FFFFAA; color:#0000AA;">'."\n"; print_r($save_strg)."\n"; print '</pre>'."\n"; $parsed_csv = str_getcsv($save_strg,$delimiter); print '<p>Array Data:</p>' . "\n"; print '<pre style="margin:18px 4px; padding:6px; text-align:left; background:#DEDEDE; color:#0000AA;">'."\n"; print_r($parsed_csv)."\n"; print '</pre>'."\n"; // ----------------------------------------------- ?>
den Teil "--- Ausgabe der gespeicherten Daten ---" kann man auch weg lassen,
ist nur zur DEMO, damit man gleich sieht, was gespeichert wird.
anstatt $_SERVER['REQUEST_TIME'] könnte man auch time() nehmen
als Unix Timestamp ... oder ein anders formatiertes Datums-Format ...
Hinweis: den Ordner, den man in $save_path angibt
kann man auch selbst per Hand (in FTP) erstellen
oder auch den CHMOD Wert 0777 anders, z.B.: 0666
muss halt für das Script Schreib- und Lese- Rechte bekommen
+++
Zum Auslesen der einzelnen CSV Dateien (je Monat)
kann man dann einfach fgetcsv() nutzen ...
Hier mal ein BSP php CODE mit Liste der Dateien (als Link)
... und nach an-klicken kommt der CSV Inhalt als Array
FILE: read_user_ip.php
... Achtung ... noch ohne Zugangs-Schutz (Passwort)
<?php // ----------------------------------------------- $save_path = 'udata'; $file_list = glob($save_path.'/*.csv'); ## print '<pre style="margin:18px 4px; padding:6px; text-align:left; background:#DEDEDE; color:#0000AA;">'."\n"; ## print_r($file_list)."\n"; ## print '</pre>'."\n"; foreach($file_list as $file_name) { print '<br /> + <a href="?f='.urlencode($file_name).'">'.$file_name.'</a>' . "\n"; } print '<br />' . "\n"; print '<br />' . "\n"; // ----------------------------------------------- function csv_to_array($csvfile, $csvhead=true, $delimiter=';', $length=2048) { $csvdata = false; if (($handle = fopen($csvfile, "r")) !== FALSE) { $csvdata = array(); if ($csvhead !== FALSE) { $headrow = fgetcsv($handle, $length, $delimiter); } $row = 0; while (($data = fgetcsv($handle, $length, $delimiter)) !== FALSE) { if ($csvhead !== FALSE) { foreach( $headrow as $key => $name ) { if (empty($name)) { $name = 'tab_'.$key; } $csvdata[$row][$name] = $data[$key]; } } else { $csvdata[$row] = $data; } $row++; } fclose($handle); } return $csvdata; } // ----------------------------------------------- if (!empty($_GET['f'])) { $save_file = trim($_GET['f']); if (file_exists($save_file)) { $read_data = csv_to_array($save_file, true, '|'); print '<pre style="margin:18px 4px; padding:6px; text-align:left; background:#DEDEDE; color:#0000AA;">'."\n"; print_r($read_data)."\n"; print '</pre>'."\n"; } } // ----------------------------------------------- ?>
Für die Datei: read_user_ip.php sollte man noch einen Passwort-Schutz machen
... damit nicht Hinz und Kunz auf die gespeicherten Daten zugreifen können !!
und wie gesagt, noch besser wäre das ganze mit MySQL zu speichern / aus-zu-lesen
dann kann man auch einfacher "alte" Datensätze wieder löschen und noch mehr machen
wie z.B. mit Reload-Zeit für Counter ... also gleiche IP nur alle n Minuten neu Speichern.
das ginge zwar mit CSV auch, ist aber deutlich aufwendiger als mit MySQL
aber das (mit MySQL) will ich jetzt nicht auch noch in diesem Beitrag schreiben,
.... ich hoffe trotzdem, dass diese zwei BSP Codes weiter helfen :)
-
in: Aktion beim schließen ausführen
geschrieben von webnfo
so
<script type="text/javascript"> window.onbeforeunload = function() { alert('Achtung ... ENDE ... !!!'); } </script>
anstatt dem alert() kann man jede andere JS Aktion / Funktion machen
-
in: Kontaktformular Captcha & alle Felder
geschrieben von webnfo
du kannst den Code in beide Dateien einfügen, wenn Du es in 2 Dateien hast
... man kann das alles auch in einer Datei machen
zudem würde ich das "Prüfen" auch noch für Captcha machen
if (!empty($_REQUEST['erg_eingabe'])) { $erg_eingabe = $_REQUEST['erg_eingabe']; } else { $err_msg .= "<p> ... Captcha fehlt </p>\n"; }
und zum Captca ... prüfen ob Eingabe gleich dem Wert in der SESSION ist
if (isset($erg_eingabe) && $erg_eingabe == $_SESSION['ergebnis']) { // ---- Captcha ist richtig ---- weiter --- } else { // ---- Captcha ist falsch ---- abbruch --- }
aber nimm doch ein fertiges und bewährtes Captcha ... http://www.google.com/recaptcha
dafür gibt es auch eine PHP library zum Download und mit Beispiel zur Benutzung.
-
in: Kontaktformular Captcha & alle Felder
geschrieben von webnfo
Hallo
hier nochmal Code wie man prüfen kann, ob alle (deine) Felder ausgefüllt wurden
<?php // -------------------------------------------- $err_msg = ''; if (!empty($_REQUEST['kontakt'])) { $kontakt = $_REQUEST['kontakt']; } else { $err_msg .= "<p> ... Kontakt fehlt </p>\n"; } if (!empty($_REQUEST['anrede'])) { $anrede = $_REQUEST['anrede']; } else { $err_msg .= "<p> ... Anrede fehlt </p>\n"; } if (!empty($_REQUEST['vorname'])) { $vorname = $_REQUEST['vorname']; } else { $err_msg .= "<p> ... Vorname fehlt </p>\n"; } if (!empty($_REQUEST['nachname'])) { $nachname = $_REQUEST['nachname']; } else { $err_msg .= "<p> ... Nachname fehlt </p>\n"; } if (!empty($_REQUEST['email'])) { $email = $_REQUEST['email']; } else { $err_msg .= "<p> ... Email fehlt </p>\n"; } if (!empty($_REQUEST['betreff'])) { $betreff = $_REQUEST['betreff']; } else { $err_msg .= "<p> ... Betreff fehlt </p>\n"; } if (!empty($_REQUEST['mitteilung'])) { $mitteilung = $_REQUEST['mitteilung']; } else { $err_msg .= "<p> ... Mitteilung fehlt </p>\n"; } if (!empty($_REQUEST['ip'])) { $ip = $_REQUEST['ip']; } else { $err_msg .= "<p> ... IP fehlt </p>\n"; } // -------------------------------------------- if (!empty($err_msg)) { print "<p>Fehler ... Sie haben nicht alle Felder ausgefüllt ... </p>\n"; print $err_msg; } else { // --- hier dann das Script zum Email senden, etc .. } // -------------------------------------------- ?>
aber von Captcha ist in dem Code noch nichts drin,
sowas solltest Du aber hinbekommen mit z.B. ReCaptcha
um damit Spam wenigstens ansatzweise zu verhindern.
-
in: JS: string mit Leerzeichen zu object oder array ?
geschrieben von webnfo
Hallo
wenn ich in JavaScript einen string habe
wie bkomme ich daraus ein array oder object mit Elemente getrennt nach Leerzeichen
Beispiel
// --- Ausgangs-Daten als String var mystr = "Lorem ipsum dolor sit amet"; // --- Ergebnis als Object var myobj = {"Lorem", "ipsum", "dolor", "sit", "amet"}; // --- Ergebnis als Array var myarr = ["Lorem", "ipsum", "dolor", "sit", "amet"];
gibt es sowas wie bei PHP: explode() auch für Javascript,
und welchen Daten-Typ (Object/Array) bekomme ich dann ?
-
in: HP wird nicht richtig angezeigt
geschrieben von webnfo
Hallo
kopiere entweder die CSS-Dateien auch in den Ordner für neue_hp
oder ändere Deine CSS Links im Quellcode mit ../ davor
<link rel="stylesheet" href="../format.css" type="text/css"> <link rel="stylesheet" href="../menue.css" type="text/css"> <link rel="stylesheet" href="../rahmen.css" type="text/css"> <link rel="stylesheet" href="../kalenderblatt.css" type="text/css"> <link rel="stylesheet" href="../seite.css" type="text/css"> <link href="../css/lightbox.css" rel="stylesheet" type="text/css" media="screen" />
PS: Tipp ... wenn Du mehrere CSS-Dateien hast, dann
kopiere diese am besten alle in einen Unterordner (z.B. css/ )
dann kannst Du die auch leichter alle verschieben / kopieren
natürlich müdden dann auch die links zu CSS angepasst werden.
-
in: MySQL einträge zählen
geschrieben von webnfo
dueselps schrieb:
Fehlermeldung: Warning:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\LP Webseite\scripts\lp.php on line 30
sorry
das ist natürlich Quatsch
$query = mysql_query('SELECT COUNT(*) AS anzahl FROM videos WHERE lp ='.$betreff); $res = mysql_query($query);
so dann
$query = "SELECT COUNT(*) AS anzahl FROM videos WHERE lp='$betreff'"; $res = mysql_query($query); $data = mysql_fetch_array($res); $video = $data["anzahl"]; // ---- oder = $data[0]; ---- print "<p>Anzahl: $video</p>\n");
habs oben auch geändert.
ABER es geht ja hier hauptsächlich um die MySQL Abfrage:SELECT COUNT(*)
und alles andere sollte man selber hinbekommen ... ob jetzt mysql_fetch_array, mysql_fetch_row, etc.
EDIT: @hackyourlife hats noch besser mit mysql_real_escape_string()
-
in: MySQL einträge zählen
geschrieben von webnfo
ja ... hab dazwei... drei Fehler .... sorry
nach der Zeile mit mysql_query jeweils ein Strichpunkt
das $res = mus vor die Zeile mit mysql_query
und bei Variante 2 fehlt die Zeile mit mysql_query ganz.
$query = "SELECT COUNT(*) AS anzahl FROM table_name WHERE titel ='".$x."'"; $res = mysql_query($query); $data = mysql_fetch_array($res); $count = $data["anzahl"]; print "<p>Anzahl: " . $count . "</p>\n");
$query = "SELECT * FROM table_name WHERE titel ='".$x."'"; $res = mysql_query($query); $data = mysql_fetch_array($res); $count = mysql_num_rows($data); print "<p>Anzahl: " . $count . "</p>\n");
so ... jetzt sollte beides gehen ... :xD
-
in: MySQL einträge zählen
geschrieben von webnfo
MySQL Einträge zählen
z.B. so
mysql_query("SELECT COUNT(*) AS anzahl FROM table_name WHERE titel ='".$x."'") $res = mysql_fetch_array($counter); $count = $res["anzahl"]; print "<p>Anzahl: " . $count . "</p>\n");
oder so
mysql_query("SELECT * FROM table_name WHERE titel ='".$x."'") $count = mysql_num_rows($res); print "<p>Anzahl: " . $count . "</p>\n");
ich glaub die erste Version ist performanter (schneller)
aber bei der zweiten kann man anstatt * (= Alle Felder) auch nur ein Feld (z.B: id) einlesen
PS: ... das table_name natürlich noch durch Deinen Tabellen-Name ersetzen
oder auch als Variable... FROM ".$my_table." WHERE ...
EDIT ... oh, da war jemand schneller :)
EDIT2 ... der Code ist Fehlerhaft .. richiger Code siehe hier weiter unten ... :)
Wollte je auch eigentlich nur die 2 möglichen SELECT Abfragen zeigen ... :oO^^