Migration schreiben von "

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Migration schreiben von "

Beitrag von IMC »

Hallo,
ich habe jetzt meine erste Extension mit Zugriff auf die DB fertig gestellt.
Dabei ist mir aufgefallen das beim Schreiben mit update_data() array('config.add', array('imcger_...', '"zoom"')) Anführungszeichen mit einem Backslash maskiert werden \".
Schreibe ich den selben String aus dem Formular des ACP, wird das Anführungszeichen nicht maskiert. Dies ist kein Problem, ich bin nur verwundert.

Ist dieses unterschiedliche Verhalten normal/gewollt? bzw. kann man dies beeinflussen?
mySQL 5.7
phpBB 3.3.5 RC1
Gruß, Thorsten
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von Dr.Death »

Dafür müssten wir schon mehr von deinem geschrieben Code an einem Stück sehen, um das beurteilen zu können.

Du könntest es auch so schreiben:

Code: Alles auswählen

update_data() 
['config.add', ['imcger_...', 'zoom']]
Dann wird dem key imcger_... dem Value zoom zugewiesen.

Musst Du (aus welchem Grund auch immer) den Value "zoom" zuweisen wollen, dann sind die " zu maskieren.
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von IMC »

Ich habe eben etwas getestet.
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', "\"zoom\"")), String in DB \"zoom\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '\"zoom\"')), String in DB \\\"zoom\\\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '"zoom"')), String in DB \"zoom\"
array('config.add', array('imcger_fancybox3_toolbar_button_zoom', ""zoom"")), String in DB \"zoom\"

Ich war davon ausgegangen das ich die Zeichen nicht maskieren brauche wenn ich sie in einfache Anführungszeichen setze und war überrascht das die Markierung automatisch hinzugefügt wurde. Auf jeden Fall habe ich an der Stelle wieder etwas dazugelernt.
Gruß, Thorsten
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von Dr.Death »

Gegenfrage:

Warum muss in der Datenbank das zoom in Anführungszeichen gesetzt werden ?
Was möchtest du damit bezwecken?

Es wird so oder so als "String" in die DB eingetragen.

Wenn später die Anführungszeichen zwingend bei der Verarbeitung / Ausgabe benötigt werden, kann man sie später leichter hinzufügen, als sie beim einarbeiten in die DB extra zu maskieren.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3532
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von chris1278 »

Hi Imc also ich bin jetzt nicht wirklich spezialist was das angeht bin selber noch am lernen aber mal ein paar beispiele vond em was ich nutze:

In long und short array:


Also bei zahlen bool werten also die true/false abfragen:
normal also mit array geschrieben:

Code: Alles auswählen

array('config.add', array('variable_name', 0)),

Code: Alles auswählen

['config.add', ['variable_name', 1]],
Und hier beide Varianten für strings zu schreiben:

Code: Alles auswählen

array('config.add', array('variable_name', 'wert schreiben oder leer lassen wenn keine vorgabe haben willst')),

Code: Alles auswählen

['config.add', ['variable_name', 'wert schreiben oder leer lassen wenn keine vorgabe haben willst']],
Wenn du buchstaben und zahlen gemicht übers acp an das template geben willst dann solltest du die String variante nutzen die einfüge option mittels 0 oder 1 sinnvoll wenn man aus zwei sachen auswählen kann z.B. funktion ist aktiviert ja/nein.

Ansosnte kannst du in der datenbank auch das zwichen den beiden hochkommas freilassen. Der wert wird dann über das acp modul dort eingetragen.

z.B. so

Code: Alles auswählen

array('config.add', array('variable_name', '')),
Dann wird der Eintrag in der phpbb_config angelegt aber ohne inhalt. Diesen kannst du dann später in deinem Modul einfügen.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von Dr.Death »

Chris, stop mal bitte.

Es geht hier erstmal um die Frage ob die Anführungszeichen wirklich benötigt werden oder nicht.

Warte bitte mal die Antwort ab.... ich glaube schon, daß IMC weiß wie der Code zu schreiben ist.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3532
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von chris1278 »

Dr.Death sorry ich hatte das geschrieben und während ich das geschrieben habe hast du schon geantwortet.
Benutzeravatar
IMC
Mitglied
Beiträge: 541
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von IMC »

Dr.Death hat geschrieben: 19.09.2021 22:40 Wenn später die Anführungszeichen zwingend bei der Verarbeitung / Ausgabe benötigt werden, kann man sie später leichter hinzufügen, als sie beim einarbeiten in die DB extra zu maskieren.
Genau so habe ich es jetzt gelöst. Mit den ursprüngliche Plan die Anführungszeichen mit in der DB zu speichern wollte ich Programmcode sparen.
Das steckt noch von früher in mir drin als die Rechner noch langsamer waren.
Gruß, Thorsten
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von Dr.Death »

Ja, das "Maskieren" ist mehr Arbeit, besonders bei einem Code Review muss man erstmal alles doppelt begutachten....gilt das jetzt als Maskiert oder nicht ? Doppelte Maskierung \\, Dreifache \\\ usw. das verwirrt oft.

Da ist es einfacher, nach dem "Auslesen" einfach das Ergebnis wieder mit " umschliessen.

Ansonsten wäre das der richtige Weg gewesen: ( egal ob short oder long array schreibweise )
Werte in einem Array sollten mit Single Quotes umgeben sein.

Code: Alles auswählen

array('config.add', array('imcger_fancybox3_toolbar_button_zoom', '"zoom"'))
String in DB \"zoom\"
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2112
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Migration schreiben von "

Beitrag von LukeWCS »

IMC hat geschrieben: 19.09.2021 22:56 Genau so habe ich es jetzt gelöst. Mit den ursprüngliche Plan die Anführungszeichen mit in der DB zu speichern wollte ich Programmcode sparen.
Das steckt noch von früher in mir drin als die Rechner noch langsamer waren.
Dafür hättest du jedoch mehr Aufwand, wenn du den String an anderer Stelle ohne Anführungszeichen bräuchtest. Der Programmcode zum hinzufügen der Anführungszeichen kann dann z.B: so aussehen.

Code: Alles auswählen

$src = 'zoom';

$out1 = "\"$src\"";
$out2 = '"' . $src . '"';
$out3 = sprintf('"%s"', $src);
Das sind mal 3 Varianten. Oder direkt an der Stelle definieren, die den Wert schlussendlich ausgibt.

Bezüglich Geschwindigkeit brauchst dir da keinen Kopf machen. Solch triviale Vorgänge erledigt der Interpreter derart schnell, dass du solche Aktionen schon zig tausendfach ausführen müsstest, bevor man überhaupt mal anfangen kann über Verarbeitungsdauer zu sprechen bzw. bevor man anfangen müsste sich über sowas wie Optimierung Gedanken zu machen. Auch die Wahl der PHP Version beeinflusst die Leistung. PHP 7 ist z.B. um einiges performanter als PHP 5.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Antworten

Zurück zu „Extension Bastelstube“