Snippets - Diskussionsthread

Das reicht nicht.

doch ;) soll ich dir jetzt ne ip sperre zusammenbauen oder wie?

PHP:
$anzahl = current(mysql_fetch_assoc(mysql_query("SELECT COUNT(*) FROM ipsperre WHERE id = '{$_SERVER['REMOTE_ADDR']}' AND NOW() > (time + INTERVALL 5 HOURS)")));
if($anzahl == 0) {
	mysql_query("INSERT INTO ipsperre (ip,time) VALUES ('{$_SERVER['REMOTE_ADDR']}', NOW()) ON DUPLICATE KEY UPDATE time=NOW()");
	
	echo 'war noch nicht in ip sperre';
} else {
	echo 'war schon in ip sperre';
}

würde davor oder danach noch was zum löschen von alten einträgen einbauen... so in der art von
PHP:
if(rand(1,100)==50) mysql_query('DELETE alles was alt ist');
 
hmm...

habt ihr nen snippet zum parsen von xml-dateien?

Z.B.

HTML:
<xyz>
<a>dumdidum</a>
<b>lirumlarum</b>
<c>dadada</c>
</xyz>

<xyz>
<a>asfdasd</a>
<b>lasdasd</b>
<c>dfhdfg</c>
</xyz>

...
 
PHP:
$xml = new SimpleXMLElement(XML_CODE);
echo $xml->a;
echo $xml->b;
echo $xml->c;


braucht aber php5...
 
Hier etwas ausführlicher und es wird aus einer Datei ausgelesen.

PHP:
<?php
// XML-Datei festlegen
$datei = 'example.xml';
// Überprüfen, ob die XML-Datei existiert, wenn nicht -> Fehler
if(file_exists($datei)){
	$xml = simplexml_load_file($datei);
	echo $xml->xyz->a;
}
else{
	echo 'XML-Datei nicht gefunden.';
}
?>

Die XML muss noch in<xml> und </xml> gesetzt werden.
 
gibt es sowas für ältere PHP versionen?

Ach ja und wie geht das dort, weil man ja mehrfach a,b,c hat?
 
gibt es sowas für ältere PHP versionen?

Ach ja und wie geht das dort, weil man ja mehrfach a,b,c hat?

dein xml bsp war nicht wirklich klar... also wenns so aussieht:

PHP:
<headline>
	<xyz>
		<a>dumdidum</a>
		<b>lirumlarum</b>
		<c>dadada</c>
	</xyz>
	<xyz>
		<a>asfdasd</a>
		<b>lasdasd</b>
		<c>dfhdfg</c>
	</xyz>
</headlines>

machste das so:

PHP:
$xml = new SimpleXMLElement(XML_CODE);
foreach($xml AS $xyz) {
	echo $xyv->a.'<br />';
}

oder wenn du aufs erste xyz zugreifen willst dann

PHP:
$xml = new SimpleXMLElement(XML_CODE);
$xml->xyz[0]->a;


und nein das gibts leider nicht für alte php versionen. da gibts zwar auch alternativen... aber keine davon ist so schön einfach wie simplexml.
 
Google mal nach xml2array oder sowas in der Art da gab es ne class. Und naja mal abgesehen von SimpleXML es ist auch simple das zu nutzen, ich finde die als Notlösung nicht schlecht.
 
doch ;) soll ich dir jetzt ne ip sperre zusammenbauen oder wie?

