Hallo, Gast
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.

Benutzername
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 379
» Foren-Beiträge: 502

Komplettstatistiken

Benutzer Online
Momentan sind 8 Benutzer online
» 0 Mitglieder
» 4 Gäste
AhrefsBot, Bytespider, Semrush, bot

Aktive Themen
Friday - 08:00 CDT: Heavy...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 04:52
» Antworten: 0
» Ansichten: 9
Thursday - 12:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
02-05-2024, 08:39
» Antworten: 0
» Ansichten: 7
Thursday - 09:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
02-05-2024, 05:56
» Antworten: 0
» Ansichten: 7
Wednesday - 11:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
01-05-2024, 08:36
» Antworten: 0
» Ansichten: 8
Wednesday - 09:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
01-05-2024, 05:55
» Antworten: 0
» Ansichten: 5
Firmware-Update Olympus O...
Forum: Fotografie
Letzter Beitrag: Joopi
01-05-2024, 05:55
» Antworten: 0
» Ansichten: 31
Wednesday - 08:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
01-05-2024, 05:20
» Antworten: 0
» Ansichten: 4
Wednesday - 06:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
01-05-2024, 03:35
» Antworten: 0
» Ansichten: 6
Firmware-Update Panasonic...
Forum: Fotografie
Letzter Beitrag: Joopi
01-05-2024, 03:25
» Antworten: 0
» Ansichten: 21
Facebook und Instagram ve...
Forum: Fotografie
Letzter Beitrag: Joopi
01-05-2024, 12:51
» Antworten: 0
» Ansichten: 5

 
  Sunday - 05:00 CDT: Mist, 23°C (73°F)
Geschrieben von: Joopi - 16-07-2023, 02:51 - Forum: Wetter in Little Rock - Keine Antworten

Sunday - 05:00 CDT: Mist, 23°C (73°F)

Temperature: 23°C (73°F), Wind Direction: Northerly, Wind Speed: 0mph, Humidity: 94%, Pressure: 1015mb, Rising, Visibility: Moderate


https://www.bbc.co.uk/weather/4119403

Drucke diesen Beitrag

Lightbulb In einem PHP-Dokument mehrere Datenbank abfragen
Geschrieben von: Joopi - 16-07-2023, 10:26 - Forum: Programmieren - Antworten (1)

Es liegt in der Natur der Dinge, dass, wenn man zwei Datenbanken abfragen möchte, auch zwei Datenbanken im Zugriff sein und die Verbindungen hergestellt sein müssen. Je nach Anwendungsbereich hat man nicht immer alle Tabellen in einer Datenbank liegen. So erging es mir bei einem kleinen Projekt und war, auch wenn ich seit Jahren im PHP-MySQL-Umfeld herumwusel, eine Art von Premiere.

Wie geht das?

Wenn man PHP-MySQL erlernt, z.B. durch Online-Tutorials oder YouTube-Videos, wird klassischerweise immer von einer Datenbankverbindung ausgegangen. Ich habe noch nie gesehen, dass zwei oder mehr Datenbankverbindungen gezeigt wurden.

Eine Datenbankverbindung (prozedural) würde ich so auf bauen wollen:

Code:
/* Zugangsparameter */
[code]$host = "localhost";
[code]$user = "jankass";
[code]$pwd = "apfelkuchen";
[code]/* Datenbanken */
[code]$dbname004 = "personen";
[code]$dbname005 = "kunden";
/* Tabellen */
$tblname4001 = "personendaten";
$tblname5001 = "kundendaten";

$db1 = mysqli_connect($host, $user, $pwd, $dbname004);
        if(!$db1)
        {
            exit("Verbindungsfehler: " .mysqli_connect_error() . "bei Datenbank " . $dbname004 . "");
        } else {
            echo "Die Verbindung zur Datenbank " . $dbname004 . " wurde erfolgreich hergestellt.<br>";
        }

Zu beiden Zuständen des Verbindungsaufbaus lasse ich mir immer eine Nachricht ausgeben (in der Entwicklungsumgebung).

Ich habe es mir auch angewöhnt, diesen Codeabschnitt auszulagern und in einer include-Datei in einem separaten Ordner abzulegen. Aus Sicherheitsgründen ist dies auf jeden Fall keine schlechte Angewohnheit.

Die erste Datenbank ist also im Zugriff. Um auch die zweite Datenbank ansprechen zu können, ist nun nur noch folgendes notwendig:

