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: 452
» Foren-Beiträge: 628

Komplettstatistiken

Benutzer Online
Momentan sind 5 Benutzer online
» 0 Mitglieder
» 3 Gäste
AhrefsBot, bot

Aktive Themen
Thursday - 09:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 40 Minuten
» Antworten: 0
» Ansichten: 0
Thursday - 07:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 2 Stunden
» Antworten: 0
» Ansichten: 0
Thursday - 02:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 8 Stunden
» Antworten: 0
» Ansichten: 1
Wednesday - 23:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 11 Stunden
» Antworten: 0
» Ansichten: 1
Wednesday - 16:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Heute, 12:50
» Antworten: 0
» Ansichten: 2
Wednesday - 12:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 08:53
» Antworten: 0
» Ansichten: 0
Zahnverzapfung herstellen...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Gestern, 07:25
» Antworten: 0
» Ansichten: 1
Holzdübel bei Gehrung set...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Gestern, 07:06
» Antworten: 0
» Ansichten: 0
Abrichten mit der Ober-/K...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
Gestern, 06:52
» Antworten: 0
» Ansichten: 1
Wednesday - 10:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 06:49
» Antworten: 0
» Ansichten: 0

 
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

Lightbulb Prepared Statements mit mysqli
Geschrieben von: Joopi - 07-07-2023, 10:42 - Forum: Programmieren - Keine Antworten

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

Eine Abfrage aus einer Datenbank ist im Grunde genommen sehr einfach und könnte so aussehen:

Code:
$erg = mysqli_query($db, "SELECT mailadresse FROM " . $tblname021 . " WHERE id = " . $n_id2);
$data = mysqli_fetch_assoc($erg);
$mailaddi = $data['mailadresse'] ?? null;

Der Code zeigt, dass ich durchaus mit Variablen in der Datenbankabfrage arbeite. Da ich diesen Code auf einem Webspace benutze, könnte es sein, dass Angreifer die Gelegenheit nutzen und meine Webseite nicht nur attakieren, sondern hacken. Das möchte ich vermeiden.

Der gleiche Zweck, den ich mit dem obigen Code verfolge, nämlich eine Mailadresse aus einer Tabelle zu erhalten, ist mit folgendem Code, der mit prepared statements geschrieben ist, gleichfalls zu erreichen:

Code:
$erg = "SELECT mailadresse FROM " . $tblname021 . " WHERE id = ?;";
$stmt = mysqli_stmt_init($db);

if (!mysqli_stmt_prepare($stmt, $erg)) {
    echo "SQL statement failed.";
} else {
    mysqli_stmt_bind_param($stmt, "s", $n_id2);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);

    $data = mysqli_fetch_assoc($result);
    $mailaddi = $data['mailadresse'] ?? null;
}

Der Vorteil von dieser Art der Programmierung ist, dass sie sicherer ist. Der Nachteil, er ist dem geneigten Leser bereits aufgefallen, ist, dass es wesentlich mehr Code zu schreiben gibt. Naja, einen Tod muss der Hobbyprogrammierer wohl riskieren, um nicht Opfer dieser blöden Internetkriminellen zu werden.

Ob das nun der Weisheit letzter Schluss ist, vermag ich nicht zu sagen. Aber die Vorgehensweise habe ich nun mehrfach im Internet recherchiert (ohne Chat-GPT) und ebenfalls in neueren YouTube-Videos sehen können. Insofern gehe ich davon aus, dass es nicht allzu verkehrt ist, meine PHP-Skripte anzupassen und in der etwas aufwendigeren Art und Weise auf den Server zu legen.

Drucke diesen Beitrag

Thumbs Up rsync mit ssh auf remote-server
Geschrieben von: Joopi - 05-07-2023, 07:47 - Forum: Linux - Keine Antworten

Seitdem ich wieder einen vServer habe, mache ich mir Gedanken darüber, wie ich den Ordner und Dateien auf den Server bringe. Die erste Option ist immer via FTP.

Es gibt aber auch die Möglichkeit, mit rsync die Ordner und Dokumente vom lokalen Rechner auf den vServer zu transferieren.

Auf den vServer logge ich mich nur noch mit einem rsa-key ein. Die Aufgabe, die ich erledigen wollte, war:

  • Stelle eine Verbindung über ssh und rsa-key her.
  • Synchronisiere den lokalen Ordner mit dem entfernten Ordner

Der Befehl dazu lautet wie folgt:

Code:
rsync --delete -av -e 'ssh -i ~/.ssh/rsa-key -p 2200' ~/help/help/ user@server.net:~/help/

Da ich einen abweichenden Port benutze, den ich im Beispiel mit 2200 angegeben habe, wirkt Befehl durchaus kompliziert. Wenn man ihn in Ruhe anschaut, dann löst sich die Komplexität auf:
  • rsync-Befehl und Optionen (rsync --delete -av -e)
  • ssh-Befehl und Optionen ('ssh -i ~/.ssh/rsa-key -p 2200')
  • Quellordner (~/help/help/)
  • Zielserver und Zielordner (user@server.net:~/help/)

Sobald der Befehl ausgeführt ist, muss die passphrase eingegeben werden:

Code:
Enter passphrase for key '/home/user/.ssh/rsa_key':

Ist Phrase korrekt eingegeben worden, wird der Login-Vorgang ausgeführt. Anschließend werden die Ordner und Dateien synchronisiert. Ist der Transfer beendet, erfolgt der Logout-Vorgang. Fertig!

Da ich meinen lokalen Computer so gut wie nie ausschalte, würde ich gerne nachts ein Backup vom lokalen Computer auf den entfernten Server durchführen lassen (cron-Job). Dazu muss ich aber noch erfahren, wie ich die passphrase mitgeben kann, ohne dass ich einen Wecker stellen und vor dem Computer sitzen muss.

Drucke diesen Beitrag

  Schreibrecht verstehen
Geschrieben von: Joopi - 17-06-2023, 07:29 - Forum: Linux - Keine Antworten

Auf einem Linuxsystem sind die Rechte sehr aufwendig - finde ich. Man muss zwischen Eigentümer, Gruppe und Sonstige unterscheiden.

Zu den Rechten zählen:

  • lesen (r - read)
  • schreiben (w - write)
  • ausführen (x - excute)

Mit Ziffern werden diese Rechte dann den 3 Userformen, ich nenne sie mal so, zugeordnet.

Zitat:Rechte chmod (octal)

Lesen, schreiben und ausführen: 7
Lesen und Schreiben           : 6
Lesen und Ausführen           : 5
Nur lesen                     : 4
Schreiben und Ausführen       : 3
Nur Schreiben                 : 2
Nur Ausführen                 : 1
Keine Rechte                  : 0

Die für mich einfachste Möglichkeit, um die Rechte an einer Datei zu verändern, ist der Befehl chmod.

Der Befehl, um einer Datei alle Rechte für alle (Eigentümer, Gruppe und Sonstige) zu geben, muss der Befehl mit root-Rechten wie folgt aussehen:

Code:
sudo chmod 777 dateiname.txt

Die Ziffer 7 steht, wie oben zu sehen, für "lesen, schreiben, ausführen".  Wäre es der Fall, dass Sonstige nur lesen und ausführen, aber nicht schreiben sollen, dann ändert sich der Befehl wie folgt:

Code:
sudo chmod 775 dateiname.txt

Drucke diesen Beitrag