Beiträge von timtim

    Hi,


    das ist eine interessante frage, ich vermute dafür gibt es schon eine Lösung, wenn man sich nur besser mit Geometrie/Mathematik auskennen würde :D.

    Aber man kann auch versuchen selbst nach mustern zu suchen.


    Kommen die Punkte in der richtigen Reihenfolge, also ist das erste Element A das zweite B usw?

    Wenn Ja, sollte das nicht so schwer sein, müsste aber auch herumprobieren.


    Eine möglichkeit das zu prüfen könnte sein, ob ein Vector zwischen zwei Vector eine negative Richtung einschlägt, da bei einem Polygon ja jeder winkel größer werden müsste bis 360° erreicht sind. Wenn nun ein winkel zwischen zwei punkten kleiner ist, als bei einem davor wäre das schon ein Indikator.


    Ich werde da mal rumspielen und schauen ob ich das raus bekomme.


    Für was ist denn das ganze? Nur so aus Neugierde.


    Grüße


    Timo

    Hi,


    wenn das mit dem Click auch nicht Funktioniert und das zweite Bild beim "click" passiert, dann würde ich es auf diese Fehler schieben. Dein Code


    Code
    cardElement.addEventListener('change', function(event) {
          if (event.error) {
              cardError.textContent = event.error.message;
          } else {
              cardError.textContent = '';
          }
      });

    befindet sich ja vor dem Form submit und in der Ausgabe wirft der vermutlich die fehler (zumindest ist das der einzige punkt in deinem code, der textContent beinhaltet. Wenn die Fehler weg sind, könnte es gehen.


    Da scheinbar cardError null ist, kannst du in dem event ja einfach mal ein


    Code
    if(cardError == undefined){ console.log(event.error); return;}

    rein machen, das zumindest die Fehler nicht mehr auftreten und schauen ob du dann weiter kommst.


    Grüße


    Timo

    Hi fireclave,


    ich verstehe nicht ganz welche Eckpunkte du suchst, du möchtest mit den gegebenen Koordinaten ein Polygon Zeichen, benötigst du jetzt 4 Punkte außerhalb der gegebenen Koordinaten damit du um das Polygon ein Rechteck hast?


    Das könntest du damit erreichen das du dir für die vier ecken jeweils die größten / kleinsten punkte raussuchst und diese als Eckpunkte verwendest. Aber am besten nochmal etwas genauer erklären :)


    Grüße


    Timo

    Morgen,


    wenn es nicht in das Submit event läuft fallen mir auf Anhieb nur zwei gründe ein.


    1. Es treten andere Fehlermeldungen auf die dazu führen das der entsprechende JS-Code (Submit Event) nicht erreicht werden kann.

    2. Etwas anderes überschreibt das submit-event (das kann sein, da du ja scheinbar weitere frameworks nutzt).


    Da ich das andere Framework aber nicht kenne, ist es für mich schwer da eine aussage zu treffen.


    Das vorgehen wäre hier zum einen, das problem zu verkleinern, d.h. so lange code-teile entfernen bis es funktioniert und dann schauen welche stelle das ausführen verhindert.


    Oder einen anderen weg gehen. Du kannst das Submit ja auch anders Triggern, wenn du dem button noch den type button mit gibst type='button' dann triggert er das Submit event nicht mehr. Stattdessen nimmst du den Inhalt deines Form-Submit-Event und bindest es an den Button im click event und schaust ob dann der code ausgeführt wird. Da du am ende ja nochmals ein form.submit() ausführst sollte das dennoch gehen.

    Schau mal ob du so erstmal zum ziel kommst.


    Grüße


    Timo

    Hi,


    am einfachsten wäre hier eine Funktion zu erstellen, welche dir abhängig der Werte ein Bild oder Icon zurück gibt.


    Ein kleines beispiel mit UTF-8 Emojis (https://www.w3schools.com/charsets/ref_utf_symbols.asp https://apps.timwhitlock.info/emoji/tables/unicode )



    Um das nun für Wertebereiche zu tun müsste man nur die If's passend verwenden. Und das getIcon() eben an der stelle an welcher du normal die zahl setzen würdest.


    Grüße


    Timo

    Hi,


    ich habe mir das mal angeschaut, an für sich stimmt der code soweit. Auch wenn das console.log nicht ausgeführt wird, wird denn das Event ausgeführt?


    du könntest über das "preventDefault" mal ein debugger setzen (das führt dazu dass das script an der stelle vom debugger angehalten wird). Vielleicht treten andere JS Fehler in deinem code auf, weswegen dein event nicht ausgeführt wird.


    D.h. heir müsste man das in der Anwendung selbst testen.


    1. Treten JS-Fehler in der Konsole auf beim Laden / Clicken des Button? (das problem ist ja, dass beim Klicken des Button das Form gleich abgesendet wird, daher sieht man ggf. nicht was im Fenster davor passiert ist. Daher kann es nützen an ein paar stellen einfach dass keyword debugger einzufügen).


    2. Um schnell zu prüfen ob die Daten da sind könntest du das Form von POST auf GET stellen um dann beim weiterleiten zumindest in der URL die parameter zu sehen.


    Viele Grüße


    Timo

    Hi ho,


    das Thema mit "größeren" Datenmengen im LocalStorage zu speichern hatte ich auch schon öfters (Gerade was das entwickeln von z.B. BrowserGames angeht).

    Wenn man außer acht lässt, das der LocalStorage nur in der einen Browser-Instanz zu einer spezifischen URL vorhanden ist, haben wir noch das (bei den meisten Browsern) limit von ca. 5-10MB Daten. Wobei 5-10MB sehr viel Text sein kann.


    Um diese 5-10MB aber optimal zu nutzen, bietet es sich an den Text nochmals zu verkleinern. Wenn ich beide fragen von oben sehe, also wie das Datenformat aussehen könnte + wie man das dann am effizientesten in den Local Storage bekommt, nutze ich meist folgenden weg.


    1. Erstellen eines Save-Objekts welches dann properties enthält für die zu speichernden Daten:


    Code
    let saveObject = { meetings: [] }

    2. Jedes meeting dann wieder als Object anlegen (Klasse?)


    Code
    class MeetingSaveData{
        meetingName = "";
        meetingData = []; //wieder als objekt... 
    }


    3. Das speichern in LocalStorage kann dann am einfachsten per Json-Serialization gemacht werden (JSON.stringify / JSON.Parse).


    Die frage wegen des Platzes: Gerade beim Serialisieren von JS-Objekten mit den PropertyNames usw. sorgt für viel doppelten text den man eigentlich vermeiden möchte. Daher bietet sich Text-Kompression an. Der meist genutzt ist wohl LZString

    https://pieroxy.net/blog/pages/lz-string/index.html (den gibt es auch für sehr viele sprachen).


    D.h. das Speichern und laden sieht wie folgt aus:


    Code
    Speichern: 
    1. Speicherobjekt in JSON Serializieren
    2. JSON mit LZString komprimieren
    3. Komprimierter string in den LocalStorage schreiben. 
    
    Laden: 
    1. Komprimierter string aus dem LocalStorage lesen
    2. Komrimierter String mit LZString dekomprimieren
    3. JSON mit Deserializieren 


    Hoffe der Ansatz hilft weiter :).


    Grüße


    Timo

    Hi Viprit,


    As this is a German Forum, there are not many people who would give answers in English, also your question or problem hasn't anything to do with html.


    I guess you want to open the remote access dB in an local installed MS access, that's not so easy possible, imaging what would happen, if you could that easy launch applications through links on a website. But, it's possible:


    Fist solution: only possible with IE, you could use ActiveX to launch an application with parameter.


    Try Google to check the possibilities with ActiveX and also check how dangerous it is, to activate it.


    Second solution, I found here:

    https://stackoverflow.com/ques…ess-form-from-a-hyperlink.


    But again, that's browserspecific.


    Regards,


    Timo

    Es ist sinnvoll sich das anzueignen. Es ist auch nicht sonderlich schwieriger, wenn man das Prinzip verstanden hat. Ggf. schaut man sich dann auch gleich REST an um es "richtig" zu lernen.


    Das mit den Codezeilen müsste ich mal schauen (fällt mir immer etwas schwer, wenn ich das dann vmt. nicht selbst weiterverwenden kann).


    Viele Grüße


    Timo

    Sempervivum

    Da ist kein vorteil außer das es einfacher verständlich ist. Aber das ganze Konstrukt ist umständlich und ein Async-Call macht das jetzt nicht besser. Der "nachteil" wäre bei deiner Idee ja, das man nicht weiß ob die Sortierung wirklich am Server korrekt durchgeführt wurde, denn was er sieht ist dann ja nicht die neue Sortierung sonder die im Browser durchgeführte. Also müsste man danach zumindest noch ein Feedback haben wie die neue Sortierung aussieht und diese direkt per JS Rendern.


    Dann wären wir aber an dem Punkt, das die Sortierung komplett über Calls stattfinden kann und jedesmal ein Update an den Server geschickt werden kann, wenn ein Bild umsortiert wurde. Und dann ist der schritt nicht weit, gleich die Bilder per Ajax request zu laden und per JS zu rendern. Nur dieses übertragen per Ajax zu senden, hat in dem fall, null vorteil und löst das eigentliche problem nicht.


    Grüße


    Timo

    Hi KATERchen,


    habe mir nur kurz angeschaut wie du die Sortierung gelöst hast und da du geschrieben hast das es Funktioniert, dann denke ich da erstmal nicht weiter drüber nach ;).


    Das du hier Caching-Probleme bekommst, daran habe ich gar nicht gedacht, insgesamt ist das System nicht sonderlich schön. Die Cache-Header solltest du aber wenn, in die Datei einbauen in der Du die Bilder anzeigen lässt. Also in der mit der Ausgabe.


    Wenn ich dich richtig verstehe, funktioniert eigentlich alles, nur der Browser Cached (natürlich) die Bilder und zeigt dir die alten Versionen an.. hilft nur cache leeren oder hoffen das dein Browser die Cache-Anweisung der Webseite befolgt :P


    Schöner wäre es natürlich gewesen, die Sortierung / Anzeige direkt losgelöst vom Bildernamen zu bauen. Also z.B. eine Datei zu erstellen in der alle Bildnamen in der richtigen Sortierung drinstehen, diese auszulesen und in der Reihenfolge in der Seite ausgeben (wäre auch viel einfacher zu schreiben). Und wenn du hierfür JSON nutzt und file_get bzw. file_put_contents ist das auch mit dem Lesen und schreiben einfach.


    Aber ein Tipp für dein Bilder-caching noch.


    Du könntest in der Datei in der du die Bilder ausgibst, jedesmal einen neuen namen für die Bilder erstellen, dann kann der Browser das nicht cachen und da können wir einen kleinen Trick verwenden (denke das geht noch):



    PHP
    <li id="<?php echo $letter ?>" class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><img src="<?php echo $bilder_verzeichnis . $old_files_M[$i]."?".rand(1,99999) ?>"></li>

    Grüße


    Timo

    In meiner Korrektur waren keine zwei Echos und registrieren kann er nicht wenn ein error kommt... dann hast du die Anpassungen nicht übernommen. Habe sie extra markiert.


    Und dann solltest du noch prüfen ob PDO ein Fehler in der Abfrage hat.


    Grüße


    Timo

    Dein weg geht schon, kann es sein, das du lediglich in dem teil hier:

    Weil, es gibt "FALSE" zurück, wenn die sid nicht existiert. Damit willst du es ja beenden wenn ->fetch() false zurück gibt (keine reihe gefunden).



    Grüße


    Timo

    MariusB

    Ich werde versuchen mir das heute Abend genauer anzuschauen und durchzuspielen. Kann dir dann bestimmt helfen eine Lösung zu finden :)



    Arne Drews Das ist richtig, ich nutze es deswegen ja auch für hobby Projekte. Scherzhaft sage ich auch nur, das alle Programmiersprachen furchtbar sind und ich die nutze, welche einem am wenigsten furchtbar erscheinen. Das oben, ging auch eher wieder an die Standard-Konfiguration und das vorgehen das Rückgaben "mixed" sind mit einer Inkonsequenten (und zum teil schlecht dokumentierten) Logik. Zudem, fällt es mir schwer, kein konsequentes OOP und Enterprise Architekturen zu verwenden und PHP zwingt einem manchmal da Brüche vorzunehmen :). 60% meines heutigen codes sind in JS/TS und das mag ich weit weniger als PHP, dennoch mache ich damit fast alles.

    Arne Drews

    Ich bin mittlerweile im Enterprise Umfeld unterwegs, viel Azure, hauptsächlich .NET / Node.js. Wenn man sich an vieles dort gewöhnt hat und ich alle 2-3 Jahre mal wieder en PHP Projekt anfange, dann frage ich mich immer warum (mache es aber dennoch). Script sprachen vs. Application Sprachen.

    Arne Drews das ist auch richtig. Das mit Fetch ist eigentlich auch der Richtige weg. PHP und PDO sind furchtbar. Hab mir nebenher nochmal die Doku und einige eingräte auf StackOverflow angeschaut, scheint aber auch nicht das Stabilste Construct zu sein.


    MariusB Dann vermute ich eher, das du irgendwo in der Abarbeitung einen Logik Fehler hast. Ich kann frühestens heute Abend das ganze nochmal genau anschauen. Vielleicht kannst du den gesamten Code Posten und die Tabellen. Ich weiß was du versuchst und ich weiß auch das es heir einfachere oder Übersichtlichere Wege gibt das zu lösen.


    Grüße


    Timo

    Ich habe mir das Fetch auch nochmal angeschaut, tatsächlich liefert das bei keinem Ergebnis False zurück, d.h. im Standard, liefert Fetch bei einem SQL Fehler UND bei leerem Result ein False.


    Jetzt wäre meine Frage, was funktioniert denn nicht? Ist es bei deinem sid test immer false also kann sich jeder user auch mit existierender sid registrieren?

    Falls ja: dann solltest du mal prüfen ob dort sql error zurückgegeben werden. Falls nein, musst du glaube ich nochmal genauer erklären, was nicht funktioniert.


    Aber dennoch würde ich fetch nicht so benutzen (da ich es nicht so benutze und so wie Arne Drews geschrieben hat, nur mit dem ERRMODE_EXCEPTION) ist mir das bisher noch nicht aufgefallen. Ein RowCount zu machen um zu prüfen ob es existiert wäre die bessere alternative.


    Grüße


    Timo

    Hallo zusammen,


    zu dem Code: wenn ich es richtig sehe nutzt fetch() dies liefert laut der Docu nur im Fehlerfall ein False zurück, ansonsten (je nach Einstellung) das Resultset

    http://php.net/manual/en/pdostatement.fetch.php

    D.h. du solltest hier prüfen wie viele Einträge mit der sid zurückkommen.

    Dafür kannst du auch rowCount nutzen: http://php.net/manual/en/pdostatement.rowcount.php


    basti1012

    Auch dein vorgehen ist gängig, wenn wir prinzipiell davon ausgehen das es besser ist solches verhalten über Exceptions zu handeln (was es im bereich von OOP ist), dann würde hier nur ein Insert gestartet werden und dann eine PDOException gefangen.


    D.h. in MySql das Feld auf UNIQUE stellen und nach dem Insert per Try Catch prüfen



    Der Fehlercode 1062 wäre laut der List: https://www.fromdual.com/mysql…es-and-messages-1050-1099 Duplicate entry.

    ACHTUNG: Das ist Datenbank spezifisch, ich vermute man könnte den Fehler auch generisch finden, weiß gerade nur nicht wie.


    Grüße


    Timo

    Hi KATERchen,


    von der art des vorgehen kann es etwas kompliziert werden, das reine übertragen des arrays ist in deinem fall einfach (ohne ajax):


    Du machst in dein HTML ein Formular:

    HTML
    <form action='changeorder.php' method='POST'> 
    <input id='inputvalue' type='hidden' name='newsort' value='' />
    <input type='submit' value='Sortierung Speichern' />
    </form>


    Dann hast du einen Button um die Daten an PHP zu übertragen, die Werte müssen in den Value des <input name='newsort'...


    Das kannst du in deinem JS, an der stelle des console.log einbauen. Bsp (mit jquery):


    JavaScript
     $('input[name="newsort"]').val(productOrder);


    Beim Clicken auf "Sortierung Speichern" wird nun deine liste von Buchstaben "A,B,C,D,E" an php geschickt.


    In der PHP Datei muss du nun aus dem Text ein Array machen, den Inhalt bekommst du aus $_POST, mit explode, können wir einen string anhand eines zeichens in ein array umwandeln: http://php.net/manual/de/function.explode.php


    PHP
    <?php
    //php 7
    $sortArray = explode(",",$_POST['newsort']??"");
    
    //PHP 5
    $sortArray = isset($_POST['newsort'])?explode(",",$_POST['newsort']):array();
    
    var_dump($sortArray);


    Dann hättest du in $sortArray deine infos vom Formular.

    (Es gibt weit elegantere Wege das ganze zu lösen, aber mit den gegebenen Infos und dem bisher gezeigtem sollte das so am ehesten nachvollziehbar sein).


    Wenn du hier nun Ajax benutzen wolltest (ich sehe hier gerade keinen all zu großen nutzen, wenn man nicht vieles umbaut), dann kannst du dort ebenfalls einfach den wert des arrays per POST an das PHP-Skript schicken.


    Weist du denn wie du die Sortierung bzw. das umschreiben in PHP durchführen willst, anhand deines arrays?


    Der komplette code ist nicht getestet, tippfehler können enthalten sein.


    Grüße


    Timo