Code:
$db2 = mysqli_connect($host, $user, $pwd, $dbname005);
        if(!$db2)
        {
            exit("Verbindungsfehler: " .mysqli_connect_error() . "bei Datenbank " . $dbname005 . "");
        } else {
            echo "Die Verbindung zur Datenbank " . $dbname005 . " wurde erfolgreich hergestellt.<br>";
        }

Wenn auch hier die Erfolgsmeldung im Browser erscheint, dann kann ich beide Datenbanken ansprechen und Abfragen starten, Eingaben oder Änderungen vornehmen.

Zwei Abfragen könnten wie folgt gestaltet werden (separiert, nicht gejoined):

Code:
$protollhttpx = mysqli_query($db1, "SELECT id, vorname, nachname, firma FROM " . $tblname4001 . ";");

$protollhttpx = mysqli_query($db2, "SELECT id, segment, bestellung, lastdate FROM " . $tblname5001 . ";");

Die Beispiele sind etwas aus der Luft gegriffen, veranschaulichen aber das, was ich zeigen wollte.

Es ist auch möglich, die Abfrage in einem Statement zusammen zu fassen, denn auch über zwei (oder mehr) Datenbank kann mit join gearbeitet werden. Das habe ich noch nicht ausprobiert, da ich noch keinen solchen Fall hatte. Wird aber nachgeliefert - irgendwann.

Drucke diesen Beitrag

Shocked Vorschaumodus von Visual Studio Code verhindern
Geschrieben von: Joopi - 15-07-2023, 10:21 - Forum: Blog - Antworten (1)

Je moderner eine Software daherkommt, um so mehr Murks steckt darin. Das ist zwar Ansichtssache, aber für mich ist das so. Man kann einfach nicht jede Software in- und auswendig kennen. Zumindest nicht der Hobbyist. Und viele Standardeinstellungen sind meist fragwürdig und lässt die Frage aufkommen, was sich der Programmierer (m/w/d) dabei wohl gedacht haben kann.

Wie bereits an anderer Stelle berichtet, arbeite ich vermehrt mit Visual Studio Code. Durch die vielfältigen Möglichkeiten, auch im Hinblick auf den umfangreichen Erweiterungsmarkt, verliert man schnell den Überblick. Aber man sich ja selber dabei, wenn es um die Installation von kleinen Helfern geht.

Aber eines hat mich irgendwie von Anfang an genervt. Und zwar:

Wenn aus der linken Leiste auf eine Datei geklickt wird, wird sie geöffnet. Man kann sich den Inhalt anschauen.
Wenn dann auf eine zweite Datei geklickt wird, wird die erste geschlossen. An deren Stelle wird die zweite geöffnet und kann betrachtet werden.
Und so geht es weiter bis zum Sankt-Nimmerleins-Tag.

Erst wenn in einer Datei etwas ändert wird, wird beim Klick in der linken Spalte auf eine Datei ein neues Tab aufgemacht und dort erscheint dann der Inhalt der neu angeklickten Datei.
Wenn man dann wieder auf eine Datei in der linken Leiste klickt, tritt diese an die Stelle der geraden eben geöffneten Datei.

Was ist das nur für ein Unfug?

Ich habe lange gebracht, um zu begreifen, was da eigentlich passiert. Jetzt endlich, nach wohl zwei Jahren, habe ich herausgefunden, dass dieses Verhalten wieder Mal an einer für mich nicht nachvollziehbaren Standardeinstellung liegt, die von Hause aus gesetzt ist. Das Haus, in dem dieser Unfug verzapft wird, gehört MicroSoft, wo Visual Studio Code hergestellt wird. Die Erfinder von Windows sind für alles gut, meist für nicht Gutes. Wobei VSC insgesamt gut ist, aber ...

Es ist einfach nur lästig, dass Tabs, also Dateien, einfach so ohne Nachfrage geschlossen werden. Es betrifft nämlich auch Dateien, die geöffnet, editiert und wieder neu gespeichert wurden, aber längere Zeit unberührt geöffnet blieben. Somit kann es also sein, wenn eine weitere Datei aus der linken Leiste geöffnet wird, irgendwo eine andere Datei geschlossen wird. Zack, weg! Man blickt überhaupt nicht mehr durch. Schon gar nicht dann, wenn man quasi parallel an mehreren Dateien arbeitet.

