Suche auf lima-city
-
in: HTML zu Bild
geschrieben von oindex
Screenshot-Dienste Online (meist kostenlos)
... mit API zum Aufruf per GET - URL zum automatisch "abrufen"
BSP
* https://www.site-shot.com
* https://snapr.seekxl.de
* https://www.thum.io
* ... usw ...
oder viele viele andere Alternativen für Screenshopt-API mit URL zur für Nutzung mit PHP
einfach mal googeln nach "Screenshot-Dienste" / "web screen capture" / ...
achte auf kostenlos und dass eine API / bzw. ein Auftruf über URL dabei ist ... -
in: Platzhalter in Template ersetzen
geschrieben von oindex
Hallo
Danke für die Antworten und Diskussion ...
also ich nehme jetzt mals an, ...
.. dass es mit
performater ist alsstr_replace()
zu verwendenpreg_replace()
... ich habs jetzt so:
foreach($vars as $name => $value) { $upname = strtoupper($name); // ---- Platzhalter im Template $setvalue = stripslashes($value); // ---- Inhalt zum Ersetzen $tpl = str_replace($upname, $setvalue , $tpl); }
anstatt "nur" stripslashes() kann ich ja vor Ausgabe
den Inhalt ($setvalue) noch anders weiter "filtern"
auch mal mit strip_tags() oder htmlentities() o.ä. ...
alos meine Platzhalter sind immer die Array-Keys als Grossbuchstaben
eingefasst in einfach (1x) "geschweiften Klammern" nicht doppelt
... titel ---> {TITEL}
... text ---> {TEXT}
... usw.
Wobei es mit {{ doppelt geschweiften Klammern }} evtl ja doch besser wäre,
damit es eindeutiger als ein Platzhalter zu erkennen ist.
-
in: Platzhalter in Template ersetzen
geschrieben von oindex
Danke @ggamee die klasse werd ich mal anschauen / beobachten,
Danke @hackyourlife genau so ein preg_replace habe ich gesucht
aber kannst Du mir sagen, warum Modifikator: e im Pattern ?!?
... ahhh .... ok .... gefunden dazu habe ich:
e (PREG_REPLACE_EVAL)
Wenn dieser Modifikator gesetzt ist, macht preg_replace() in der Ersetzungszeichenkette eine normale Ersetzung von Rückrefenzen, wertet sie als PHP-Code aus und verwendet das Ergebnis um damit die gesuchte Zeichenkette zu ersetzen. Einfache Anführungszeichen, doppelte Anführungszeichen, Backslashes (\) und NULL-Zeichen werden in den ersetzten Rückreferenzen mit einem Backslash maskiert.
für den Fall, dass z.B. $vars['text'] weiteren HTML-Code enthält, und dieser richtig escaped wird ?
... hab ich das "richtig" verstanden ?
würde ich vor dem preg_replace() machen:$vars['text'] = htmlentities($vars['text']);
dann bekäme ich als Ausgabe nicht den interpretierten HTML sondern einen sichtbaren HTML-Code
also anstatt:Chakka <span style="color:red;">Du</span> kannst es ...
dann sowas:Chakka <span style="color:red;">Du</span> kannst es ...
... aber es soll ja in $tpl der "string" für die Ausgabe mit echo / print richtig escaped sein ...
$tpl = "Chakka <span style=\"color:red;\">Du</span> kannst es ...";
(hier mal nur als kleiner Teil,
ist schon klar das $tpl dann den gesamten Code aus template.tpl plus Variablen-Werte enthalten soll.
Würde ich es ohne den Modifikator: e machen würde, wären die
im $tpl String nicht escaped"
... richtig? ( ... ich will ja auch was lernen)
Wäre dazu eine Alternative auch:$vars['text'] = addslashes($vars['text']);
und dann geht's im preg_replace() ohne den Modifikator: e ..... oder hab ich da was falsch verstanen?
-
in: Platzhalter in Template ersetzen
geschrieben von oindex
@ hm4-blog ... hmmm, aber so einfach geht's dann doch nicht,
zumindest bekomme ich so keine Werte in die Ausgabe,
es werden weiterhin die Variablen-Namen $titel etc. ausgegeben, nicht die Werte dazu
wenn Du mit include() meinst, dan evtl so:
<div class="artikel"> <h2><?= $titel; ?></h2> <p><?= $text; ?></p> <ul> <li>Rubrik: <?= $rubrik; ?></li> <li>Datum: <?= $datum; ?></li> <li>Autor: <?= $autor; ?></li> </ul> </div>
bzw. ohne Short-TAGs
<div class="artikel"> <h2><?php echo $titel; ?></h2> <p><?php echo $text; ?></p> <ul> <li>Rubrik: <?php echo $rubrik; ?></li> <li>Datum: <?php echo $datum; ?></li> <li>Autor: <?php echo $autor; ?></li> </ul> </div>
oder wie kann man es ohne die PHP-TAGs im Template machen,
also direkt mit dem Template wie von hm4-blog vorgeschlagen ?
ahhh .. Danke @hackyourlife ... für Antwort während ich das hier geschrieben habe
Auch ne gute Möglichkeit ... muss die Template-Datei dann als .php vorliegen (nicht .htm oder .tpl) ?
PS: Hinweis: bei meinen Beispiel-Variablen oben fehlt ein
(Semikolon) !!!;
$datum = '16.11.2012 (09:27)';
Oder soll ich doch "besser" mit Platzhalter und str_replace() arbeiten ?
Denn ich will, dass auch Andere das Template einfach ändern können,
die das Script nicht genau kennen bzw. gar kein PHP können ....
-
in: Platzhalter in Template ersetzen
geschrieben von oindex
Hallo
ich möchte ein Script bauen mit einem (eigenen) Template-System,
in der Template-Datei (HTML) stehen Platzhalter, die durch Inhalte von Variablen ersetzt werden sollen
hier ein einfaches Beispiel der Template-Datei (HTML-Vorlage):
<div class="artikel"> <h2>{TITEL}</h2> <p>{TEXT}</p> <ul> <li>Rubrik: {RUBRIK}</li> <li>Datum: {DATUM}</li> <li>Autor: {AUTOR}</li> </ul> </div>
dazu stehen jeweils als Variablen (Inhalte) bereit: (Beispiel)
$titel = 'Motivation im Alltag'; $text = 'Chakka - Du kannst es ... man muss nur wirklich Wollen, dann klappt einfach Alles ... '; $rubrik = 'Allgemein'; $datum = '16.11.2012 (09:27)'; $autor = 'Donald Duck';
------
EDIT: das ; (Semikolon) im der Zeile:
hinzugefügt$datum = '16.11.2012 (09:27)';
UND: der Satz in $text soll natürlich heissen: ... Wollen, dann klappt einfach Alles ... aber egal :)
------
wie ersetzte ich jetzt am besten (schnell und Ressourcen schonend)
die Platzhalter durch die Werte der dazu-gehörenden Variablen ?
einfach mit str_replace() ?
// ------------- Template einlesen ---------- $tpl_strimg = file_get_contents($template_file); // ------------- Platzhalter ersetzen ---------- $tpl_strimg = str_replace('{TITEL}', $titel, $tpl_strimg); $tpl_strimg = str_replace('{TEXT}', $text, $tpl_strimg); $tpl_strimg = str_replace('{RUBRIK}', $rubrik, $tpl_strimg); $tpl_strimg = str_replace('{DATUM}', $datum, $tpl_strimg); $tpl_strimg = str_replace('{AUTOR}', $autor, $tpl_strimg); // ------------- HTML Ausgabe ---------- echo $tpl_strimg;
... oder gibt es eine andere, bessere Methode ? ... z.B. ein preg_replace mit Pattern ?
Das ist ein stark vereinfachtes Beispiel, eigentlich sollen mind.10 Platzhalter ersetzt werden
wobei sich das auch ver-vielfachen kann, für z.B. 5 Artikel pro Seite dann eben 5 mal
und dazu kommen "globale" Platzhalter für Header-/ Footer-Bereich und Sidebar, etc.
die auch auf jeder Seite ersetzt werden, (HTML-Head, Logo, Seiten-Titel, Navigation, usw.)
... macht es einen Unterschied, in welchen "Markern" der Platzhalter steht?
also ob {TITEL} oder #TITEL# oder %TITEL% oder :TITEL: oder |TITEL| oder ... ?
... und was ist besser, die komplette HTML-Ausgabe in einen einzigen String zu packen,
oder als "kleinere Teile" ablegen ($htmlhead, $pageheader, $content, $sidebar, $footer)
und dann erst bei Ausgabe mit echo zusammen bauen ? ... oder ist das egal ?
-
in: Mit PHP Inhalt bestimmter CSS-Klassen in Array?
geschrieben von oindex
Hallo
wie kann ich aus einem HTML-String
die Inhalte von Elementen mit bestimmten Klassen auslesen und in Array speichern?
Beispiel: $htmlcode
<div id="inhalt"> <ul> <li> <h2 class="name">Titel 111</h2> <div class="a"> Text 1a AAAAAAA <a href="ziel1.php">Link 1</a> ... A1 </div> <div class="b"> Text 1b <u>BBBBBB</u> ... B1 </div> </li> <li> <h2 class="name">Titel 222</h2> <div class="a"> Text 2a aaaaaa <a href="ziel2.php">Link 2</a> ... A2 </div> <div class="b"> Text 2b <u>bbbbbb</u> ... B2 </div> </li> <li> <h2 class="name">Titel 333</h2> <div class="a"> Text 3a xxxxxx <a href="ziel3.php">Link 3</a> ... A3 </div> <div class="b"> Text 3b <u>yyyyyy</u> ... B3 </div> </li> </ul> </div>
gewünschtes Ergebnis: (Array je <li> Element)
array ( [0] => Array ( [name] => Titel 111 [a] => Text 1a AAAAAAA <a href="ziel1.php">Link 1</a> ... A1 [b] => Text 1b <u>BBBBBB</u> ... B1 ) [1] => Array ( [name] => Titel 222 [a] => Text 2a aaaaaa <a href="ziel2.php">Link 2</a> ... A2 [b] => Text 2b <u>bbbbbb</u> ... B2 ) [2] => Array ( [name] => Titel 333 [a] => Text 3a xxxxxx <a href="ziel3.php">Link 3</a> ... A3 [b] => Text 3b <u>yyyyyy</u> ... B3 ) )
... preg_match() mit entsprechendenn Pattern wäre wohl eine Möglichkeit
aber geht doch sicher auch einfacher ... ressourcen-schonender ... DOM ? ... aber wie ?!?
wenn ich
versuche,simplexml_load_string($htmlcode);
dann werden einige HTML-Elemente samt Inhalt einfach verschluckt ... kommen nicht an ?!
also hier ... die Tagss <a> und <u> fehlen komplett, bzw. werden zu Leerstring ?!
Hier das Ergebnis von simplexml_load_string()
SimpleXMLElement Object ( [@attributes] => Array ( [id] => inhalt ) [ul] => SimpleXMLElement Object ( [li] => Array ( [0] => SimpleXMLElement Object ( [h2] => Titel 111 [div] => Array ( [0] => Text 1a AAAAAAA ... A1 [1] => Text 1b ... B1 ) ) [1] => SimpleXMLElement Object ( [h2] => Titel 222 [div] => Array ( [0] => Text 2a aaaaaa ... A2 [1] => Text 2b ... B2 ) ) [2] => SimpleXMLElement Object ( [h2] => Titel 333 [div] => Array ( [0] => Text 3a xxxxxx ... A3 [1] => Text 3b ... B3 ) ) ) ) )
... also Elemente (hier <a> und <u>) werden einfach nicht erfasst, sind weg ?!
anstatt diesem:Text 2a aaaaaa <a href="ziel2.php">Link 2</a> ... A2
kommt aber an:Text 2a aaaaaa ... A2
??? also ist SimpleXML hier unbrauchbar ?!?
wie komme ich am besten auf das (oben gezeigte) gewünschte Ergebnis?
kann mir jemand bitte ein Beispiel mit DOM ausleen geben ?
Danke
-
in: Logfile funktioniert nicht
geschrieben von oindex
Zugriff log würde ich immer mit mysql machen,
denn bei gleichzitigen Zugriff auf .txt basiertes Speichern
kann die gesamte log- txt.Datei "geschossen" werden,
übrig bleibt dann eine leere Datei, also alle Daten verloren
wenn zwei User in der gleichen Sekunde zugreifen,
wird die Datei zweimal geöffnet,
da sie aber schon vom ersten geöffnet ist ... knallts ....
mysql kann gleichzeitige Zugriffe (besser) verkraften
und wenn Du nur "logfile.txt" nimmst,
ohne Datums-Angaben im Dateiname
dann ist diese "logfile.txt" ziemlich schnell ziemlich groß
was ausleen und auswerten dann wieder erschwert
wenn du auf .txt bestehst, dann mach mind. je Monat eine eigene log Datei
<Jahr>_<Monat>_logfile.txt
aber lass es am besten mit .txt lieber gleich sein, und nimm MySQL !!!
ein Rat aus Erfahrung, mir hat es auch schon .txt Logfiles zerschossen
seit dem ... lieber MySQL, wegen "gleichzeitigem" Zugriff beim Speichern
-
in: MySQL Profile
geschrieben von oindex
vexi schrieb:
... dass für $id nur ein leerer String eingesetzt wird. .
ich denke auch, das der GET-Wert nicht (richtig) übergeben wurde, die Variable $id scheint leer zu sein
versuch mal im Test-Script die Liste aller User auszugeben, mit Link zum klicken
ich empfehle mysql_fetch_assoc anstatt mysql_fetch_row,
dann ist das Array (in 2ter Ebene) mit Key-Namen, nicht Key-Zahlen
... alternativ geht auch mysql_fetch_object()
dann hast Du halt die 2te Ebene als Objekte anstatt als Array
test.php
<?php // ------------------------------------------------------ // --------------- config -------------------- $db_host = 'mysql.lima-city.de'; // ---- MySQL Server/Host $db_user = 'USERxxxxxx'; // ---- MySQL Username $db_pass = 'YyYyYyYy'; // ---- MySQL User Passwort $db_name = 'db_xxxxxx_1'; // ---- MySQL Datenbank Name $db_table = 'my_user'; // ---- MySQL Tabelle // ------------------------------------------------------ // --------------- connect ------------------- $con = mysql_connect($db_host, $db_user, $db_pass)); if (!$con) { die ('Fehler ... MySQL Verbindung <br />' . mysql_error()); exit; } $sel = mysql_select_db($db_name, $con); if (!$sel) { die ('Fehler ... Datenbank Auswahl <br />' . mysql_error()); exit; } // ------------------------------------------------------ // --------------- User Details -------------- if (!empty($_GET['id'])) { $run_id = trim(chop($_GET['id'])); // --- Optional --- ## $run_id = preg_replace('/[^0-9]/','',$run_id); // ---- Nur Zahlen (Zeichen 0 bis 9) zulassen $run_id = mysql_real_escape_string($run_id); // ---- string fuer mysql escapen // -------------------------- $sql_user = "SELECT * FROM ".$db_table." WHERE ID = '".$run_id."'"); $res_user = mysql_query($sql_user); if (!$res_user) { die ('Fehler ... res_user <br />' . mysql_error()); exit; } $user_data = array(); while ($row_user = mysql_fetch_assoc($res_user)) { $user_data[] = $row_user; } // -------------------------- echo "<h2>User Details</h2>\n"; if (!empty($user_data)) { // -------- Hier werden Alle Spalten der Tabelle zum User ausgegeben ------- // -------- um damit zu arbeiten anstatt print_r als foreach-Schleife ------- print "<pre>\n"; print_r($user_data); print "</pre>\n"; } else { echo "<br /> ... Keine Daten zur ID ".$run_id." gefunden. \n"; } // ------------------------------------------- // ------------------------------------------- } else { // ------------------------------------------------------ // --------------- User Auswahl -------------- echo "<br />\n"; echo "<br />Bitte einen User aus der Liste auswählen.\n"; echo "<br />\n"; $sql_liste = "SELECT * FROM ".$db_table.""); $res_liste = mysql_query($sql_liste); if (!$res_liste) { die ('Fehler ... res_liste <br />' . mysql_error()); exit; } $liste_data = array(); while ($row_liste = mysql_fetch_assoc($res_liste)) { $liste_data[] = $row_liste; } // -------------------------- echo "<h2>User Auswahl</h2>\n"; if (!empty($liste_data)) { echo "<ul>\n"; $n=1; foreach($liste_data as $item) { echo "<li> Nr: ".$n." <a href=\"test.php?id=".$row_liste['ID']."\">".$row_liste['Vorname']." ".$row_liste['Nachname']."</a> (User-ID: ".$row_liste['ID'].") </li>\n"; $n++; } echo "</ul>\n"; } else { echo "<br />... Keine User-Daten gefunden. \n"; } echo "<br />\n"; echo "<br />\n"; // ------------------------------------------- // ------------------------------------------- } echo "<br />\n"; echo "<br /> <a href=\"test.php\">TEST HOME</a> \n"; echo "<br />\n"; // ------------------------------------------------------ ?>
Du musst halt Dattenbank-Zugangsdaten und Tabellen-Name anpasen
und wenn Du diesen Code in andere Datei ausser "test.php" ausführen willst,
dann musst Du die Links anpassen (überall wo test.php steht) ... logisch :)
und wie schon gesagt wurde, bei Spalten-Namen auch auf groß-/klein- Schreibung achten
-
in: validate URL ?
geschrieben von oindex
hackyourlife schrieb:
Und getestet ist das Script; es funktioniert auch perfekt
Danke,
aber bei Test auf lima-city.de Webspace bekomme ich als Fehlermeldung (Warning)
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/webpages/lima-city/oindex/html/urlcheck2.php on line 32
habe dann noch bischen zu curl gesucht,
und gefunden, das im HEADER auch die 'redirect_url' steht
function getHttpCode( $url ) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); return $info; ## return array( $info['http_code'], $info['redirect_url'] ); }
Aufruf
$urls_list = array( 'http://google.de', 'http://www.google.de', 'google.de', 'www.google.de', 'hddb://google.de', 'http://test.de/blubb/lala.php?x=aaa', 'http://www.test.de/blubb/lala.php?x=aaa', 'oindex.lima-city.de', 'http://oindex.lima-city.de', 'ftp://localhost', 'http://www.google.com/', 'http://nirvana/' ); foreach($urls_list as $url) { $hinfo = getHttpCode($url); echo "<br />URL: ".$url."\n"; echo "<br />Status: ".$hinfo['http_code']."\n"; echo "<br />Redirect: ".$hinfo['redirect_url']."\n"; echo "<br />\n"; ## echo "<pre>\n"; ## print_r($hinfo); ## echo "</pre>\n"; }
aber dabei bleibt das Problem bei Weiterleitung (auf 404 Fehlerseite)
die URL: http://test.de/blubb/lala.php hat Status 301 und wird
weitergeleitet zu: http://www.test.de/blubb/lala.php?x=aaa ... also mit www.
prüfe ich direkt http://www.test.de/blubb/lala.php?x=aaa ... bekomme ich Status 404
die URL: http://google.de hat Status 302 und wird
weitergeleitet zu: http://www.google.de ... also mit www.
prüfe ich direkt http://www.google.de ... bekomme ich Status 200
also muss ich jedesmal wenn 'redirect_url' vorhanden ist
nochmal die 'redirect_url' prüfen, um den Status der Ziel-Adresse zu bekommen
... echo "<br />URL: ".$url."\n"; echo "<br />Status: ".$hinfo['http_code']."\n"; if (!empty($hinfo['redirect_url'])) { echo "<br />Redirect: ".$hinfo['redirect_url']."\n"; $hinfo2 = getHttpCode($hinfo['redirect_url']); echo "<br />Redirect Status: ".$hinfo2['http_code']."\n"; } echo "<br />\n"; ...
Weil eine Weiterleitung heisst ja noch nicht OK,
es kann ja eine Weiterleitung zu einer Fehlerseite sein ....
und für den Fall, das eine Weiterleitung wieder eine Weiterleitung ist
bräuchte ich da wohl eine while() Schleife,
... auch um z.B. ab 3x redirect die URL zu blocken, oder wieviele sind noch OK?
PS:
komisch, das ein "normaler" .htaccess Rewrite wie index.php?name=horst als horst.html anzeigen
gleich Status 200 hat und keine Info zum Rewrite, so wie bei mit www. Rewrite bei test.de ?!
... naja, keine Ahnung wie bei test.de der Rewrite gelöst ist, htaccess oder header(Location) in PHP
-
in: validate URL ?
geschrieben von oindex
Danke
ich habe halt angenommen, dass:filter_var($url, FILTER_VALIDATE_URL);
auch erkennt, ob es sich um ein "gängiges" Protokoll handelt, also http:// https:// oder ftp://
aber da wird ja anscheinend "nur" die Syntax geprüft.
daher nehme ich wohl doch lieber ein regex
das von flashzeugs vorgeschlagene habe ich auch irgendwo gefunden,
aber eben auch noch 10 andere, und bevor ich die alle stundenlang ausprobiere,
halt (nochmal) die Frage: .... welches als "gut" bekannt ist, ... getestete Empfehlung(en) ?
das file_get_contents() bzw. die function url_exists($url) { ... } ist auch bestimmt sehr hilfreich
schön wäre halt, wenn ein Status zurück-gegeben wird, also ob 200, 404 oder 301 , etc.
denn eine Webseite mit Fehler kann ja quasi auch immer erreichbar sein, halt als Fehlerseite
aber mitget_headers($url, 1);
bekomme ich bei 404 Fehlerseiten die weitergeleitet werden
den Status 301 ... weil es wohl als Fehlerseite in .htaccess Rewrite steht
BSP:
get_headers('http://www.test.de/blubb/lala.php', 1);
[0] => HTTP/1.1 301 Moved Permanently
kann man das anders Abfragen, damit man in dem Fall doch den Status 404 bekommt ?
-
in: validate URL ?
geschrieben von oindex
Hallo
anscheinend funktioniert filter_var($url, FILTER_VALIDATE_URL) nicht wirklich,
$url = 'hddb://google.de'; $checkurl = filter_var($url, FILTER_VALIDATE_URL); var_dump($checkurl);
die Ausgabe ist:
string(16) "hddb://google.de"
also würde die Adrese als Valide durchgehen, was ja Quatsch ist ... hddb://
erwartet hätte ich als Ausgabe
bool(false)
alternativ ginge ja auch preg_match mit einem Regex für URLs
aber da finde ich verschiedene Beispiele,
welches regex für URL validate zur Prüfung mit preg_match() würdet Ihr mir empfehlen?
oder besser gleich prüfen, ob URL erreichbar ist ... header-Status oder andere Methode?
---> Wie am besten prüfen, ob URL valide (und erreichbar) ist ?
Danke
-
in: HTML-Entity Nummer und Dezimal-Code?
geschrieben von oindex
ja, wenn möglich, dann würde ich gerne direkt als UFT-8 ausgeben
aber ich bekomme als String (nach Auslesen einer Datei) auch nicht codierte Sonderzeichen rein,
und diese will ich "erkennen" und dann codieren, damit in Ausgabe dieser Sonderzeichen
auch richtig dargestellt wird, und nicht als ? oder Viereck
leider funktioniert utf8_encode() nicht für alle Sonderzeichen
also brauche ich eine andere Methode um auch diese "lesbar" (in UTF-8) augeben zu können
Beispiel: in dem String soll eigentlich ein langer Gedankenstrich stehen
wenn ich mir die dazugehörige XML Datei (Quelltext) ansehe, oder diesen ausgebe
dann sehe ich anstatt dem Gedankenstrich nur ein ?
... ich schätze mal, die Codierung ist schon beim Erstellen der XML-Datei "schief gegangen"
und ich habe da keine Chance aus dem ? wieder einen Gedankenstrich zu machen
-
in: Ajax Daumen-Hoch script realisieren.
geschrieben von oindex
kleines Beispiel Script mit 3 Dateien
Datei1: vote_page.php = Seite, auf dem das Voting angeboten wird
Datei2: vote_result.php = Include-Datei, auf dem das Voting ausgewertet wird
Datei3: vote_data.txt = Datei, in der das Voting-Ergebnis gespeichert wird
kann sicherlich noch optimiert werden, aber mal als Beispiel für die Funktionsweise
... anstatt in .txt könnte man die Ergebnisse auch in MySQL speichern
... das CSS-Style (und Javascript) könnte man auch noch in eigene Dateien "auslagern"
... etc.
zudem sollte man noch eine IP-Sperre machen, um mehrfache Votes zu verhindern
--------------------------------------------------------------------
Datei1: vote_page.php
<html> <head> <title>Abstimmung</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script type="text/javascript"> function getVote(usrvote) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("res_poll").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","vote_result.php?vote="+usrvote,true); xmlhttp.send(); } </script> <style type="text/css"> <!-- .vclick { font-family: Arial, Helvetica, sans-serif; font-size:14px; float:left; margin:2px 6px 2px 6px; padding:4px; cursor:pointer; border: 1px solid #AAAAAA; } .bg_green { background:#AAFFCC; } .bg_red { background:#FFCCCC; } --> </style> </head> <body> <p>--- <a href="vote_page.php">Abstimmung</a> --- </p> <p> </p> <div id="get_poll"> <h3>Sagst Du Ja oder Nein ... ?</h3> <p class="vclick bg_green" onclick="getVote('a')" />JA - Daumen hoch</p> <p class="vclick bg_red" onclick="getVote('b')" />NEIN - Daumen runter</p> </div> <p style="clear:both;"> </p> <div id="res_poll"> <?php include_once('vote_result.php'); ?> </div> <p> </p> </body> </html>
anstatt dem Link "JA - Daumen hoch" könnte man eine "Daumen hoch Grafik" als Link machen
und für den Link "NEIN - Daumen runter" entsprechend andere Grafik
die Styles in den <p> TAGs kann man anpassen
--------------------------------------------------------------------
Datei2: vote_result.php
<?php // -------------------------------------------- if (!empty($_REQUEST['vote'])) { $vote = $_REQUEST['vote']; } else { $vote = ''; } // -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- // ---- Altes Ergebnis laden---- $content = file_get_contents($filename); //put content in array $res_array = explode("|", $content); $res_a = $res_array[0]; $res_b = $res_array[1]; // ---- Neues Ergebnis berechnen ---- if (!empty($vote)) { if ($vote == 'a') { $res_a = $res_a + 1; } if ($vote == 'b') { $res_b = $res_b + 1; } // ---- Neues Ergebnis speichern ---- $insertvote = $res_a."|".$res_b; $fp = fopen($filename,"w",0666); fputs($fp,$insertvote); fclose($fp); } // -------------------------------------------- $gesamt_ab = ($res_b + $res_a); $gesdif_ab = ($res_a - $res_b); if (0 < $res_a) { $percent_a = (100*round($res_a/$gesamt_ab,2)); } else { $percent_a = 0; } if (0 < $res_b) { $percent_b = (100*round($res_b/$gesamt_ab,2)); } else { $percent_b = 0; } if (0 < $gesamt_ab) { $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); } else { $rank_a_b = $res_a; } $width_a = ($percent_a * 2); $width_b = ($percent_b * 2); // -------------------------------------------- ?> <h2>Ergebnis:</h2> <table width="400" cellpadding="2" cellspacing="2" border="0" bgcolor="#DEDEDE"> <tr align="left" valign="top"> <td width="45">Yes:</td> <td width="224"><img src="vote1.gif" width="<?php echo $width_a; ?>" height="20" /></td> <td width="58"><?php echo $percent_a.'%'; ?></td> <td width="71"><?php echo $res_a; ?></td> </tr> <tr align="left" valign="top"> <td width="45">No:</td> <td width="224"><img src="vote2.gif" width="<?php echo $width_b; ?>" height="20" /></td> <td width="58"><?php echo $percent_b.'%'; ?></td> <td width="71"><?php echo $res_b; ?></td> </tr> </table> <p> </p> <p><?php echo 'Stimmen Gesamt: ' . $gesamt_ab; ?></p> <p><?php echo 'Verhältnis: ' . $res_a .' zu '. $res_b; ?></p> <p><?php echo 'Rank-Wert: ' . $rank_a_b; ?></p> <p> </p>
Rank-Wert Berechnung, Ergebnis-Ausgabe und Art der Speicherung (z.B. MySQL)
kann man ja nach Bedarf / Vorlieben ändern und anpassen ...
--------------------------------------------------------------------
Datei3: vote_data.txt
0|0
hier werden die Ergenisse der Abstimmung gespeichert,
Alternative wäre Speichern in MySQL, dazu muss Datei2: vote_result.php angepasst werden
Insgesamt ist das hier nur ein "kleines" Beispiel
und wie gesagt, Optimierung geht noch einiges
für Abstimmungen für jeden Kommentar müsste man in AJAX-Übergabe
noch weitere Werte übergeben (ID vom Post/ Kommentar) und entprechend speichern
entweder über $filename oder weitere Spalte(n) in MySQL
damit man auch unterschiedliche Ergebnisse bekommt, je Kommentar / was auch immer
auch sollte man Mehrfach-Abstimmungen durch IP-Sperre blocken
aber das ist wieder ein anderes Thema, wäre zuviel für diesen Beitrag
ich hoffe das hilft schonmal ein bischen weiter
-
in: HTML-Entity Nummer und Dezimal-Code?
geschrieben von oindex
hmm, ok
aber warum geht dann das:
$mapping = array(); $i=0; foreach (get_html_translation_table(HTML_ENTITIES, ENT_QUOTES) as $char => $entity){ $mapping[$i]['entity'] = $entity; $mapping[$i]['char'] = $char; $mapping[$i]['code'] = '&#' . ord($char) . ';'; $i++; } print "<pre>\n"; print_r($mapping); print "</pre>\n";
Problem ist, das get_html_translation_table ... für Einsatz von htmlentities()
nicht wirklich Alle Sonderzeichen enthält
ich habe eine Liste zusätzlicher Sonderzeichen, die nicht in htmlentities() berücksichtigt werden
allerdings nur mit diesem &# Code und als Entities, und bestimmt auch nicht komplett
Array ( ['] => ' [−] => − [ˆ] => ˆ [˜] => ˜ [Š] => Š [‹] => ‹ [Œ] => Œ [‘] => ‘ [’] => ’ [“] => “ [”] => ” [•] => • [–] => – [—] => — [™] => ™ [š] => š [›] => › [œ] => œ [Ÿ] => Ÿ [ƒ] => ƒ [Α] => Α [Β] => Β [Γ] => Γ [Δ] => Δ [Ε] => Ε [Ζ] => Ζ [Η] => Η [Θ] => Θ [Ι] => Ι [Κ] => Κ [Λ] => Λ [Μ] => Μ [Ν] => Ν [Ξ] => Ξ [Ο] => Ο [Π] => Π [Ρ] => Ρ [Σ] => Σ [Τ] => Τ [Υ] => Υ [Φ] => Φ [Χ] => Χ [Ψ] => Ψ [Ω] => Ω [α] => α [β] => β [γ] => γ [δ] => δ [ε] => ε [ζ] => ζ [η] => η [θ] => θ [ι] => ι [κ] => κ [λ] => λ [μ] => μ [ν] => ν [ξ] => ξ [ο] => ο [π] => π [ρ] => ρ [ς] => ς [σ] => σ [τ] => τ [υ] => υ [φ] => φ [χ] => χ [ψ] => ψ [ω] => ω [ϑ] => ϑ [ϒ] => ϒ [ϖ] => ϖ [ ] =>   [ ] =>   [ ] =>   [‌] => ‌ [‍] => ‍ [‎] => ‎ [‏] => ‏ [‚] => ‚ [„] => „ [†] => † [‡] => ‡ […] => … [‰] => ‰ [′] => ′ [″] => ″ [‾] => ‾ [⁄] => ⁄ [€] => € [ℑ] => ℑ [℘] => ℘ [ℜ] => ℜ [ℵ] => ℵ [←] => ← [↑] => ↑ [→] => → [↓] => ↓ [↔] => ↔ [↵] => ↵ [⇐] => ⇐ [⇑] => ⇑ [⇒] => ⇒ [⇓] => ⇓ [⇔] => ⇔ [∀] => ∀ [∂] => ∂ [∃] => ∃ [∅] => ∅ [∇] => ∇ [∈] => ∈ [∉] => ∉ [∋] => ∋ [∏] => ∏ [∑] => ∑ [∗] => ∗ [√] => √ [∝] => ∝ [∞] => ∞ [∠] => ∠ [∧] => ∧ [∨] => ∨ [∩] => ∩ [∪] => ∪ [∫] => ∫ [∴] => ∴ [∼] => ∼ [≅] => ≅ [≈] => ≈ [≠] => ≠ [≡] => ≡ [≤] => ≤ [≥] => ≥ [⊂] => ⊂ [⊃] => ⊃ [⊄] => ⊄ [⊆] => ⊆ [⊇] => ⊇ [⊕] => ⊕ [⊗] => ⊗ [⊥] => ⊥ [⋅] => ⋅ [⌈] => ⌈ [⌉] => ⌉ [⌊] => ⌊ [⌋] => ⌋ [〈] => ⟨ [〉] => ⟩ [◊] => ◊ [♠] => ♠ [♣] => ♣ [♥] => ♥ [♦] => ♦ )
wenn aber in einem String dann eines der Zeichen im "Klartext" vorkommt, wie das EURO-Zeichen €
kann ich es damit nicht erkennen und zu Entity (oder Unicode &#) umwandeln
Auch die Browser-Ausgabe per Copy+Paste in eine .txt Datei geht nicht bei allen Zeichen
selbst mit Notepad++ und UTF-8 (mit oder ohne BOM) kommen nicht alle Zeichen an
viele bleiben ? oder so ein nichts-sagendes Viereck .... also kann ich diese dann nicht
in einem String "erkennen" ... mit Array vergleichen (mit file() aus .txt je Zeile ein Zeichen)
die Frage ist, wie bekomme ich saubere Ausgabe (sowohl in ISO-8859-1 als auch in UTF8)
von möglichst allen Sonderzeichen? ... meie Idee war halt Entities bzw. &# Codierung ... ?!
-
in: HTML-Entity Nummer und Dezimal-Code?
geschrieben von oindex
Hallo
wie komme ich von einer HTML-Entity Nummer zum Dezimal-Code?
BSP: wie komme ich von
auf 128 ??€
mit
bekomme ich als Ergebnis: 128echo ord('€');
ok, denn mit
bekomme ich wieder €echo chr(128);
ABER
wenn ich das Zeichen nicht im "Klartext" als € vorliegen habe,
sondern nur als€
wie komme ich davon auf den Dezimal-Wert ???
gibt es eine PHP Funktion, die mir zur HTML-Entity Nummer
den Dezimal-Wert ausgibt?€
oder über Umweg, aus
den "klartext" ASCII, den ich dann wieder durch ord() jagen kann ?!€