PHP:
$anzahl = current(mysql_fetch_assoc(mysql_query("SELECT COUNT(*) FROM ipsperre WHERE id = '{$_SERVER['REMOTE_ADDR']}' AND NOW() > (time + INTERVALL 5 HOURS)")));
if($anzahl == 0) {
	mysql_query("INSERT INTO ipsperre (ip,time) VALUES ('{$_SERVER['REMOTE_ADDR']}', NOW()) ON DUPLICATE KEY UPDATE time=NOW()");
	
	echo 'war noch nicht in ip sperre';
} else {
	echo 'war schon in ip sperre';
}
Das geht so nicht: Die Spalte ip muss unique sein, so kann es wohl keine doppelten Einträge in der Spalte ip geben - muss aber möglich sein.
Wir reden hier nicht von einer einfachen IP-Sperre sondern von einem Zähler, also wenn nach bspw. 4 Stunden einer mit der selben IP kommt mit der heute ein anderer gekommen ist muss auch beides gezählt werden.
Man könnte jetzt von bevor man eine neue ip einträgt die alten Einträge löschen, aber nicht wenn man die Daten auswerten will.

zuerst ein SELECT und dann eine entscheidung, ob ein INSERT oder ein UPDATE verwendet werden soll (zu sehen z.b. bei doctraxs_besucher_counter von DocTrax weiter oben).
"... ausser bei doctraxs_besucher_counter von DocTrax ..." muss das heissen!

PHP:
INSERT INTO DocTraxs_counter_{$_VAR['countertabelle']} (ip,time) VALUES ('{$_SERVER['REMOTE_ADDR']}', NOW()) ON DUPLICATE KEY UPDATE time=NOW()
^^ funktioniert nicht
 
schon lustig. da ist man mal ein paar wochen nicht da und wenn man wiederkommt sieht man hitzige debatten, wo es gar nichts zu debattieren gibt.

lieber DocTrax, ich entschuldige mich hiermit ausdrücklich und bereuhe zutiefst, dass ich zur demonstration eines sql-befehles ausgerechnet dein beispiel herangezogen habe und dabei leider ausser acht gelassen habe, dass unter bestimmten voraussetzungen und gegebenheiten meine simple und primitive zeile bei dir auf widerspruch stossen könnte.

ich weiss nicht, warum du dich so aufregst. es geht lediglich um die erläuterung der möglichkeiten. nicht darum, dass ich an deinem code irgendetwas auszusetzen habe.

und mal ganz davon abgesehen ... wenn du eine ip-sperre aufbauen willst, dann musst du die ip nicht zweimal sperren. also ist das ON DUPLICATE KEY so wie in deinem beispiel verwendet vollkommener humbug. ein insert mit entsprechender meldung, dass die ip bereits in der sperre ist reicht hier vollkommen aus. und ausserdem beinhaltet eine anständige programmierung in diesem fall eine garbage collection, die überhänge und veraltete einträge entfernt. und noch eine info: wenn du eine ip-sperre mit zähler aufbauen willst, dann macht es sinn, neben der ip auch die session-id und die user-id mitzuloggen, um z.b. faker mit doppelaccount besser zu erkennen.


DocTrax schrieb:
ActionScripter schrieb:
zuerst ein SELECT und dann eine entscheidung, ob ein INSERT oder ein UPDATE verwendet werden soll (zu sehen z.b. bei doctraxs_besucher_counter von DocTrax weiter oben).
"... ausser bei doctraxs_besucher_counter von DocTrax ..." muss das heissen!

wer lesen kann ist klar im vorteil. dort steht etwas von einer SELECT-INSERT-UPDATE-entscheidung - so eine entscheidung ist bei dem genannten beispiel zu sehen ... was bitte ist an der aussage falsch? wenn du schon quotest und dich darüber aufregen willst, dann bring doch bitte die passenden passagen ...

und jetzt komm mal wieder runter von deiner palme und bring ein paar kokosnüsse mit :)


ps: ich bin wieder da ... langsamer beim tippen, aber umso ausgeruhter :)
 
Also was Ihr hier alles wisst mit PHP und MySql..
Da lernt man ja wenn man nur liesst..

Aber eine Frage, wozu ist XML gut? Sorry sehr allgemein, aber hat vielleicht jemad einen Link?
 
ich weiss nicht, warum du dich so aufregst. es geht lediglich um die erläuterung der möglichkeiten. nicht darum, dass ich an deinem code irgendetwas auszusetzen habe.
Du beweist halt, dass Du den Code nicht verstanden hast ...