Die Dateien, die ich geöffnet habe, werden von mir auch genutzt. Nicht immer und die ganze Zeit, aber sie gehören zu meinem Projekt. Dateien, von denen ich glaube, sie nicht mehr nutzen zu müssen, die schließe ich selber.

Scheinbar habe ich endlich den Anpacker gefunden, um dieses nervige Verhalten von Visual Studio Code abzustellen. In den Einstellungen ist es dieser Abschnitt:

   

Der ist im Standard aktiv und bedeutet, dass ein Vorschaumodus erlaubt ist. Der Vorschaumodus bedeutet: nur gucken, nicht anfassen

Erst wenn eine Änderung vorgenommen und diese danach gespeichert wurde, ist für eine gewisse Zeit der Vorschaumodus nicht mehr aktiv.

Den Abschnitt habe ich nun deaktiviert und hoffe, dass damit die Tabs/Dateien geöffnet bleiben, die ich geöffnet haben möchte.

Es gibt noch eine weitere Einstellung, von der ich nicht so genau weiß, wie sie zu deuten ist:

   

Auch diese Einstellung habe ich deaktiviert, denn alles was automatisch läuft in Bezug auf das Öffnen und Schließen von Dateien, möchte ich nicht haben.

Drucke diesen Beitrag

Lightbulb Mehrere Spalten modizifieren
Geschrieben von: Joopi - 15-07-2023, 09:31 - Forum: Programmieren - Keine Antworten

Heute hatte ich den Umstand, dass ich zwei Spalter in mehreren Tabellen mit dem Typ string angelegt hatte. Aber ich benötigte sie als Spalten vom Typ integer. Da ich mir bei dem warmen Wetter keine Fingerübungen geben wollte, war relativ schnell ermitteln, wie ich das in einem Befehl würde machen können.

Der Befehl lautet wie folgt:

Code:
ALTER TABLE zawstat_browser MODIFY jahr INTEGER, MODIFY monat INTEGER;

Dieser Befehl musste nun 28 Mal wiederholt werden. Das konnte ich mit LibreOffice auch schnell und schlank regeln.

Code:
A |       B         |                                  C
1 | zawstat_browser | =VERKETTEN("ALTER TABLE ";B1;" MODIFY jahr INTEGER, MODIFY monat INTEGER;")

Die 28 in dieser Form erstellen mysql-Statements konnte ich dann en bloc einfügen und ausführen lassen. Fertig!

Drucke diesen Beitrag

Heart Linux überspringt 3-%-Hürde weltweit
Geschrieben von: Joopi - 13-07-2023, 07:14 - Forum: Linux - Keine Antworten

https://gs.statcounter.com/os-market-sha.../worldwide

   

Drucke diesen Beitrag

Lightbulb Felder einer Tabelle auflisten mit Ausnahmen
Geschrieben von: Joopi - 12-07-2023, 10:28 - Forum: Programmieren - Keine Antworten

Dann und wann kann es notwendig sein, in einem PHP-Skript die Felder einer MySQL-Tabelle aufzulisten, wobei aber nicht alle Felder angezeigt werden sollen.

Im Normalfall sieht der PHP-Code wie folgt aus, um alle Felder aufzulisten:

Code:
$result = mysqli_query($db, "SHOW COLUMNS FROM monatstabelle;");

Will man aber bestimmte Felder nicht in der Anzeige haben, so kann man diese ausschließen, und zwar wie folgt:

Code:
$result = mysqli_query($db, "SHOW COLUMNS FROM monatstabelle WHERE Field != 'id' and Field != 'monat' and Field != 'jahr';");

Das Resultat, welches angezeigt werden könnte, würde alle anderen Tabellenfelder zeigen.

Drucke diesen Beitrag

Lightbulb Upload csv-Datei
Geschrieben von: Joopi - 12-07-2023, 04:18 - Forum: Programmieren - Keine Antworten

Das Einfügen von Daten in eine MySQL-Tabelle mittels einer csv-Datei ist im Grunde genommen recht einfach. Es gibt aber Tücken, die man wissen und überlisten muss.

Der INSERT-Befehl erfordert immer die gleiche Anzahl einzufügender Spalten wie Spalten in der Tabelle vorhanden sind. Wird über ein Formular oder über eine sql-Downloaddatei eine Tabelle gefüllt, ist gewährleistet, dass die üblicherweise vorhandene Spalte mit dem auto_increment automatisch gefüllt wird. In der Regel handelt es sich um die Spalte id oder ähnliches.

