kostenloser Webspace werbefrei: lima-city


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
    global $go_shopid;
    macht auch keinen Sinn,
    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">&nbsp;</td>
        <td>&nbsp;</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>&nbsp;</p>
    
    <p>Stimmen Gesamt: '.$gesamt_ab.'</p>
    <p>Verh&auml;ltnis: '.$res_a.' zu '.$res_b.'</p>
    <p>Rank-Wert: '.$rank_a_b.'</p>
    
    <p>&nbsp;</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:
    ... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
    leider funktioniert nicht (link zum ansehen [kode unverändert])


    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> &nbsp; </div>
    <div id="test2" class="ibox">(2) Text text Text text Text text Text text Text text <br> <br> &nbsp; </div>
    <div id="test3" class="ibox">(3) Text text Text text Text text Text text Text text <br> <br> &nbsp; </div>
    <div id="test4" class="ibox">(4) Text text Text text Text text Text text Text text <br> <br> &nbsp; </div>
    <div id="test5" class="ibox">(5) Text text Text text Text text Text text Text text <br> <br> &nbsp; </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> &nbsp; </div>
    <div id="test_aublauf" class="ibox">(2) Text text Text text Text text Text text Text text <br> <br> &nbsp; </div>
    <div id="test_lalala" class="ibox">(4) Text text Text text Text text Text text Text text <br> <br> &nbsp; </div>
    <div id="test_info" class="ibox">(5) Text text Text text Text text Text text Text text <br> <br> &nbsp; </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
    align="absmiddle"
    im IMG-Tag?



  • 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

Login zum Webhosting ohne Werbung!