Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 464
» Foren-Beiträge: 641
Komplettstatistiken
|
Benutzer Online |
Momentan sind 12 Benutzer online » 0 Mitglieder » 7 Gäste AhrefsBot, Bytespider, Crawl, DotBot, bot
|
|
|
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.
|
|
|
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.
|
|
|
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!
|
|
|
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.
|
|
|
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.
|
|
|
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.
|
|
|
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.
|
|
|
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
|
|
|
PHP-Extensions installieren |
Geschrieben von: Joopi - 17-06-2023, 05:13 - Forum: Linux
- Keine Antworten
|
|
Auf einem frischen Server sind meist keine der von den Desktop-Versionen bekannten Programme installiert. So verhält es sich auch mit PHP.
Nach der Installation von PHP müssen meist, damit Webanwendungen laufen, diverse Extensions nachinstalliert werden. Es sind viele und es wäre mühsam, diese alle einzeln zu installieren.
Wenn man weiß, welche Extensions benötigt werden, kann man diese in einem Schwung installiereren. Als Beispiel sollen hier die Extensions
installiert werden. Der verkürzte Befehl sieht dann wie folgt aus:
Code: sudo apt install php8.2-{xml,yaml}
|
|
|
Standardeditor wählen |
Geschrieben von: Joopi - 17-06-2023, 12:32 - Forum: Linux
- Keine Antworten
|
|
Oftmals hat man in einem Linuxsystem mehrere Editoren zur Auswahl. Wenn man z.B. im MidnightCommander den dortigen internen Editor nicht nutzen will, dann kann man diesen ändern.
Welche Editoren zur Verfügung stehen, ist mit folgenden Befehl auszuweisen:
Code: sudo update-alternatives --config editor
Die Ausgabe dazu sieht auf meinem vServer so aus:
Zitat:There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/nano 40 manual mode
2 /usr/bin/mcedit 25 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 15 manual mode
Press <enter> to keep the current choice(*), or type selection number:
Mit den Ziffern 1 bis 4 kann man den Editor seiner Wahl als Standardeditor setzen.
|
|
|
|