Oftmals liegen Textdateien vor, die zumindest im csv-Format erstellt wurden und somit relativ einfach weiterverarbeitet werden könnten. Gäbe es da nicht das Hindernis, dass oftmals in dieser Art von Erfassungsgrundlage genau diese wichtige Spalte mit dem Namen id oder ähnliches fehlt. Naja, mir geht es leider oftmals so.

Bisher habe ich die csv-Datei in Excel bzw. LibreOffice Calc geladen, eine Spalte vor den Daten eingefügt, diese dann mit Autofill durchnummeriert und dann wieder als csv-Datei abgespeichert. Ein wenig umständlich, aber zielführend (meistens).

Heute habe ich gelernt, dass es auch anders geht. Die gelernte Variante spart Zeit und findet ausschließlich in PHPMyAdmin statt. Will man über PHPMyAdmin eine csv-Datei importieren, erkennt das Programm den Dateityp. Es wird danach gefragt, wie die Spalten getrennt und die Werte eingeschlossen sind.

Würde ich einfach nur auf importieren klicken, würde eine Fehlermeldung erscheinen. Diese Fehlermeldung würde berichten, dass die Anzahl der Spalten zwischen einzufügenden Werten und Tabelle nicht übereinstimme. Das wäre auch richtig so, denn die Spalte mit dem Namen id oder ähnliches fehlt in der csv-Datei.

Die Lösung ist, dass in dem Feld Spaltennamen genau die Spalten eingetragen werden, die in der csv-Datei enthalten sind (die Überschriften stehen nicht drin). Die Reihenfolge der Spalten sollte aber trotzdem stimmen und gewährleistet sein.

Das würde dann so aussehen können:

   

Wenn dann, Datenkonsistenz vorausgesetzt, auf importieren bzw. ok geklickt wird, werden die Daten eingelesen und die Spalte mit auto_increment automatisch gefüllt.

Diese Art des Uploads ist mir wesentlich lieber, wie das Herumgehampele in einem Tabellenkalkulationsprogramm oder eine andere Art der Programmierung, die eine fortlaufende Nummer vor den jeweiligen Datensatz stellt.

Wenn es nicht zu viele Datensätze sind, dann kann man die laufende Nummer händisch eingeben. Meine csv-Datei hatte über 230.000 Datensätze. Das ist mir dann doch ein wenig über den Kopf gewachsen.

Drucke diesen Beitrag

Thumbs Up eigene Tastenkombinationen in VS Code erstellen
Geschrieben von: Joopi - 12-07-2023, 01:34 - Forum: Programmieren - Keine Antworten

Seit etlichen Jahren arbeite ich viel und gerne mit dem Editor bluefish. Ich mag diesen Editor, weil er relativ einfach ist. Besonders gut gefallen mir die Tastenkombinationen, mit denen schnell entsprechende TAGS in einem HTML-/PHP-Dokument gesetzt sind. Der Vorteil dieser Tastenkombinationen ist, dass der Cursor direkt zwischen den beiden TAGS steht und man sofort mit dem Schreiben fortfahren kann.

Die für mich wichtigsten sind:

  • STRG+ALT+P -> <p></p> --> Absatz (Paragraph)
  • STRG-ALT+M -> <li></li> --> Listeneintrag
  • STRG+ALT+B -> <b></b> --> Fettschrift

Mitterweile nutze ich verstärkt Visual Studio Code. Dieser Editor ist moderner, aber für mich nicht zwingend besser. Aber bei bluefish bin ich mir nicht sicher, wie lange er noch in der Wartung ist. Also nutze ich VSC nun etwas verstärkter.

Allerdings fehlen mir in VSC die liebgewonnen Tastenkombinationen. VSC ist überfrachtet mit Tastenkombintionen, die ich nie nutzen werde. Ich bin nur Hobbyist und kein Profi, der in allen Programmiersprachen zu Hause ist und durch die Codes pflügt, als gäbe es kein Morgen.

Nun habe ich es endlich geschafft, die 3 obigen Tastenkombinationen in VSC zu integrerieren. In der keybindings.json ist dafür folgender Eintrag erforderlich (Systemtastenkombinationen werden damit überschreiben):

