Suche auf lima-city
-
in: Gute Kostenlose Foren Software?
geschrieben von plugboard
Hallo,
als einfaches, Anfänger-freundliches Forum-Script (PHP / MySQL)
kann ich Dir simplemachines empfehlen
sonst die üblichen verdächtigen, phpBB, myBB. etc.
die aber z.T schon etwas anspruchsvoller sind
mit User-Gruppen und Rechte und Einstellungen
hier auch eine Liste von Lima-City zu Forum-Software:/ Scripte zur Auswahl
eine Übersicht an Open-Source Foren-Scripte (PH)
findest Du auf ... opensourcecms.com in der Kategorie: Forums
oder du googelst nach "free forum scripts" und findest
u.a. Top-Listen der angeblich besten Forum-Scripte wie z.B.:
--- [url[https://gigarank.net/blog/top-10-free-forum-scripts-scripts/[/url]
--- [url[http://www.webdesignbooth.com/12-free-and-open-source-php-forum-scripts/[/url]
--- usw.
Geschmäcker sind verschieden also welches Forum Dir am besten gefällt, kannst Du am besten Durch selber ausprobieren herausfinden, das ist zwar Zeitaufwendig (Installation, Einrichten, Testen, ...) aber nur so kann man die Unterschiede oder Gemeinsamkeiten in Aufbau und Bedienung erkennen. Also: Probieren geht über Studieren.
Voraussetzung ist einfach Webspace mit FTP-Zugang und 1 MySQL DB dann kann man sich verschiedene Foren zum Testen /in UNterordner) installieren. Wie das im EInzelnen geht, findet man meist bei der Webseite des "Herstellers" also bei der Forum-Community / bei Download gibt es oft auch eine Install Anleitung bzw. man muss das Setup Readme lesen, da ist es (bei den meisten) Schritt für Schritt erklärt.
Die Routine, wie man so ein Script auf seinem Webspace installiert, ist meist sehr ähnlich, wer also mal ein paar verschiedene Scripte (Forum, Blog, etc) installiert hat, der kennt die dafür notwendigen Schrittedann auch für andere neue Scripte ...
... Übung macht den Meister :=)
-
in: array_multisort mit Objekte anstatt Array ?
geschrieben von plugboard
ganz einfach ...
... mit einer Funktion, die eiin Array of Objects sortiert zurückgibt
// ----------------------------------------------------------------- function sort_arr_of_obj($array, $sortby, $direction='asc') { $sortedArr = array(); $tmp_Array = array(); foreach($array as $k => $v) { $tmp_Array[] = strtolower($v->$sortby); } if($direction=='asc'){ asort($tmp_Array); }else{ arsort($tmp_Array); } foreach($tmp_Array as $k=>$tmp){ $sortedArr[] = $array[$k]; } return $sortedArr; } // -----------------------------------------------------------------
$array ... Das Array of Objects
$sortby .... Der Object-Key, nach dem sortiert werden soll
$direction ... Sortier-Rischtung: 'asc' = aufsteigend, 'dsc' = absteigend
Ausgangs-Daten: $object
SimpleXMLElement Object ( [Artikel] => Array ( [0] => SimpleXMLElement Object ( [id] => 1 [title] => Chemie [info] => xxx ... ) [1] => SimpleXMLElement Object ( [id] => 2 [title] => Abend [info] => xxx ... ) [2] => SimpleXMLElement Object ( [id] => 3 [title] => Dosenbier [info] => xxx ... ) [3] => SimpleXMLElement Object ( [id] => 4 [title] => Blumen [info] => xxx ... ) ) )
Aufruf BSP:
$sorted->Artikel = sort_arr_of_obj($object->Artikel,'title','asc');
Ergebnis-Daten: $sorted
SimpleXMLElement Object ( [Artikel] => Array ( [0] => SimpleXMLElement Object ( [id] => 2 [title] => Abend [info] => xxx ... ) [1] => SimpleXMLElement Object ( [id] => 4 [title] => Blumen [info] => xxx ... ) [2] => SimpleXMLElement Object ( [id] => 1 [title] => Chemie [info] => xxx ... ) [3] => SimpleXMLElement Object ( [id] => 3 [title] => Dosenbier [info] => xxx ... ) ) )
somit ist $sorted quasi genau wie $object (Struktur bleibt gleich)
nur ist jetzt in $sorted das Array im Object nach 'title' (aufsteigend) sortiert ... :)
-
in: Mehrere Bildwechsel in Tabelle mit Javascript
geschrieben von plugboard
Zu 1:
besser ;)
... man kann sogar Code-Highlighting (Syntaxhervorhebung) je Sprache machen
siehe hier: https://www.lima-city.de/2008/forum#formatierung Abschnitt Code
... für verschiedene "Sprachen"
Beispiele:
[ code ] array ( 'info' => 'ohne Syntaxhervorhebung' ) [ /code ]
[ code=html ] <strong>HTML-Code hier</strong> [ /code ]
[ code=js ] var mystring = 'Javascript-Code hier'; [ /code ]
[ code=php ] <?php echo "Hallo Welt"; ?> [ /code ]
(... Nutzung aber ohne die Leerzeichen innerhalb der [ eckigen Klammern ] !!! )
Zu 2:
mach die Javascript-Funktion nicht in die Tabelle rein
sondern oben im HEAD Bereich der Seite
und beim Funktionsaufruf die ID der Zelle übergeben
function start( tabid ) { var image = document.getElementById(tabid); // ... usw. ... }
und in der Tabelle als Zellen:
<table ... ...> <tr> <td id="zelle1"> .... </td> <td id="zelle2"> .... </td> <td id="zelle3"> .... </td> </tr> <tr> <td id="zelle4"> .... </td> <td id="zelle5"> .... </td> <td id="zelle6"> .... </td> </tr> </table>
Zu 3:
mach ein mehrdimensionales Array (auch oben im HEAD Bereich der Seite)
var images = new Array(); images['zelle1'] = new Array( ["http://www.xyz.de/ordner/Bild1a.JPG", "Beschreibung1a", "Titel Bild1a"], ["http://www.xyz.de/ordner/Bild1b.JPG", "Beschreibung1a", "Titel Bild1b"] ); images['zelle2'] = new Array( ["http://www.xyz.de/ordner/Bild2a.JPG", "Beschreibung2a", "Titel Bild2a"], ["http://www.xyz.de/ordner/Bild2b.JPG", "Beschreibung2a", "Titel Bild2b"] ); images['zelle3'] = new Array( ["http://www.xyz.de/ordner/Bild3a.JPG", "Beschreibung3a", "Titel Bild3a"], ["http://www.xyz.de/ordner/Bild3b.JPG", "Beschreibung3a", "Titel Bild3b"] ); // ... usw. ...
und dann kannst Du in einer for (bzw. foreach) Schleife jeweils die Funktion aufrufen
... oder gleich (direkt) das mehrdimensionales Array in der Funktion durchlaufen
je "key" aus der 1.Ebene vom Array images als Parameter für Funktions-Aufruf verwenden
... oder gleich (direkt) beim Durchlauf alle 2 Sekunden das Bild zum "key" wechseln
ich hoffe das hilft weiter
-
in: google taxonomy Liste zu Array mit Parent_Id
geschrieben von plugboard
c = 0; // --- max. Tiefe der Kategorie-Ebenen
soll wohl heissen;
$max_deep = 0; // --- max. Tiefe der Kategorie-Ebenen
ja und noch mehr
ein nicht sofort erkennbarer "Fehler" in der Funktion print_tree()
es wird keine saubere (valide) ul / li Struktur erzeugt,
... wenn eine Unter-Ebene zu Ende ist, kommt nur </ul>
es sollte aber </ul> und </li> kommen
.... wird zwar "normal" angezeigt im Browser, aber im Quellcode sieht man es dann
und das
macht auch keinen Sinn,global $go_shopid;
diese Variable wird in der Funktion dann nirgends verwendet, kann man also weg lassen
in der neuen Version: 2 (Code siehe weiter unten)
habe auch noch einen $spacer eingeführt, für Einrückung des erzeugten HTML-Code
anstatt "\t" (Tabs) könnte man da auch ' ' (Leerzeichen) machen (mit ## auskommentiert)
und zu den Farben der einzelnen Ebenen:
... in der Funktion ist ja bisher ein if ... elseif ... das nur für 6 Ebenen Farben ändert
vielleicht wäre sowas hier: Farbverlauf mit PHP besser geeignet
...also Farb-Palette zwischen zwei Farben mit n Stufen erstellen (je Ebene)
dazu die $steps durch $max_deep aus de Code ersetzen
(diese Variable dann global oder im Funktionsaufruf übergeben)
hier mal das mit "Farb-Palette" in die print_tree() mit eingebaut
<?php // ----------------------------------------------------------------- // ------------------- print_tree() --- Version: 2 ----------------- function print_tree($array, $level=0, $view=1) { // -------- Ebenen Hintergrund-Farben -------- global $max_deep; $color1 = '#ACACAC'; $color2 = '#FFFFFF'; $r1=hexdec(substr($color1,1,2)); $g1=hexdec(substr($color1,3,2)); $b1=hexdec(substr($color1,5,2)); $r2=hexdec(substr($color2,1,2)); $g2=hexdec(substr($color2,3,2)); $b2=hexdec(substr($color2,5,2)); $diff_r=$r2-$r1; $diff_g=$g2-$g1; $diff_b=$b2-$b1; for ($i=1; $i<=$max_deep; $i++) { $factor = ($i / $max_deep); $r=round($r1 + $diff_r * $factor); $g=round($g1 + $diff_g * $factor); $b=round($b1 + $diff_b * $factor); $color="#" . sprintf("%02X",$r) . sprintf("%02X",$g) . sprintf("%02X",$b); $bgcolor[$i] = $color; } // -------- id-Prefix und Code-Spacer -------- $prefix = 'liste'; // ---- Prefix: ul ID ---- $cspace = "\t"; ## $cspace = ' '; $spacer = str_repeat($cspace, (($level+1)*2)); // -------- Ebene 1 --- START -------- if ($level == 0) { print "\n<ul id=\"".$prefix."_root\" style=\"background:".$color1.";\">\n"; } // -------- Baum aus Array --- START -------- foreach($array as $key => $val) { $prelevel = $level; $level++; if ( isset($val['sub']) && !empty($val['sub']) ) { $preid = $val['parent_id']; $switch_link = "<a href=\"javascript:show('".$prefix.$key.$level."')\">open/close</a>"; // -------- Listen-Element mit Unter-Ebene --- START -------- print $spacer."<li>Ebene: ".$level." --- <strong>".$val['name']."</strong> [".$switch_link."] - (ID: ".".$key.".")"; $ulcolor = 'background:'.$bgcolor[$level].''; if ($level >= $view) { $ulview = 'display:none;'; } else { $ulview = 'display:block;'; } $ulstyle = 'style="'.$ulview.' '.$ulcolor.'"'; // -------- Sub-Ebene --- START -------- print "\n".$spacer."<ul id=\"".$prefix.$key.$level."\" ".$ulstyle.">\n"; print_tree($val['sub'], $level, $view); // ---- rekursiver Funktions-Aufruf ---- print $spacer."</ul>\n"; // -------- Sub-Ebene --- ENDE -------- print $spacer."</li>\n\n"; // -------- Listen-Element mit Unter-Ebene --- ENDE -------- } else { // -------- Listen-Element ohne Unter-Ebene -------- print $spacer."<li>Ebene: ".$level." --- <strong>".$val['name']."</strong> (ID: ".$key.")</li>\n"; } $level--; } // -------- Baum aus Array --- ENDE -------- if ($level == 0) { print "</ul>\n"; } // -------- Ebene 1 --- ENDE -------- } // ----------------------------------------------------------------- ?>
PS:
leider immernoch Sub-Ebenen als rekursiver Funktions-Aufruf
---> vielleicht kann man das ja "besser" lösen ?!
und die Variavlen:
$cspace
$max_deep
$color1
$color2
kann man - je nach Belieben -auch anders setzen ,
z.B. im Funktions-Aufruf (als Parameter) oder global definieren,
... ist wohl Geschmackssache,
habs hier halt jetzt mal so "gemixed" im BSP gemacht
-
in: Ajax Daumen-Hoch script realisieren.
geschrieben von plugboard
Hallo
hier nochmal eine verbesserte Version der Datei vote_result.php
anstatt der Bilder für die Balken werden jetzt (mit Farbe gefüllte) DIVs verwendet.
<?php // -------------------------------------------- if (!empty($_REQUEST['vote'])) { $vote = $_REQUEST['vote']; } else { $vote = ''; } // -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- if(!file_exists($filename)) { touch($filename,0666); file_put_contents($filename, '0|0'); } // -------------------------------------------- // ---- 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); // ---- Prozente berechnen ---- 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; } // ---- Rank-Wert berechnen ---- if (0 < $gesamt_ab) { $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); } else { $rank_a_b = $res_a; } // ---- Balken Breite (Prozent mal 2) ---- $width_a = ($percent_a * 2); $width_b = ($percent_b * 2); // ---- Balken DIVs HTML ---- $votediv_a = '<div style="margin:2px 0px; padding:0px; width:'.$width_a.'px; height:16px; background:#00CC33;"></div>'; $votediv_b = '<div style="margin:2px 0px; padding:0px; width:'.$width_b.'px; height:16px; background:#CC0033;"></div>'; // -------------------------------------------- $ergebnis = ' <h2>Ergebnis:</h2> <table width="410" cellpadding="2" cellspacing="0" border="0"> <tr align="left" valign="top"> <td width="45"> </td> <td> </td> <td width="65"><small>Prozent</small></td> <td width="65"><small>Stimmen</small></td> </tr> <tr align="left" valign="top" bgcolor="#CCCCCC"> <td width="45">Yes:</td> <td>'.$votediv_a.'</td> <td width="65">'.$percent_a.'%</td> <td width="65">'.$res_a.'</td> </tr> <tr align="left" valign="top" bgcolor="#CCCCCC"> <td width="45">No:</td> <td>'.$votediv_b.'</td> <td width="65">'.$percent_b.'%</td> <td width="65">'.$res_b.'</td> </tr> </table> <p> </p> <p>Stimmen Gesamt: '.$gesamt_ab.'</p> <p>Verhältnis: '.$res_a.' zu '.$res_b.'</p> <p>Rank-Wert: '.$rank_a_b.'</p> <p> </p> '; // -------------------------------------------- echo $ergebnis; // -------------------------------------------- ?>
aber nochmal der Hinweis,
dass man die Erebnisse (Zahlen / Daten) besser in MySQL speichern sollte
denn das Speichern in .txt kann (bei gleichzeizigem Zugriff) zum Crash führen,
... und das kann auch schon bei 50 Besuchern pro Tag passieren ....
-
in: Mit PHP Daten aus MySQL Datenbank als XML ausgeben
geschrieben von plugboard
Hallo
Du hast vor der Abfrage nicht die Datenbank ausgewählt, sondern nur mysql_open()
und du machst gar kein mysql_query Aufruf (Result)
also es fehlen 2 Wichtige Sachen:
DB-Auswahl: mysql_select_db($dbName, $con);
und Ergebnis-Schleife while ($result = mysql_query($sql) ) { ... mysql_fetch_array() ... }
Hier mal der Code etwas angepasst:
<?php // ----------------- ENDE ----------------------- // ------- Datei als XML im UTF-8 Zeichensatz festlegen header("Content-type: text/xml; charset=utf-8"); // ------- Festlegen der Sammlung / Liste $liste_id = 123; // ---- Nr. oder ID der Sammlung $liste_name = 'Name oder Titel der Sammlung"; // ------- MySQL Config $dbHost = "localhost"; $dbUser = "user"; $dbPassword = "xXxXxXx"; $dbName = 'name'; // ------- Verbindung zum MySQL-Server $con = mysql_connect($dbHost, $dbUser, $dbPassword); if (!$con) { echo 'Keine Verbindung zum Datenbank Server'; exit; } // ------- Auswahl des Datenbank-Name $sel = mysql_select_db($dbName, $con); if (!$sel ) { echo 'Keine Auswahl der Datenbank möglich'; exit; } // ------- MySQL-Abfrage-Text $sql_query = "Select * From table WHERE listid = '".$liste_id."' LIMIT 20"; // ------- MySQL-Abfrage-Ergebnis $sql_result = mysql_query($sql_query); if (!$sql_result) { echo 'Fehler bei der Abfrage'. mysql_error(); exit; } // ------- Anzahl der Treffer im Ergebnis (Zeilen) $anzahl = mysql_num_rows($sql_result); // ------- MySQL-Ergebnis in Array ablegen $daten = array(); while($row = mysql_fetch_assoc($sql_result)) { $daten[] = $row; } // ------- Ausgabe der Daten als XML $ubr = "\n"; // ---- Zeilenumbruch echo '<?xml version="1.0" encoding="UTF-8"?>'.$ubr echo '<bilder>'.$ubr; echo ' <idnr>'.$liste_id.'</idnr>'.$ubr; echo ' <name>'.$liste_name.'</name>'.$ubr; echo ' <anzahl>'.$anzahl.'</anzahl>'.$ubr; echo $ubr; foreach ($daten as $zeile) { echo " <bild>".$ubr; echo " <pfad>" . htmlspecialchars($zeile["bildpfad"]) . "</pfad>"".$ubr; echo " <titel>" . htmlspecialchars($zeile["titel"]) . "</titel>"".$ubr; echo " </bild>"".$ubr; } echo '</bilder>'.$ubr; echo $ubr; mysql_close(); // ----------------- ENDE ----------------------- ?>
also der Code von oben um Wichtiges ergänzt, wie DB-Select und Result-Schleife
und noch paar kleine Ideen eingefügt.
ohne mysql_select_db() und ohne mysql_query() konnte es ja nicht gehen :)
... -
in: Access mit Online MySQL synconisieren ?
geschrieben von plugboard
Danke
habe mal Navicat Lite isntalliert,
leider kann die Lite Version keine Access-DB importieren / exportieren
und die Version MySQL Windows kostst mal eben 199 US Dollar
da die Syncronisation von Online MySQL zu verschiedenen PCs funktionieren soll
(mehrere lokale Speicherorte plus ein Online-Speicherort)
müsste man dafür je PC eine solche Version kaufen, was nicht nur zu teuer wäre
sondern auch ist es wohl zu "gefährlich" so ein "mächtiges" Tool
den einzelnen Außendienst-Mitarbeiter an die Hand zu geben,
denn ein falscher Klick (ok zwei) und komplette Tabellen können gelöscht werden
für "Entwickler" sicher ein gutes Tool, aber für End-Anwender wohl eher nicht
am "einfachsten" wäre wohl der direkte Zugriff auf nur einen einzigen Speicherort (MySQL Online)
aber wenn es sowieso nur "mit Internet-Verbindung" funktioniert, dann ist die bearbeitung in Access
wohl auch quatsch, wenn man ehh Online ist, kann man auch gleich auf Webseite bearbeiten
der Kunde will nunmal eine Lösung, die beides kann, Online und Offline mit Syncronisation
aber je mehr ich darüber nachdenke, desto weniger denke ich, dass man es so hinbekommt
zumindest nicht mit dem geringen Budget (ca. 700 EUR) und DB-Struktur ist auch nicht gerade Simple,
und mit 1und1 Webspace, wo man keinen DB-Zugriff von ausserhalb des Webspace hat,
also kann man keine direkte DB-Verbinndung aufbauen, sondern müsste über CSV bzw XML arbeiten
um Daten zu importieren / exportieren (Syncronisation)
... auch habe ich den Import von .csv in Access ausprobiert
und dabei das Problem, dass ich zwar import hinbekomme,
aber z.B. Float Zahlen bekommen falschen Datentyp (Access macht Typ: Datum ???)
und wenn ich csv-Datei als Verknüpfung einbinde, dann kann ich in Access darin nichts ändern
also ist dieser Im-/Export zwischen Acces <--- über CSV ---> MySQL auch nicht so einfach machbar
ich bin mir mitlerweile sogar fast sicher, dass die Idee des Kunden grundsätzlich Quatsch ist,
eine Datenbank mit mehreren Speicherorten zu haben .... 1 mal Online und n mal mehrere PCs
was dent Ihr, ist das überhaupt Sinnvoll, es so anzufangen ?! ... oder gleich sagen: nur 1 Speicherort, basta
-
in: Access mit Online MySQL synconisieren ?
geschrieben von plugboard
Danke
ja Struktur und Datentypen sind gleich ...
aber bei navicat.com finde ich leider keine Lite Version,
nur Trials von kostenpflichtigen Versionen, die nicht billig sind
auch wäre das ja wieder ein weiteres Tool, das zusätlich läuft und zusätzlich kostet
der Wunsch des Kunden ist aber, die Syncronisation integriert zu haben
-----
Danke @hemiolos für Literatur
.... Problem ist aber, das ich die MySQL DB nicht von ausserhalb des Webspace ansprechen kann (1und1 Webspace)
und selbst wenn Verbindung klappt, aber der MA gerade keine Internet-Verbindung hat, dann geht ja nix
die Anforderung des Kunden ist, die Daten auch ohne I-Net-Verbindung bearbeiten zu können
und sobald wieder i-Net Verbindung verfügbar (bzw. 1x am Tag) die Daten zu syncronisieren
daher ist in Access direkt zur Online DB verbinden eigentlich keine Option,
denn das setzt ja Internet-Verbindung vorraus
oder ich muss Kunde sagen, das geht (im Kostenlimit) nur so (mit I-Net-Verbindung)
-----
... die fertige Datenbank soll von Sekretärin und Außendienst-MA gepflegt werden,
auch wenn keine Internet-Verbindung besteht, deshalb die Daten 2x (Online und Offline) ...
meine Idee ist, dass die Access-DB Tabellen auf lokale CSV speichert
per Klick zu Online-MySQL übertragen (Upload CSV -> PHP-Script -> Update MySQL)
und umgekehrt, die Online-MySQL per Download als CSV zu lokalem Speicherort
(!) Problem dabei ist, wenn in beiden Speicher-Orten jeweils Änderungen waren
dann würden bei Up-/Download von der einen DB
die jeweils anderen Änderungen überchrieben (gehen verloren)
und noch schlimmer bei Änderung des gleichen Datensatzes auf "beiden" Seiten ... ?!?
soll ich dann einfach die "neuere" übernehmen, oder welche soll dann "Bevorzugt" werden ?!
daher ist es mit einfachem Up-/Download nicht getan für eine "echte" Syncronisation
aber das "Problem" ist doch sicher nicht neu,
... eine MySQL Online-DB und eine Offline-Access-DB zu synconisieren
nur ich find grad keine Lösung,
wie gesagt, einfaches kopieren (Up-/Download) der Tabellen ist wohl nicht ausreichend
und selbst wenn ich eine Software wie Navicat nutzen würde,
gäbe es noch das Problem mit Änderungen auf "beiden" Seiten ... ?!
soll ich dem Kunden lieber sagen, das es Sinnvoll wäre es "nur" Online zu machen ?
also nur eine Datenbank (nur ein Speicherort) zu haben
ich vermute mal, das wäre das sinnvollste,
zu sagen, es geht (mit dem Budget) nur mit Internet-Verbindung, nur ein Speicher-Ort (online)
weil sonst Aufwand (und somit Kosten) explodieren würden
... oder gibt es doch eine "machbare" Lösung mit zwei Speicher-Orten (online und Offline) ?
-
in: Access mit Online MySQL synconisieren ?
geschrieben von plugboard
Hallo
ich möchte eine Datenbank erstellen und pflegen,
welche sowohl Online (Webseite / PHP / MySql) als auch Offline (Win/Access) zu bearbeiten ist,
und (wichtig) dass man die Online / Offline Daten synconisieren kann
also nach Änderung Offline (in MS Office Access) nach Klick auf Button: mit Online MySQL syncronisieren
genauso nach Änderung Online (PHP / MySQL) nach Klick mit Access-DB am Win-Rechner syncronisieren
Wie mach ich das am besten,
geht das mit direkter Verbindung (gibt es in Access dafür ein Tool)
oder muss ich die Daten (Tabellen) über CSV up-/download syncronisieren ?
-
in: Variable ist leer aber nicht (int) 0 [Zahl: null] ?
geschrieben von plugboard
Hallo
wie kann ich eine Variable prüfen, ob wirklick "leer" ist und nicht doch den Wert (int) 0 [Zahl: null] hat ?
bei Prüfung empty() ist eine Variable mit dem Wert (int) 0 [Zahl: null] auch ein Treffer
$variable = 0;
if (empty($variable)) { $variable = 'n/a'; }
so wird mir auch der Wert 0 zu 'n/a' ersetzt
aber ich will den Wert (int) 0 [Zahl: null] nicht durh 'n/a' ersetzt haben,
also wenn $variable = 0; dann soll der Wert 0 [Zahl: null] bleiben,
nur wenn die Variable wirklich "Leer" ist, dann durch 'n/a' ersetzen
-
in: Suche CMS
geschrieben von plugboard
Hallo
ich weiss nicht ob Du es schon kennst,
aber auf http://www.opensourcecms.com findest Du viele CMS zum ausprobieren
mit DEMO Fronntend und DEMO Admin-Bereich, also mit Test-Login (für je 2 Stunden)
dort kann man also selber testen, ob ein CMS zusagt, oder nicht.
-
in: Datenbankeintrag in Variable speichern.
geschrieben von plugboard
Hallo
Datenbank-Abfrage-Ergebnis entält ja meist mehrere Daten,
vorallem mit SELECT * FROM .... bekommt man alle Spalten (in Array oder Object)
hast Du sowas in der Art?
$num = 1; while($row = mysql_fetch_assoc($result)) { echo "<br />Nr: " . $num . "\n"; echo "<br />ID: " . $row['id'] ."\n"; echo "<br />Vorname: " . $row['vorname'] ."\n"; echo "<br />Nachname: " . $row['nachname'] ."\n"; echo "<br />Geschlecht: " . $row['gender'] ."\n"; echo "<br />\n"; $num++; }
also ist das Speichern in Variable mit Typ: Array vielleicht die Lösung
$db_tabelle = 'name_deiner_tabelle"; $result = "SELECT * FROM ".$db_tabelle.""; if (!$result) { die"<br />Fehler ... <br />\n" . mysql_error(); exit; } $data = array(); while($row = mysql_fetch_assoc($result)) { $data[] = $row; } // ----- Debug Ausgabe ----- print "<pre>\n"; print_r($data); print "</pre>\n";
dann ist $data ein 2-dimensionales Array,
erste Ebene die Zeilen (fortlaufende Zahl bon 0 bis n-1 Zeilen)
die Zweite Ebene assoziatives Array mit Spalten-Namen als Key
alternativ .. zweite Ebene als Object
$db_tabelle = 'name_deiner_tabelle"; $result1 = "SELECT * FROM ".$db_tabelle.""; if (!$result) { die"<br />Fehler ... <br />\n" . mysql_error(); exit; } $data = array(); while($row = mysql_fetch_object($result1)) { $data[] = $row; } // ----- Debug Ausgabe ----- print "<pre>\n"; print_r($data); print "</pre>\n";
Entscheidend ist die while-Schleife
die läuft, solange Zeilen aus dem Ergebnis ($result) vorhanden sind
und in dieser while-Schleife belegst du je Zeile ein Array-Element
was wiederum ein Array (oder Objekt) enthält aus $row
so bekommst Du alle Daten ind eine Variable (Array)
auf die Elemente im Array $data kannst Du dann bequem mit foreach() zugreifen
$num = 1; foreach($data as $item) { echo "<br />Nr: " . $num . "\n"; echo "<br />ID: " . $item['id'] ."\n"; echo "<br />Vorname: " . $item['vorname'] ."\n"; echo "<br />Nachname: " . $item['nachname'] ."\n"; echo "<br />Geschlecht: " . $item['gender'] ."\n"; echo "<br />\n"; $num++; }
bei Daten als Object dann anstatt $item['vorname'] eben so $item->vorname
usw. etc...
hier noch der Doku Vorlese-Service
mysql_fetch_row($result)
Gibt ein numerisches Array von Zeichenketten zurück, das der gelesenen Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind.
mysql_fetch_object($result)
Gibt ein Objekt mit String-Eigenschaften zurück, die mit der angeforderten Zeile korrespondieren, oder FALSE wenn es keine weiteren Zeilen mehr gibt.
mysql_fetch_array($result, $result_type)
Gibt ein Array von Zeichenketten zurück, das der gelesenen Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind. Der Typ des zurückgegebenen Arrays hängt davon ab, wie result_type definiert ist. Nutzen sie MYSQL_BOTH (Standard), erhalten sie ein Array mit sowohl assoziativen als auch numerischen Indice. Nutzen sie MYSQL_ASSOC erhalten sie nur assoziative Indice (wie mysql_fetch_assoc() arbeitet), mit MYSQL_NUM erhalten sie nur numerische Indice (wie mysql_fetch_row() arbeitet).
mysql_fetch_assoc($result)
Liefert ein assoziatives Array, das der geholten Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind.
... siehe auch php.net MySQL Funktionen
... aber poste mal deinen Error, vielleicht ist das Problem ja doch anders gelagert ?!
ich vermite aber ganz stark, es liegt am (nicht genutzen) Array
-
in: Ajax Daumen-Hoch script realisieren.
geschrieben von plugboard
hemiolos schrieb:
also ok, von mir aus halt ajax (aber noch immer mit unverständnis).oindex schrieb:
leider funktioniert nicht (link zum ansehen [kode unverändert])
... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
Hallo
ich habe den Code von oindex auch mal ausprobiert,
bei mir funktioniert der 1A ... Vote1 Test von oindex code unverändert
ok, wenn man vergisst die Datei "vote_data.txt" anzulegen,
dann kommt vor der ersten Abstimmung bei mir auch der Fehler wie bei Dir ... No such file or directory
aber nach dem ersten Vote ist die Datei dann angelegt und es geht wunderbar
... hast Du in den Ordner bei Deinem Test evtl. keine Schreibrechte ?
gut ist die Idee, die .txt Datei direkt per Script zu erstellen
im Script von oindex dann bei "vote_result.php" einfügen
den Teil:
// -------------------------------------------- $filename = "vote_data.txt"; // --------------------------------------------
ersetzen durch:
// -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- if(!file_exists($filename)) { file_put_contents($filename, '0|0'); } // --------------------------------------------
keine Ahnung was besser ist, file_exists() oder is_file() ... wird keinen Unterschied machen
und bei dem Script von oindex sollte man dazu sagen,
dass man zwei kleine Bilder braucht, um die Ergebnis-Balken anzuzeigen,
Bild grün 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote1.gif
Bild rot 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote2.gif
wäre vielleicht geschickter, das mit DIVs und css: background-color zu machen
bei dem Beispiel von hemiolos bekam ich zuerst einen JS Alert ... Fehler: 0 ...
dann habe ich gesehen,
dass Du in der "ajax.php" Deine http:// URL für GET eingetragen hast
xmlhttp.open("GET","http://hemiolos.lima-city.de/forum/paddy-herrmy/oindex_mod/vote_server.php?vote="+usrvote,true);
.... geht wohl bei anderen nicht mit http:// Adresse wegen Cross-Site-Scripting
wenn ich den Pfad ändere, ohne die http:// URL (nur zur Datei), dann geht es
xmlhttp.open("GET","vote_server.php?vote="+usrvote,true);
... siehe Vote 2 Test von hemiolos
Frage:
wenn man caching durch header(...) verhindert,
was für ein (mir nicht bekanntes) Problem macht dann echo/printf ??
habs ausprobiert in "vote_server.php" unten
## exit(''.$result); echo $result;
und keinen Fehler gefunden ?!
-
in: Javascript alle IDs mit Teilstring ?
geschrieben von plugboard
oh .. gute Idee
die DIV-ID Namen in array ablegen
und dann einfach hideAll() ausführen
bevor man showElement(id) ausführt
aber meine DIV-ID Namen sind nicht immer gleich
es können im 2tem Teil (nach prefix-Teilstring) auch mal Usernamen bzw User-IDs sein
... Idee ... bei erstellen der DIVs (per PHP)
auch gleich das DIV-ID-Namen Array für JS erstellen
mal sehen ob ich das hinbekomme
Frage ... definiert man Array in JavaScript einfach so
var elemente = ['element1', 'element2', 'element3']
... das geht ? ... dachte es muss mit new Array()
-
in: Javascript alle IDs mit Teilstring ?
geschrieben von plugboard
Hallo
ich habe mehrere DIVs deren IDs jeweils einen gleichen Teilstring enthalten
hier im Beilspiel ist der Teilstring: 'test'
wie kann ich mit Javascript alle DIVs behandeln, die den gesuchten Teilstring in ID enthalten?
wenn ich nur Zahlen an den Teilstring anhänge, dann bekomme ich es hin
nur die ausgewählte DIV ID wird angezeiht, alle anderen werden ausgeblendet
<html> <head> <title>DIV BOX TEST</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-- .ibox { display: none; } --> </style> <script type="text/javascript"> function show(div_id) { for (var zaehler = 1; zaehler <= 5; zaehler++) { if (document.getElementById("test" + zaehler).style.display == "block") { document.getElementById("test" + zaehler).style.display = "none"; } } document.getElementById(div_id).style.display = "block"; } </script> </head> <body bgcolor="#FFFFFF" text="#000000"> <br> <br> <br> --- <a href="javascript:show('test1');">Show 1</a> <br> --- <a href="javascript:show('test2');">Show 2</a> <br> --- <a href="javascript:show('test3');">Show 3</a> <br> --- <a href="javascript:show('test4');">Show 4</a> <br> --- <a href="javascript:show('test5');">Show 5</a> <br> <br> <div id="test1" class="ibox">(1) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test2" class="ibox">(2) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test3" class="ibox">(3) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test4" class="ibox">(4) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test5" class="ibox">(5) Text text Text text Text text Text text Text text <br> <br> </div> <br> <br> <br> </body> </html>
das funktioniert, weil ich test<fortlaufende Zahl> habe
aber was kann ich machen, wenn ich anstatt test1, test2, test3, ... usw
keine Zahlen sondern sowas habe wie test_data, test_info, test_mehr, ... usw. ...
BSP:
<div id="test_abc" class="ibox">(1) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test_aublauf" class="ibox">(2) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test_lalala" class="ibox">(4) Text text Text text Text text Text text Text text <br> <br> </div> <div id="test_info" class="ibox">(5) Text text Text text Text text Text text Text text <br> <br> </div>
so dass alle DIVs ausgeblendet werden, ausser das aktive (per Klick ausgewählte)
also irgendwie Teilstring 'test' finden und auf alle anwenden, ausser aktve ID (z.B: test_info)
?
bzw. egal, kann ja alle mit test als Teilstring in ID ausblenden, (display:none;)
das aktive wird dann ja wieder eingeblendet (display:block;)
... also ... wie Teilstring aus der div_id finden? ... oder ganz anders rann-gehen?
.... HELP !?
-
in: Logfile funktioniert nicht
geschrieben von plugboard
Hallo
habe mal versucht ein kleines PHP / MySQL Script für Besucher-Logs zu bauen,
aber ist noch nur ein ganz grober Versuch, der einfach jeden Aufruf speichert
bitte sooooo nicht 1:1 im Einsatz verwenden, ist nur ein Test / Versuch
... aber vielleicht können wir hier gemeinsam was brauchbares draus machen :)
<?php // ------------------------------------------------------ // ------------------------ config ---------------------- date_default_timezone_set('Europe/Berlin'); $run_tsmp = time(); $run_date = date('Y-m-d H:i:s',$run_tsmp); $db_host = ''; // ---- MySQL Server $db_user = ''; // ---- MySQL Benutzer $db_pass = ''; // ---- MySQL Passwort $db_name = ''; // ---- MySQL Datenbank $db_table = 'logs_besucher'; // ---- MySQL Tabelle // ------------------------------------------------------ // ------------------------ connection ------------------ $con = mysql_connect($db_host, $db_user, $db_pass); if (!$con) { die "<br />Fehler ... keine MySQL Verbindung: <br />\r\n" . mysql_error(); exit; } $sel = mysql_select_db($db_name, $con); if (!$sel) { die "<br />Fehler ... Datenbank nicht erreichbar: <br />\r\n" . mysql_error(); exit; } // ------------------------------------------------------ // ------------------------ setup ----------------------- $res_exists = mysql_query("SHOW TABLES LIKE '".$db_table."'"); if (mysql_num_rows($res_exists) < 1) { $sql_setup1 = "CREATE TABLE IF NOT EXISTS `".$db_table."` ( `id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT, `datum` varchar(30) NOT NULL, `HTTP_HOST` varchar(255) NOT NULL, `HTTP_USER_AGENT` varchar(255) NOT NULL, `HTTP_ACCEPT_LANGUAGE` varchar(255) NOT NULL, `HTTP_REFERER` varchar(255) NOT NULL, `QUERY_STRING` varchar(255) NOT NULL, `REDIRECT_STATUS` varchar(255) NOT NULL, `REMOTE_ADDR` varchar(255) NOT NULL, `REQUEST_METHOD` varchar(255) NOT NULL, `PHP_SELF` varchar(255) NOT NULL, `REQUEST_TIME` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"; $res_setup1 = mysql_query($sql_setup1); if (!$res_setup1) { die "<br />Fehler ... Setup Table: <br />\n" . mysql_error(); exit; } } // ------------------------------------------------------ // ------------------------ insert ---------------------- $sql_inser1 = "INSERT INTO `".$db_table."` ( `datum, `HTTP_HOST`, `HTTP_USER_AGENT`, `HTTP_ACCEPT_LANGUAGE`, `HTTP_REFERER`, `QUERY_STRING`, `REDIRECT_STATUS`, `REMOTE_ADDR`, `REQUEST_METHOD`, `PHP_SELF`, `REQUEST_TIME` ) VALUES ( '".$run_date."', '".$_SERVER['HTTP_HOST']."', '".$_SERVER['HTTP_USER_AGENT']."', '".$_SERVER['HTTP_ACCEPT_LANGUAGE']."', '".$_SERVER['HTTP_REFERER']."', '".$_SERVER['QUERY_STRING']."', '".$_SERVER['REDIRECT_STATUS']."', '".$_SERVER['REMOTE_ADDR']."', '".$_SERVER['REQUEST_METHOD']."', '".$_SERVER['PHP_SELF']."', '".$_SERVER['REQUEST_TIME']."' ) "); $res_insert1 = mysql_query($sql_inser1); if (!$res_insert1) { die "<br />Fehler ... Insert Data: <br />\n" . mysql_error(); exit; } // ------------------------------------------------------ ### // ------------------------------------------------------ ?>
die Tabelle anlegen kann man bestimmt besser getalten, Daten-Typen, KEYs, etc
es sollte wohl auch nicht jeder Aufruf geloggt werden,
das würde sonst schon bei mittelmäßigem Traffic bestimmt sehr viel
evtl kann man da ne IP-Sperre machen, und nur unique Aufrufe alle x Minuten loggen
oder nur loggen, wenn HTTP_REFERER nicht vom eigenen Server kommt,
also alle "internen Aufrufe" raus lassen ... nur Aufrufe von Extern loggen
andererseits wäre schon interessant, welche "Wege" ein Besucher uaf der Seite nimmt,
also welche Unter-Seiten er sich (wie lange) anschaut, Einstiegs- und Ausstiegs-Seite, etc.
es sollte auch mit rein, dass Datensätze, die älter als z.B. 100 Tage sind
automatisch gelöscht werden, also DELETE ... WHERE (Datum mehr als 100 Tage in Vergangenheit)
wie vergleiche ich am besten das Datum, mit Timespamp oder mit Datum formatiert ?
also wie müsste hier der passende SQL-Befehl aussehen (DELETE ... WENN ... älter als 100 Tage) ?
oder andere Verbesserungs-Vorschläge ... ?!
... gerne auch ganz anderen Ansatz ?!
-
in: CSS für <img ... align="absmiddle" ...>
geschrieben von plugboard
ja Danke, funktioniert
Text Text <img src="meine_grafik.gif" style="vertical-align: middle;" alt="Bildinfo" width="110" height="90" /> Text Text
ich hoffe nur, es funktioniert auch in allen gängigen Browsern
habe beim Googeln nach "CSS vertical-align" was gelesen,
das es angeblich eher für Tabelle-Spalten (<td>) gedacht ist
... im aktuellen FF und IE scheint es damit auch für <img> zu funktionieren
Danke!
-
in: CSS für <img ... align="absmiddle" ...>
geschrieben von plugboard
Hallo
ich möchte ein Bild in einem Text absolut mittig ausrichten
mit HTML bisher so
<p> Text Text Text <img src="meine_grafik.gif" alt="Bildinfo" width="110" height="90" align="absmiddle" /> Text Text </p>
geht das auch mit CSS? ... ohne
im IMG-Tag?align="absmiddle"
-
in: Joomla - Seite
geschrieben von plugboard
Hallo
um cach aus zu schalten, versuch mal in .htaccess
Header set Expires: 0 Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform" Header set Pragma "no-cache"
oder in die Config-Datei (oder in die index.php ganz oben) als php header()
[code
]<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
...
?>
[/code]
um ganz sicher zu gehen kannst Du noch "Expires" auf ein Datum in der Vergangenheit setzen
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
oder auf das aktuelle Datum
header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
dann sollte die Seite ohne Cache geladen werden