Suche auf lima-city
-
in: Seiten Blättern in MySQL Ergebnis
geschrieben von anlagegeld
Hallo
habe da mal eine Funktion zusammen-geschustert, die man evtl ab und zu brauchen kann
mit der kann man in MySQL-Abfragen mit größeren Ergebnisen über Seiten Blättern
BSP: Abfrage ergibt 74 Treffer,
Ausgabe z.B. auf 8 Seiten mit je (max.) 10 Ergebnissen pro Seite (letzte hat 4 Einträge)
schön an der Funktion finde ich, dass sie gleich einen HTML-Code zur Seiten-Navigation liefert
mit erste Seite ... dazwischen der Bereich rund um die aktuelle Seite und am Ende ... letzte Seite
den Bereich (Links zwischen erster und letzer Seite stehen) kann man in der Funktion als Wert setzen
die Anzahl der Ergebnisse pro Seite kannman bei Funktionsaufruf in Parameter angeben
hier die Funktion: Datei: func_getLimitStart.php
<?php // ----------- Seiten Blaettern in MySQL Ergebnis ------------ // ----------------------------------------------------------- function getLimitStart ($gesamt, $proseite, $seite) { $gesamt = preg_replace('/[^0-9]/','',$gesamt); $proseite = preg_replace('/[^0-9]/','',$proseite); $seite = preg_replace('/[^0-9]/','',$seite); ## $aufruf = '_test1.php'; // Dateiname auf der das Ergebnis steht $aufruf = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; $xlimit = 3; // Anzahl Links in Seiten-Navigation (zwischen erster und letzer Seite) // ------------------------------- $pmax = ceil($gesamt/$proseite); // letzte Seite if ($pmax < $seite) { $seite = 1; } if ($seite < 1) { $seite = 1; } $pstart = ( ($seite * $proseite) - $proseite ); $pender = ( $pstart + $proseite ); // ---------- Seiten Navigatiin -------- $yps = ($seite-2); if ($yps < 1) { $yps = 1; } $ype = ($yps + $xlimit); for ($zp=0; $zp<$xlimit; $zp++) { if ($seite == ($pmax-$zp)) { $yps = ($yps-($xlimit-$zp-1)); } } $pagenavi = ''; ## $pagenavi .= ' '; $pagenavi .= 'Seiten: '; if ($seite == 1) { $pagenavi .= " <u>001</u> "; } else { $pagenavi .= " <a href=\"".$aufruf."?p=1\" title=\"Seite 001\">001</a> "; } // ------------------------ if ($pmax > 1) { $pagenavi .= " ... "; for($xp=$yps; $xp<$ype; $xp++) { $np = ($xp + 1); if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "0".$np; } if ($np < $pmax) { if ($np == $seite) { $pagenavi .= " <u>".$npi."</u> -"; } else { $pagenavi .= " <a href=\"".$aufruf."?p=".$np."\" title=\"Seite ".$npi."\">".$npi."</a> -"; } } } $pagenavi = rtrim($pagenavi,'-'); if (10 < $pmax AND $pmax < 100) { $pmaxi = "0".$pmax; } elseif ($pmax < 10) { $pmaxi = "00".$pmax; } else { $pmaxi = "0".$pmax; } if ($seite == $pmax) { $pagenavi .= " ... <u>".$pmaxi."</u> "; } else { $pagenavi .= " ... <a href=\"".$aufruf."?p=".$pmax."\" title=\"Seite ".$pmaxi."\">".$pmaxi."</a> "; } } // ------------------------------------- return array($pstart, $seite, $pagenavi, $pmax); } // ----------------------------------------------------------- ?>
und hier ein Beispiel der Anwendung
<?php // ------------- Beispiel Anwendung ------- // ---- Config und Datenbank-Verbindung $con herstellen ---- $db_host = 'xxxxxxxxx'; $db_user = 'yyyyyyy'; $db_pass = 'zzzzzzzzz'; $db_name = 'aaaaaaaa'; $db_tabelle1 = 'prefix_meinetabelle'; // --- Tabelle auswaehlen $plimit = 10; // ---- Anzahl (Ausgabe) pro Seite ---- // ------------------- $con = mysql_connect($db_host,$db_user,$db_pass); if (!$con) { echo "<br >Fehler: <br >\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); // ---------- Anzahl Gesamt ermitteln ------- $sql_select1 = "SELECT * FROM `".$db_tabelle1."`"; $result_select1 = mysql_query($sql_select1, $con); $num_rows1 = mysql_num_rows($result_select1); // ---------- Aktuelle Seite ermitteln -------- if (!empty($_REQUEST['p'])) { $pseite = trim(chop($_REQUEST['p'])); } else { $pseite = 1; } // ----- Funktion laden und aufrufen ---- include_once('func_getLimitStart.php'); $erg = getLimitStart($num_rows1, $plimit, $pseite); $pstart = $erg[0]; // ---- Startwert fuer LIMIT in SQL $iseite = $erg[1]; // ---- die aktuelle Seite $pagenavi = $erg[2]; // ---- HTML der Seiten Navigation $pmax = $erg[3]; // ---- letzte Seite $pstartinfo = ($pstart+1); // ---- ab dem Ergebnis $penderinfo = ($pstart+$plimit); // ---- bis zum Ergebnis // ------- SQL anpassen !!!! ------- $sql = "SELECT * FROM ".$db_tabelle1." LIMIT ".$pstart.",".$plimit.""; $result = mysql_query($sql, $con); if (!$result) { echo "<br >Fehler: <br >\r\n" . mysql_error(); exit; } $daten = array(); while ( $row2 = mysql_fetch_assoc($result) ) { $daten[] = $row2; } // ------- Ausgabe Seiten Info ------- echo "<p>Gesamt: <strong>".$num_rows1."</strong> Einträge auf <strong>".$pmax."</strong> Seiten. "; echo " Aktuelle Seite: <strong>".$iseite."</strong> (Einträge von ".$pstartinfo." bis ".$penderinfo.") </p>\r\n"; // ------- Ausgabe Seiten Navigation ------- echo "<p style=\"font-size:20px;\">".$pagenavi."</p>\r\n"; // ------- Ausgabe Seiten Inhalt / Daten ------- $pnr = ($pstart + 1); foreach($daten as $ashow) { echo "<br />".$pnr."\r\n"; echo "<pre>\r\n"; print_r($ashow); echo "</pre>\r\n"; echo "<hr />\r\n"; $pnr++; } // ----------- Ende ------ echo "<br />\r\n"; echo "<br /> FOOTER \r\n"; echo "<br />\r\n"; // ----------------------------------------------------------- ?>
zum Testen / Nutzen muss man die Dazenbank Zugangsdaten anpassen
eine Tabelle mit genug Einträgen haben
und man kann die SQL Zeile anpassen ... z.B. WHERE Bedingungen und ORDER BY etc.
// ------- SQL anpassen !!!! ------- $sql = "SELECT * FROM ".$db_tabelle1." WHERE ..... ORDER BY ..... LIMIT ".$pstart.",".$plimit."";
die Ausgabe in der foreach() Schleife mit print_r() ist natürlich auch nur zum Testen
ob und welche Daten ankommen, auch da sollte man die Ausgabe selbst gestalten
Die Funktion funktioniert bei meinen Tests ganz gut,
vielleicht ha ja jemand noch Verbesserungs-Vorschläge oder findet Bugs, etc.
viel Spaß damit
-
in: Wie mittels PHP Script IPs speichern ?
geschrieben von anlagegeld
und wenn man die IPs verschlüsselt speichert,
so das man sie selbst garnicht mehr entschlüsseln kann ?
Beispiel:
$secret_key = 'uE4RgB29oPsTfCi51Hy'; $user_ip = md5($secret_key.$_SERVER['REMOTE_ADDR']);
dann sollte es doch rechtlich OK sein
dumme Frage:
wie kann man dann eine bestimmte IP-Adresse aussperren,
wenn diese z.B. die Webseite zu spammt oder ähnlich unerwünschtes macht ?!
-
in: mysql INSERT mit IF Bedingung ?
geschrieben von anlagegeld
geilerheiler schrieb:
Kommt drauf an, vielleicht macht einer, ich weiß ja nicht was dein Script macht, abertitel = Online-Kaufhaus link = http://ebay.de
und der andere macht es sotitel = Online-Kaufhaus link = http://amazon.de
Das sind ja zwei verschiedene Links.
ja, aber ich will die Titel für Rewrite zu einer Einzel-Seite je Eintrag verwenden
da kann ich keine zwei gleichen Titel gebrauchen, oder ich muss bei mehrfachen noch ne Art Zähler bauen
geilerheiler schrieb:
Ansonsten machste einfach so:
"SELECT url,titel FROM tabelle WHERE url = '$url_user' AND titel = '$titel_user'"
naja, dann ist aber die Bedingung AND so, dass nur bei titel UND url schon da
es soll aber auch dann wenn nur eins von beiden schon da ist ein Ergebnis liefern
also doch eher OR ...
oder ichmach die Spalten mit UNIQUE Index und dann INSERT mit IGNORE ...
macht das vielleicht mehr Sinn ?
-
in: Wie mittels PHP Script IPs speichern ?
geschrieben von anlagegeld
erstmal sorry, es muss so heissen
$filename = 'data/mylogfile.txt';
aber vergiss es IP Counter auf Datei-Basis
Warum das versagt kann ich auch nicht erklären, aber es versagt !!!
vielleicht wei bei fopen() zur gleichen Sekunde irgend ein Fehler auftritt ...
habe selber schon die Erfahrung gemacht, dass aufeinmal die log Datei leer war
also totaler Datenverlust .... mach es besser gleich mit mySQL ... !!!
es gibt dazu auch zahlreiche Tutorials
Google: http://www.google.de/search?q=php+mysql+ip+counter oder ähnliche Suche
-
in: Wie mittels PHP Script IPs speichern ?
geschrieben von anlagegeld
ich würde ja $_SERVER['REMOTE_ADDR'] nehmen
zum Speichern in Log File ... würde dann auch Datum (Timestamp) dazu Speichern
(ohne MySQL)
$ts = time(); $ip = $_SERVER['REMOTE_ADDR']; $filename = 'data'/mylogfile.txt'; $handle = fopen($filename,"a"); $eintrag = $ts.";".$ip."\n"; fwrite($handle,$somecontent); fclose($handle);
und zum auslesen dann
$filename = 'data'/mylogfile.txt'; $daten = file($filename); foreach($daten as $zeile) { $item = explode(';',$zeile); echo "<br />Zeit: ".date('y-m-d H-i-s',$item[0]); echo "<br />IP: ".$item[1]; }
so wird die Log-Datei (bzw. die MySQL Tabelle) aber in kurzer Zeit sehr groß,
weil jeder Aufruf gespeichert wird
EDIT: ... und bei Zugriff von 2 oder mehr Usern zur gleichen Zeit versagt Datei-Speichern !!!!
deshalb besser MySQL nehmen, die Beispiele sollen ja nur das Prinzip erklären
egal ob in Datei oder in MySQL,
Du solltest mehrfache Aufrufe einer IP (in bestimmten Zeitraum) nicht Speichern
oder bei mehrfachen Aufrufen einen Zähler hinzufügen, also als weitere Spalte
bei File kann man z.B. für jeden Tag eine eigene Log-Datei machen
und Dateien, die älter als z.B. 14 Tage sind, dann wieder löschen
EDIT: aber von Datei rate ich bei sowas eher ab, wegen gleichzeitiger Zugriffe = Datenverlust
bei mysql kann man auch Einträge die älter sind als z.B. 14 Tage wieder löschen
sonst werden das in kurzer Zeit unmengen von Daten
$abstand = (3600*24*14); // Abstand 14 Tage $deltime = ($ts -$abstand); $loeschen = mysql_query("DELETE FROM tabelle WHERE logtime < $deltime ");
vorausgesetzt Du hast die Spalte logtime in der Tabelle angelegt und mit dem Timespamp gefüttert
PS:
das hier sind alles nur Beispiele und allgemeine Tips, keine Lösungen !!!
Meine Empfehlung ist auch eher MySQL,
denn besonders wenn mehrere User gleichzeitig die Seite aufrufen
dann versagt das Datei-Speichern .... MySQL ist da deutlich "stabiler"
PS2:
und wie ist das eigentlich rechtlich mit IP-Adressen Speichern ?
Stichwort: Vorratsdatenspeicherung ... evtl verschlüsselt Speichern? Maximale Speicher-Zeit? etc?
-
in: mysql INSERT mit IF Bedingung ?
geschrieben von anlagegeld
ok, also muss ich doch die Abfrage vorher machen
und ist das richtig, für ... url ODER titel ist vorhanden
WHERE (url = '$neu_url' OR titel = '$neu_titel')
oder muss ich da zwei Abfragen machen, je eine für url und eine für titel ?
-
in: mysql INSERT mit IF Bedingung ?
geschrieben von anlagegeld
Hallo
ich habe eine tabelle mit url, titel, bechreibung, etc
User sollen neue Links vorschlagen können
wie prüfe ich am besten, ob neue URL (und/oder neuer Titel) bereits in der Tabelle ist
um keine doppelten Einträge zu bekommen ?
gibt es sowas wie eine IF Bedingung für INSERT Befehl
... nur eintragen wenn url nicht in Tabelle und wenn titel nicht in Tabelle
geht das auch direkt im INSERT Befehl ?
INSERT INTO tab_name (feldname1, feldname2, feldname3) VALUES (wert1, wert2, wert3) IF ( ... nur wenn feldname1 noch nirgends den Wert wert1 hat ) AND IF ( ... nur wenn feldname2 noch nirgends den Wert wert2 hat )
... aber wie ? ... geht das überhaupt, quasi innerhalb INSERT ne Abfrage ob schon vorhanden ?
wenn ja, bitte ein Beispiel, Danke !
oder muss ich vor dem INSERT eine Abfrage machen ?
SELECT url, titel FROM ... WHERE (url = '$neu_url' OR titel = '$neu_titel')
und dann mit ...
if (mysql_num_rows($query) > 0) { /* schon vorhanden */ } else { /* .... ok ... INSERT ...*/ }
also vor dem INSERT prüfen ???
-
in: MySQL Array in Spalte?
geschrieben von anlagegeld
Hallo
bei einfachen Arrays die Array-Elemente mit einem individuellem Trenner als String
ählich wie bei CSV mit | Pipe oder ; Semikolon (Trenner vorher aus Strings escapen)
mit implode() speichern und beim ausleden dann mit explode()
oder mit serialize() und unserialize() .... http://php.net/manual/de/function.serialize.php
damit kann man Arrays als String ablegen und wieder auslesen
Edit: oder hab ich das falsch verstanden ? .... CONCAT ... ok -
in: Kategorien und Unterkategorien
geschrieben von anlagegeld
Hallo
ich versuche gerade Kategorien und Unterkategorien zu managen
mit 2 Ebenen bekomme ich es hin, aber ab der dritten Ebene versage ich kläglich
ich speichere die Kategorien in einer MySQL Tabelle
Jede Kategorie hat eine eigene ID (auto increment)
Hauptkategorien haben in der Spalte ['topkat'] den Wert 0
Unterkategorien haben in der Spalte ['topkat'] den Wert der übergeordneten Kategorie
Wie bekomme jetzt eine mehrdimensionales Array,
das jede Unterkategorie in eine Ebene unter die übergeordnete Kategorie legt
(ohne in der Schleife für jede Kategorie wieder eine MySQL Anfrage zu starten)
Wie muss die Abfrage aussehen (bzw. PHP Logik mit Daten-Array aus Tabelle)
damit ich für Kategorien in mehrern Ebenen (als hierarchisches Array) bekomme ?
Danke!
-
in: mehrere Teaxtareas durch JS Funktion prüfen
geschrieben von anlagegeld
Vielen Dank, so funktionirt es
Firebug werde ich mir mal reinzeihen und sehen was man damit rausziehen kann
auch das mit OnSubmit habe ich ausprobiert, funktioniert zwar
aber irgendwie sind nach Aufruf der alert Meldung alle vorherigen Eingaben im Formular dann weg
das leigt wahrscheinlich daran, dass ich Cache ausgeschalten habe (in htaccess)
also prüfe ich nach Absenden per PHP, und wenn unvollständig geht es zurück zum Formular
mit Übergabe der bereits eigegebenen Inhalte (so dass man nicht alles nochmall neu schreiben muss)
Danke für die Hilfe ! -
in: HTML Formular mit PHP
geschrieben von anlagegeld
weil du im gleichen Formular die zwei Submit Buttons hast
Du musst für jede Aktion (vor/zurück) je ein eigenes Formular machen
sonst werden immer beide Buttons abgesendet, auch wenn Du nur einen klickst
und Du musst prüfen, ob der Monat schon "gewechselt" hat, dann diesen verwenden, sonst aktuellen
mal mal ganz grob ein Beispiel ( zwei Formulare in Tabelle )
<?php $mo_name = array( '1' => 'Januar', '2' => 'Februar', '3' => 'März', '4' => 'April', '5' => 'Mai', '6' => 'Juni', '7' => 'Juli', '8' => 'August', '9' => 'Semptember', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember' ); if (!empty($_REQUEST['mon'])) { $monat = $_REQUEST['mon']; } else { $monat = date('n'); } if (!empty($_REQUEST['jah'])) { $jahr = $_REQUEST['jah']; } else { $jahr = date('Y'); } if (!empty($_REQUEST['go1'])) { $monat--; } if (!empty($_REQUEST['go2'])) { $monat++; } if (12 < $monat) { $jahr++; $monat = 1; } if ($monat < 1) { $jahr--; $monat = 12; } ?> <br> <table width="400" border="0" cellspacing="2" cellpadding="2" bgcolor="#DEDEDE"> <tr> <td width="15%" align="center" valign="top"> <form name="form1" method="post" action=""> <input type="submit" name="go1" value="<--"> <input type="hidden" name="mon" value="<?php echo $monat; ?>"> <input type="hidden" name="jah" value="<?php echo $jahr; ?>"> </form> </td> <td width="70%" align="center" valign="top"> <?php echo "<span style=\"font-size:22px\">".$mo_name[$monat]."</span>"; echo "<br><span style=\"font-size:16px\">".$jahr."</span>"; ?> </td> <td width="15%" align="center" valign="top"> <form name="form2" method="post" action=""> <input type="submit" name="go2" value="-->"> <input type="hidden" name="mon" value="<?php echo $monat; ?>"> <input type="hidden" name="jah" value="<?php echo $jahr; ?>"> </form> </td> </tr> </table> <br> <br> <br>Monat Zahl: <?php echo $monat; ?> <br>Monat Name: <?php echo $mo_name[$monat]; ?> <br>Jahr: <?php echo $jahr; ?> <br> <br>
das geht sicher auch noch besser :)
-
in: SESSION funktioniert so nicht...
geschrieben von anlagegeld
Hallo
Für Fehler-Ausgabe muss neben error_reporting() auch display_errors an schalten
ini_set("display_errors", ON);
wobei ich nicht weiss, ob auf lima-city ini_set funktioniert
sonst direkt in eine php.ini schreiben
error_reporting = E_ALL|E_STRICT display_errors = On display_startup_errors = On
wobei ich nicht weiss, ob auf lima-city eine eigene php.ini funktioniert
sonst in eine .htaccess Datei
php_flag display_errors on php_value error_reporting 30711
Erklärung für den Zahlenwert siehe: http://www.php.net/manual/de/errorfunc.constants.php
(beachte dabei unterschiedliche Werte für verschiedenen PHP Versionen)
und bei Deinem zweiten echo fehlt ein Semikolon ; (Strichpunkt) am Ende
echo "Variable gespeichert.";
das hat ja hemiolos schon geschrieben, ich weise nur nochmal drauf hin ... -
in: Seiten Änderung ohne Cache löschen
geschrieben von anlagegeld
entweder .htaccess
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform" Header set Pragma "no-cache"
oder am Script-Anfang (ganz oben) wenn Seite nicht vorher Ausgabe startet (header already sent)
<?php header('Cache-Control no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform'); header('Pragma no-cache'); // ------- weiterer PHP Code ----- ?>
oder mit META-TAGs im HEAD TAG
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="-1" /> <meta http-equiv="Cache-Control" content="no-cache" />
... aber die sind nicht so zuverlässig, scheint auf lima-city nicht wirklich zu greifen
(evtl weil andere Header Einstellungen in PHP schon gesetzt wurden)
-
in: mehrere Teaxtareas durch JS Funktion prüfen
geschrieben von anlagegeld
simuliertes schrieb:
Beachte das [0] bei getElementsBYTagName("SPAN")[0]
Damit rufe ich das ERSTE (es wird bei null angefangen zu Zählen) SPAN Element INNERHAB des Elternnotens von this auf.
Also knntest Du mit getElementsBYTagName("SPAN")[1] das zweite Feld aufrufen.
ja, das habe ich wohl verstanden, parentNode = Eltern-Element
und auch dass Arrays mit 0 (NULL) fürs ERSTE Element beginnen
bei meinem Code oben funktioniert es ja auch wunderbar im ersten DIV
(Minimum Zeichen im 2ten INPUT und Ausgane im 2ten SPAN)
es werden im ersten DIV die Max. und die Min. Zeichen gezählt und angezeigt,
nur im zweiten DIV klappt es dann nicht mehr .... dort ist nur ein INPUT und ein SPAN
sobald ich dort auch ein zweites INPUT vor die textarea einfüge, dann funktioniert auch das
2tes DIV:
<div> <input name="maxNum" type="hidden" value="50" /> <input name="minNum" type="hidden" value="0" /> <textarea name="mytextfeld1" cols="64" rows="5" onKeyUp="countDigits(this)" onClick="countDigits(this)"></textarea> <p>Noch <span id="maxzeichen2" class="counter">50</span> Zeichen für die Beschreibung </p> </div>
aber das erste INPUT (im 2ten DIV) war doch da .... und ich habe angenommen,
wenn es kein zweites INPUT vorhanden, dann ist Wert minDigits mit INPUT')[1] einfach 0 (null)
ok, es kann auch sein, dass dieser Wert minDigits dann anstatt 0 doch 'false' ist
und deshalb die Rechnung miniLength = minDigits - areaString.length; einen Fehler verursacht
aber wenn ich einfüge
... var minDigits = node.parentNode.getElementsByTagName('INPUT')[1].value; //minimale Zeichenanzahl if (minDigits === false) { minDigits = 0; } ...
dann klappt es auch nicht, also doch nicht false ?!
wenn ich im 2ten DIV ein zweites INPUT einfüge, dann funktioniert beides ....
also wenn ich INPUT')[1] auslese im Script, muss es dann auch zwingend vorhanden sein ?
... wenn nicht, wass passiert dann, kommt sofort ein Script Abbruch
oder gibt es einen Rückgabe-Wert den man aus-filtern kann ?
Danke
-
in: Tabs - ohne Seite neu zu laden
geschrieben von anlagegeld
das Beispiel auf der Seite ist wohl eher flash,
aber Du suc´hst wohl JavaScript ?
http://www.google.de/search?q=javascript+tabs
http://www.google.de/search?q=jquery+tabs
es gibt viele tutorials zum thema tabs mit JS
... oder willst Du ein slide-menü ? -
in: Unterseiten ermitteln und gruppieren
geschrieben von anlagegeld
ne... aehhm ja ...
die SubDomains sollten schon bleiben,
ich will auch Freehoster Subdomains als unique Hosts behandeln,
würde ich nur Domains (ohne SubDomains) machen dann hätte ich
bei 10 verschiedenen Lima-City Userseiten alles in einem Blok lima-city.de
ich will aber für jede eigenständige Webseite (auch von Freehoster Subdomain) eigene Blöcke
ich hab mir die Antwort ja quasi schon selbst gegeben, .. idee beim Schreiben bekommen
$hostliste = array(); $i=0; foreach ($daten as $ditem) { $purl = parse_url($ditem['nlink']); $hostliste[$purl['host']][$i] = $ditem; // 3D-Array $i++; } foreach($hostliste as $host => $aitem) { echo "<h2>".$host."</h2>\r\n"; foreach($aitem as $ashow) { echo "<pre>\r\n"; print_r($ashow); echo "</pre>\r\n"; } echo "<hr />\r\n"; }
die Frage ist nur bis wieviele URLs das gut geht .... wegen Speicher oder Timeout
bzw so wird es aufwendig die Ausgabe in Seiten zu splitten mit LIMIT in mySQL Abfrage
denn wenn ich LIMIT setze, dann sind garantiert noch URLS vom Host ausserhalb des LIMITs
da müsste ich je Host noch eine MySQL Abfrage machen, um die restlichen Links zu finden
vielleicht hat ja jemand ne bessere Idee, wie ich das managen kann ?!?
Danke -
in: Unterseiten ermitteln und gruppieren
geschrieben von anlagegeld
Hallo
ich habe in einer MySQL Tabelle einige URLs
manche davon sind Unter-Seiten von einer Domain bzw. von einer SubDomain.
wie kann ich die Links so sortieren, dass alle Seiten die jeweils auf der gleichen Domain liegen
gemeinsam in einem Block angezeigt werden,
dabei sollen aber SubDomains als eigene Domains behandelt werden (z.B. Lima-city User Seiten)
$sql_select = "SELECT * FROM `".$db_tabelle1."`"; $result_select = mysql_query($sql_select, $con); if (!$result_select) { echo "<br >Fehler: <br >\r\n" . mysql_error(); exit; } $daten = array(); while ( $row = mysql_fetch_assoc($result_select) ) { $daten[] = $row; } echo "<pre>\r\n"; print_r($daten); echo "</pre>\r\n";
Also 2D Array und Der Spaltenname für die URLs ist 'nlink'
Wie kann ich jetzt das $daten Array so sortieren (gruppieren)
dass alle URLs von der gleichen Domain (bzw. Subdomain)
nacheinander im Array vorliegen ? (bzw. gruppiert ausgegeben werden können)
ich kann mit parse_url() den host ermitteln, aber dann die Sortierung der Daten ?
$hostcheck = array(); foreach ($daten as $ditem) { $purl = parse_url($ditem['nlink']); if (!in_array($purl['host'], $hostcheck)) { $hostcheck[] = $purl['host']; } }
dann habe ich ein Array mit allen vorkommenden HOSTs
wie soll ich dann je unique HOST die URLs zuordnen?
Schleife um die unique HOSTs und je HOST dazu eine neue MySQL Abfrage ?
... oder (spontane IDEE) soll ich hier gleich ein Array erstellen mit KEY = HOSTNAME
$hostliste = array(); foreach ($daten as $ditem) { $purl = parse_url($ditem['nlink']); $hostliste[$purl['host']][] = $ditem; // 3D-Array }
ob das funktioniert? Hostname als Key und in 3.Ebene die Daten zum Eintrag ?!?
aber wie bekomme ich dann die Daten so sortiert in ein Array für die Ausgabe (2D Array) ?
oder gibts ganz andere (bessere) Lösungen ?
.. z.B. beim Speichern neuer Einträge HOST gleich als neue Spalte in Tabelle dazu
das wäre wohl das Beste (einfachste) aber dann muss ich DB neu anlegen und Daten neu importieren
... sorry, ich "denke" hier laut, paar Ideen sind mir erst beim Schreiben gekommen
wie würdet Ihr es machen: URLs nach HOST sortiert (gruppiert) ausgeben ?
-
in: mehrere Teaxtareas durch JS Funktion prüfen
geschrieben von anlagegeld
ahhhhh ok
ich hatte es etwa so versucht (das this in der Funktion abfangen)
var areaString = document.forms[0].this.value;
was ja nicht funktioniert hat ... Danke für den Code !!!
noch (kleine) Frage:
so wie es aussieht, können doch die hidden-Fields auch unterschiedliche Namen haben
also maxNum1 und maxNum2 usw.
noch ne (größere) Frage:
wie kann ich jetzt auch noch für einzele (nicht alle) Textareas eine Mindest-Zeichen-Anzahl verlangen
z.B. ein zweites hidden-Field und <span> Tag einfügen
und im JS Code dann entsprechende Rechnung und Ausgabe-Zuweisung
<html> <head> <title>Test</title> <script type="text/javascript"> //<![CDATA[ function countDigits(node){ var maxDigits = node.parentNode.getElementsByTagName('INPUT')[0].value; //maximale Zeichenanzahl var minDigits = node.parentNode.getElementsByTagName('INPUT')[1].value; //minimale Zeichenanzahl var outmax = node.parentNode.getElementsByTagName('SPAN')[0]; var outmin = node.parentNode.getElementsByTagName('SPAN')[1]; var areaString = node.value; var currLength = areaString.length + 1; var restLength = maxDigits - areaString.length; var miniLength = minDigits - areaString.length; if (restLength < 0) { restLength = 0; } if (miniLength < 0) { miniLength = 0; } outmax.innerHTML = restLength; outmin.innerHTML = miniLength; if (areaString.length >= maxDigits) { //die folgende Zeile entfernt alle Zeichen die groesser als maxDigits sind node.value = node.value.substring(0,maxDigits); } } //]]> </script> </head> <body> ... <form name="formular1" method="post" action=""> <div> <input name="maxNum" type="hidden" value="500" /> <input name="minNum" type="hidden" value="100" /> <textarea name="mytextfeld1" cols="64" rows="9" onKeyUp="countDigits(this)" onClick="countDigits(this)"></textarea> <p>Maximal noch <span id="maxzeichen1" class="counter">500</span> Zeichen für die Beschreibung </p> <p>Mindestens noch <span id="minzeichen1" class="counter">100</span> Zeichen für die Beschreibung </p> </div> <div> <input name="maxNum" type="hidden" value="50" /> <textarea name="mytextfeld1" cols="64" rows="4" onKeyUp="countDigits(this)" onClick="countDigits(this)"></textarea> <p>Noch <span id="maxzeichen2" class="counter">50</span> Zeichen für die Beschreibung </p> </div> <br /> OK: <input type="submit" name="run" value="Abschicken" /> </form> ... </body> </html>
das mit .... Noch mindestens x Zeichen ... funktioniert dann zwar im ersten Textfeld
aber im zweiten Textfeld wird nicht mehr der Wert für maximale Zeichen aktualisiert ?!
verstehe aber grad garnicht, warum es jetzt damit nur noch im ersten Textfeld funktioniert ?
irgendwo ist der Wurm drin, aber wo .... ???
EDIT: ideal wäre dann noch, wenn man das Formular erst dann abschicken kann
wenn die Mindest-Zeichen Bedingung(en) erfüllt ist (sind) ... :)
-
in: mehrere Teaxtareas durch JS Funktion prüfen
geschrieben von anlagegeld
Hallo
ich habe ein Formular mit mehreren <textarea>
und möchte für bestimmte Textareas nur eine gewisse Anzahl Zeichen zulassen,
ich habe es bisher einfac in zwei Funktionen gepackt
aber die Frage ist, wie kann ich das mit nur einer Funktion machen
so dass bei Klick in das Formularfeld die entsprechenden Ein-/Ausgabe Werte (name, id) angesprochen werden
ich habe es mit this versucht, aber ohne Erfolg
hier das Script mit den 2 Funktionen (die ich gerne als eine hätte, bzw. dynamisch
so dass ich nicht für jedes weitere Textfeld eine eitere Funktion erstellen muss
<script type="text/javascript"> //<![CDATA[ function countDigits1(){ var maxDigits = 500; //maximale Zeichenanzahl var areaString = document.forms[0].mytextfeld1.value; var currLength = areaString.length + 1; var restLength = maxDigits - areaString.length; if (restLength < 0) { restLength = 0; } document.getElementById("mytextfeld1").innerHTML = restLength; if (areaString.length >= maxDigits) { //die folgende Zeile entfernt alle Zeichen die groesser als maxDigits sind document.forms[0].mytextfeld1.value = document.forms[0].mytextfeld1.value.substring(0,maxDigits); } } function countDigits2(){ var maxDigits = 200; //maximale Zeichenanzahl var areaString = document.forms[0].mytextfeld2.value; var currLength = areaString.length + 1; var restLength = maxDigits - areaString.length; if (restLength < 0) { restLength = 0; } document.getElementById("mytextfeld2").innerHTML = restLength; if (areaString.length >= maxDigits) { //die folgende Zeile entfernt alle Zeichen die groesser als maxDigits sind document.forms[0].mytextfeld2.value = document.forms[0].mytextfeld2.value.substring(0,maxDigits); } } //]]> </script> ... <textarea name="mytextfeld1" cols="64" rows="6" onKeyUp="countDigits1()" onClick="countDigits1()"></textarea> <p>Noch <span id="mytextfeld1" class="counter">500</span> Zeichen für die Beschreibung </p> <textarea name="mytextfeld2" cols="64" rows="6" onKeyUp="countDigits2()" onClick="countDigits2()"></textarea> <p>Noch <span id="mytextfeld2" class="counter">200</span> Zeichen für die Beschreibung </p> ...
also wie mache ich aus den zwei Funktionen oben nur eine, die ich für beliebig viele Textfelder verwenden kann
z.B. bei Funktions-Aufruf mit Parameter Übergabe .... aber wie die Parameter als Variable verwenden
in z.B.: document.forms[0].mytextfeld2.value ... also anstelle mytextfeld2 aus Parameter-Übergabe
oder mit this ... ?
-
in: Formular Pflichtfelder funktionieren nicht!
geschrieben von anlagegeld
Hallo
ich würde Eingabe-Variablen immer neu zuweisen und dabei gleich escapen (Sicherheit)
$name = stripslashes(trim(chop($_GET['name'])));
... und evtl. auch nur bestimmte Zeichen zulassen...
$name = preg_replace('/[^0-9_a-z]/i', $name);
usw, je nach Anforderung (eMail Syntax prüfen, min../max. Zeichen, etc.)
-
in: Include
geschrieben von anlagegeld
Hallo
weiße Seite deutet auf Fehler hin, der nicht ausgegeben wird
wäre die Hauptseite eine .html (und keine .php) dann würde ja der PHP Quellcode angezeigt werden ?!
pooldreams schrieb:
<?php error_reporting(E_ALL); ?>
wenn so keine Fehlermeldung kommt, dann versuch es mal mit .htaccess
php_flag display_errors on php_value error_reporting 2039
oder Wert 30719 für E_ALL
(30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously)
siehe: http://www.lima-city.de/thread/php-debug-modus
bzw hier http://www.php.net/manual/de/errorfunc.constants.php
und dann bitte bier die Fehlermeldung posten
... aber schon seltsam, im Code auf den ersten Blick kein Fehler zu sehen
Edit / PS: sicher, dass die zu includenden Dateien im Hauptverzeichnis liegen?
oder sind die in einem Unterodner abgelegt ? ... ist mal mein Verdacht hier
-
in: dynamisch mehrstufige Auswahl in Formular ?
geschrieben von anlagegeld
ja
das gefällt mir schon besser
eigentlich hatte ich es mir so vorgestellt,
dass die SELECTs alle schon komplett ausformuliert im Quellcode stehen
und bei entsprechender Auswahl per CSS sichtbar werden
aber so, mit Daten-Array und SELECT Feld bei Bedarf generieren / füllen
scheint es ja doch besser zu sein, das spart zumindest Quellcode,
ist aber bischen aufwändiger zum Einrichten (für mich) da ich bisher
die einzelnen SELECT Felder halt als ausformulierten Quellcoe habe
mit dem jQuery Plugin bekomme ich is auf jeden Fall gebacken, Danke !!!
-
in: dynamisch mehrstufige Auswahl in Formular ?
geschrieben von anlagegeld
Hallo
habe etwas gefunden, was meinen Wünschen schon recht nahe kommt
siehe: http://www.scriptwelt.org/javascripte/Navi/Demo/d_multi_dropdown.html
ist halt aber was ur-altes
jetzt hätte ich sowas gerne mit 3 DropDowns in Reihe
und mit check, ob auch alle Felder ausgewählt wurden
am besten Absende Button erst einblenden, sobald die Auswahl komplett
gerne auch mit jquery
EDIT:
oder hier: http://javascript.internet.com/forms/dropdown-box-population.html
oder das hier gefunden: Tripple Dropdown Menu
Hier: http://www.trans4mind.com/personal_development/JavaScript/tripleMenu.htm
ist aber noch komplizierter ...
-
in: dynamisch mehrstufige Auswahl in Formular ?
geschrieben von anlagegeld
Hallo
ich möchte ein Formular bauen, in dem erst je nach Auswahl weitere Eingabe-Elemente angezeigt werden
bisher mache ich es so, dass man für einen kompletten Durchgang 3x absenden muss, also mit zwischenspeichern, aber gibt es nicht eine Möglichkeit, gleich bei Auswahl im ersten Element je Auswahl dazu dann ein zweites anzuzeigen und optional ein drittes ?
BSP:
Schritt 1 - Dropdown Auswahl mit verschiedenen Produkten
Schritt 2 - jedes Produkt hat verschiedene Eigenschaften, je nach Auswahl von Schritt 1 wird das passende Eigenschaft-Auswahl-Element dazu angezeigt
Schritt 3: für manche Eigenschaften gibt es noch weitere Optionen, je nach Auswahl von Schritt 2 wird, falls vorhanden, das dazu gehörige dritte Auswahl-Elemet angezeigt.
Erst wenn alle Schritte komplett sind, dann den Button zum Absenden des Formulars einblenden
Ein Beispiel mit nur 2 Ebenen (ohne die optionale dritte) würde mir auch schon helfen
-
in: innerhalb Wort grosser Buchstabe ?
geschrieben von anlagegeld
Hallo
aber was passiert wenn ein Wort nur aus Gross-Buchstaben besteht
Bsp: $string = "ich bin AutoFahrer eines BMW aber und meineFrau fährt VW lieber";
dann hat man B M W und V W auseinander geschrieben
also bräuchte man eine Regel, die nicht greift, wenn mind 2 Großbuchstaben aufeinander folgen
-
in: MySQL Backup ohne phpMyAdmin (als Script)
geschrieben von anlagegeld
ehrlich gesagt hab ich von mysqldump gar keine Ahnung
aber ich finde es bischen übertrieben, nur wegen mysql backup einen lokalen server zu betreiben (XAMP)
da ist dann ein Login in PHPMyAdmin doch einfacher
.... oder halt so ein Script wie von funspiele, das ich ja nur bischen aufgebohrt habe
---> er schreibt ja auch, dass er es in sein PHP Script als Funktion einbauen will
und die Lösung hat er dann ja auch selbst quasi fast fertig geschrieben
ein MySQL Backup direkt am Webspace klingt für mich nicht gerade nach Einsatz von localhost
sondern eben direkt am Webspace als PHP-Script .... was ja, wie es oben steht, nicht schlecht ist
Die kleine Erweiterung habe ich dann gemacht, weil ich sein Script ganz gut fand, funktioniert
-
in: MySQL Backup ohne phpMyAdmin (als Script)
geschrieben von anlagegeld
funspiele schrieb:
nur hab ich keinen Server-Root Zugriff, nur Webspace,
@hemiolos ich glaub deshalb ist das (auch wenns gut ist) in diesem Fall nicht einsetzbar
echo '<pre>' . `mysqldump --host=$host --user=$user --password=$pw $db 2>&1`;
oder funktioniert mysqldump auf Lima-City Webspace ?? glaube mal nicht
hier das Script mit Auswahl aller Tabellen in der DB .... function get_tables()
.... und mit .sql Datei-Erstellung ... fwrite()
<?php // ------------------ config -------------------- $db_host = 'xxxxxxxxxx'; $db_user = 'yyyyyyyyyyyy'; $db_pass = 'zzzzzzzzzz'; $db_name = 'abcabcabc'; $backupfile = '_dump_'.$db_name.'.sql'; // ---------------mysql connect ------------------ $con = mysql_connect($db_host, $db_user, $db_pass); if (!$con) { echo "<br />Could not connect: <br />\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); // -------------- function myquery --------------- function myquery($sql, $mysql) { $data = array(); $result = mysql_query($sql, $mysql) or die(mysql_error()); while ( false !== ($row = mysql_fetch_array($result, MYSQL_NUM)) ) { $data[] = $row; } return $data; } // ------------ function get_data ---------------- function get_data($tabelle, $mysql, $null='false') { $d = null; $rdata = mysql_query("SELECT * FROM `" . $tabelle . "`", $mysql) or $this->error(mysql_error()); while($cr = mysql_fetch_array($rdata, MYSQL_NUM)) { $d .= "INSERT INTO `" . $tabelle . "` VALUES ("; for($i=0; $i<sizeof($cr); $i++) { if($null !== false && $cr[$i] == '') { $d .= 'NULL,'; } else { $d .= "'$cr[$i]',"; } } $d = substr($d, 0, strlen($d) - 1); // ---- letztes Komma entfernen ---- $d .= ");\n"; } return($d); } // ----------- function get_tables -------------- function get_tables($name, $mysql) { $tables = array(); $tablesResult = mysql_query("SHOW TABLES FROM `".$name."`", $mysql); while ($row = mysql_fetch_row($tablesResult)) { $tables[] = $row[0]; } return $tables; } // ------------------------------------------------- // ------------------------------------------------- $tabliste = get_tables($db_name, $con); echo "<pre>\r\n"; print_r($tabliste); echo "\r\n</pre>\r\n"; // ------------------------------------------------- $rundate = date('Y-m-d H:i:s',time()); $handle = fopen($backupfile,"w",0755); $dumpinfo = "###### MySQL DUMP ### ".$db_name." ### ".$rundate." ######\n\n\n"; fwrite($handle,$dumpinfo); // -------------------------------------- foreach($tabliste as $tabelle) { // ----------- Struktur ----------- $erg1 = myquery("SHOW CREATE TABLE $tabelle", $con); $tab_struktur = $erg1[0][1].';'; ## echo "<pre>\r\n"; ## print_r($tab_struktur); ## echo "\r\n</pre>\r\n"; fwrite($handle,"\n###### ".$tabelle." ######\n\n"); fwrite($handle,$tab_struktur."\n\n\n"); // ----------- Inhalte ----------- $erg2 = get_data($tabelle, $con, 'false' ); $tab_inhalte = $erg2; ## echo "<pre>\r\n"; ## print_r($tab_inhalte); ## echo "\r\n</pre>\r\n"; fwrite($handle,$tab_inhalte."\n\n\n"); } // ------------------------------------------------- fclose($handle); echo "<br /> DUMP File: <a href=\"".$backupfile."\">".$backupfile."</a> --- ".$db_name." --- ".$rundate." <br />\r\n"; mysql_close(); // -------------------------------------- ?>
man könnte in die Datei $backupfile noch den Timestamp unterbringen
dann werden alte Backups nicht überschrieben
$tsmp = time();
$backupfile = '_dump_'.$db_name.'_'.$tsmp.'.sql';
aber dann aufpassen, dass sich nicht zu viele Dateien am Webspache ansammeln
je Aufruf dann neue Datei .... mit dem gesamten DB Inhalt inkl. Struktur
eigentlich ja ne coole Sache, so ein Mini-SQL-Dumper :)
-
in: PDF parsen (PDF zu String) in PHP
geschrieben von anlagegeld
Hallo
ich denke es könnte mit OCR - Optical Character Recognition gehen
z.B. http://www.phpclasses.org/phpocr aber keine Ahnung ob das auch mit PDF geht
Vielleicht hilft ja auch das hier http://php.livejournal.com/295413.html?thread=4830453#t4830453 bei deinem Code
sonst kennst Du sicher die Kommntare bei http://de3.php.net/manual/de/ref.pdf.php
oder das hier http://www.fpdf.de/forum/showthread.php?t=1655 Hinweise in Antw. beachten
oder hier http://www.php.de/php-tipps-2007/22298-pdf-zu-php-3.html
.... scheint garnisht so einfach zu sein
habe selber Interesse an dem Thema ... aber wenn dann eher pdf2html.
also nicht nur reiner text sondern alles, auch Tabellen, Bilder, etc.