Code:
// Geben Sie Ihre Tastenzuordnungen in dieser Datei ein, um die Standardwerte außer Kraft zu setzen.
[
{
    "key": "ctrl+alt+p",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "<p>$0</p>"
    }
},
{
    "key": "ctrl+alt+m",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "<li>$0</li>"
    }
},
{
    "key": "ctrl+alt+b",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "<b>$0</b>"
    }
}]

Das Wunderbare dabei ist, dass der Cursor wieder zwischen den TAGS steht und somit der Schreibfluss kaum gehindert wird.

Die Zeit, dass ich viele HTML-Dokumente geschrieben habe, ist zwar im Moment vorbei, aber dennoch werden auch in PHP-Skripten viele TAGS genutzt.

Ich bin begeistert!

Drucke diesen Beitrag

Thumbs Down OpenAI ist ähnlich paranoid wie alle anderen - ich wurde geblockt
Geschrieben von: Joopi - 11-07-2023, 05:39 - Forum: Allgemeines - Antworten (2)

Mit einer simple Anfrage, wie ich in einem PHP-Skript über einen mysqli-Befehl etwas in eine Datenbank schreiben kann, habe ich mich geblockt bzw. wurde geblockt. Die simple Mitteilung lautet:

   

Mich wundert es, dass es Menschen gibt, die mittels Chat-GPT und wer weiß was für Services ganze Programme schreiben. Wenn ich eine simple Frage stelle, dann werde ich geblockt. Wie bei allen anderen us-amerikanischen Konzern, scheint auch bei OpenAI die Paranoia vorzuherrschen.

Es gibt noch nicht mal eine Anlaufstelle oder eine Mailadresse, an die man sich wenden kann. Nur das ist über einen Chatroboter erreichbar:

   

Jaja, alles für umme und dann meckern. Ich bin immer ohne Chat-GPT ausgekommen, darum ist es nicht so schlimm. Nur die Art und Weise, wie der Normaluser, der auch Bezahluser werden könnnte, behandelt wird, ist mal wieder unter aller Kanone.

Drucke diesen Beitrag

Lightbulb Sicherheit mit mysqli_real_escape_string
Geschrieben von: Joopi - 07-07-2023, 11:15 - Forum: Programmieren - Keine Antworten

Mittlerweile gewöhne ich mir meine eingefleischten Fehler ab und schreibe auch PHP-Code etwas besser - hoffentlich.

Die prepared statements habe ich bereits verstanden, nun ist es aber auch wichtig, dass ich die Erfassung von Daten in eine Datenbank gegen kriminelle Absichten schütze. Eine sql-injection ist nicht wirklich zu wünschen, daher werde ich mich auch hier vorsehen.

Ein einfache insert-Statement sieht wie folgt aus:

Code:
$idvorgang = $_REQUEST['n_idvorgang'];
$telefon   = $_REQUEST['n_telefon'];
$datum     = $_REQUEST['n_datum'];

$sql = mysqli_query($db, "INSERT INTO $tblname042 (id_vorgang, telefon, erfasst) VALUES ('$n_idvorgang', '$n_telefon', '$n_datum')");

Aus einem Formular werden Eingabe gelesen und in eine Tabelle erfasst. Bei dieser sehr effektiven, aber auch einfachen Art und Weise der Datenerfassung kann es leicht zu sql-injections kommen. Dieses gilt es zu verhindern. Der nachfolgende Code nutzt den Schutz davor:

Code:
$idvorgang = mysqli_real_escape_string($conn, $_REQUEST['n_idvorgang']);
$telefon   = mysqli_real_escape_string($conn, $_REQUEST['n_telefon']);
$datum     = mysqli_real_escape_string($conn, $_REQUEST['n_datum']);

$sql = "INSERT INTO $tblname042 (id_vorgang, telefon, erfasst) VALUES (?, ?, ?);";

$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "SQL error";
}
else {
    mysqli_stmt_bind_param($stmt, "sss", $idvorgang, $telefon, $datum);
    mysqli_stmt_execute($stmt);
}

Mit diesem Code werden die variablen Daten über mysqli_real_escape_string gegen Codeeinträge geschützt. Einem Hacker wird es so wesentlich schwerer gemacht, eine Webseite über eine sql-injection zu hacken.

Auch hier ist die vermehrte Code vielleicht als Nachteil zu sehen. Aber die Sicherheit geht vor, daher werde ich künftig meinen Code immer so aufbauen und bestehende PHP-Dokumente entsprechend korrigieren.

Drucke diesen Beitrag