lieber DocTrax, ich entschuldige mich hiermit ausdrücklich und bereuhe zutiefst, dass ich zur demonstration eines sql-befehles ausgerechnet dein beispiel herangezogen habe und dabei leider ausser acht gelassen habe, dass unter bestimmten voraussetzungen und gegebenheiten meine simple und primitive zeile bei dir auf widerspruch stossen könnte.
... weil Du ihn Dir als schlechtes Beispiel ausgesucht hast.
Du solltest Dir vllt ein Snippet aussuchen bei dem man wirklich drei Abfragen SELECT, INSERT und UPDATE mit dem "INSERT ... ON DUPLICATE KEY UPDATE" ersetzen kann.

und noch eine info: wenn du eine ip-sperre mit zähler aufbauen willst, dann macht es sinn, neben der ip auch die session-id und die user-id mitzuloggen, um z.b. faker mit doppelaccount besser zu erkennen.
Das ist wieder eine andere Konstruktion. Der Zähler soll ohne ein Login-System funktionieren und so auch Besucher erfassen, die nicht angemeldet sind.
 
Zuletzt bearbeitet:
Wir reden hier nicht von einer einfachen IP-Sperre sondern von einem Zähler, also wenn nach bspw. 4 Stunden einer mit der selben IP kommt mit der heute ein anderer gekommen ist muss auch beides gezählt werden.

achso... hab gedacht dass soll ne ip sperre sein. hab mir jetzt mal dein code angeschaut... du verwendest den auto increment wert als zähler, dann haut das so natürlich nicht 100% hin. aber es wäre ohne weiteres möglich... du müsstest einfach nur das löschen, was du eh bei jedem aufruf machst, nach oben setzen. somit würden die alten rausfallen und schon würde das query von actionscripter funktionieren.

über den sinn oder unsinn bei jedem aufruf was löschen zu wollen ist wieder nen anderes thema... und auch das ständige CREATE TABEL IF NOT EXIST. das ist schleißlich nen counter der wird bei jedem aufruf ausgeführt... da sollte man vielleicht doch mit an die performance denken. es ist zwar jetzt nicht wirklich das problem... aber klein vieh macht auch mißt.
 
achso... hab gedacht dass soll ne ip sperre sein. hab mir jetzt mal dein code angeschaut... du verwendest den auto increment wert als zähler, dann haut das so natürlich nicht 100% hin. aber es wäre ohne weiteres möglich... du müsstest einfach nur das löschen, was du eh bei jedem aufruf machst, nach oben setzen. somit würden die alten rausfallen und schon würde das query von actionscripter funktionieren.
Meine Rede, aber das Löschen ist auch nur optional - man könnte die Daten immerhin noch auswerten wollen.

über den sinn oder unsinn bei jedem aufruf was löschen zu wollen ist wieder nen anderes thema... und auch das ständige CREATE TABEL IF NOT EXIST. das ist schleißlich nen counter der wird bei jedem aufruf ausgeführt... da sollte man vielleicht doch mit an die performance denken. es ist zwar jetzt nicht wirklich das problem... aber klein vieh macht auch mißt.
Ja - einmal ausführen und dann rausschmeissen.
 
Wer irgendwelche Fehler bei mir sieht, einfach mal bescheitgeben. Ich habe es zwar nochmal angeschaut konnte aber nix feststellen wo es irgendwie mal hängen könnte.
 
Wenn ma wer Zeit hat, wäre es Klasse wenn er sich diese Klasse anschauen könnte. Sie dient dazu MySQL-Tabellen auszugeben und die Formatierung der Ausgaben zu übernehmen.
Weiterhin können die ausgelesenen Werte auch über Funktionen verändert werden, also Beispielsweise Bildpfade angezeigt werden, Dateigrößen in Mb oder Kb umgerechnet werden etc.

Quellcode inkl. Beispielaufruf gibts hier