Sammeltopic für kurze Codingfragen

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Uuuuuuuuuuund wieder ein Problem:


    Leider lässt mich das BB nicht den Code hier reinschreiben, also ist er im Textfile im Anhang


    Ich bekomme ständig den Fehler, dass result1 in Reihe 35 kein Object ist. Das sollte es aber eigentlich sein, wegen der SELECT-Query davor, oder?


    Danke im Voraus.


    mfg,
    Lorekeeper Zinnia


    Edit: Habe einen zweiten Fehler, BB lässt mich den Code aber nicht hochladen...
    Skype-Kontakt steht am Profil, schreibt mich ansonsten einfach an, damit wir uns was ausmachen


    Edit No.2: Grund für den ersten Fehler gefunden, hat sich vorerst erledigt


    Edit No.3: @Leon As said, die Probleme haben sich erledigt.
    Aktuell versuch ich nur ein MVP rauszubringen, damits der Lehrer benoten kann.
    Der Rest kommt dann später


    Zum Insert: Wie genau? Antwort bitte auf der PW
    Den Rest habe ich in der Zwischenzeit schon gelöst
    ((Und as said, Eingabekontrollen kommen später aka nächste Woche))

  • Mehrere Dinge:

    • SQL Injections! Aktuell kann man deine Queries beinahe beliebig manipulieren, da du Benutzereingaben nicht kontrollierst oder maskierst. Passend dazu folgender Comic und die Beschreibung der nötigen Funktion in der PHP-Dokumention. Noch besser wären Prepared Statements, aber da solltest du dich noch weiter einarbeiten.
    • Zeile 35 ist im Anhang nur ein else.
    • $emparray und $emparray2 sollten vor der verwendung als Array-Variablen angelegt werden.
    • $emparray und $emparray2 sind Arrays von Datenbankresultaten. Du benutzt beide wie ein Array von Werten.
    • SQL-Queries in Schleifen sind keine gute Idee. Gerade ein INSERT lässt sich gut ohne Schleife lösen.
    • Die Logik in Zweile 31 scheint mir genau verkehrt. Es macht doch nur Sinn, einen neuen Charakter anzulegen, wenn eben noch kein Charakter mit den Eigenschaften existiert. Also müsste die Bedingung $result1->num_rows === 0 lauten.
    • EIn schließendes ?> am Ende der Datei ist nicht erforderlich. Stattdessen eine PHP-Datei mit einem Zeilenumbruch nach der letzten Codezeile abschließen. Dies gilt so nur für PHP-Dateien, die nur PHP-Code beinhalten.
    • Zeile 32 beinhaltet einen Fehler. Dort fehlt bei der Variablen $spieler das nötige Dollarzeichen ($) zu beginn.
    • Generell wäre es gut, wenn du deine SQL-Queries über mehrere Zeilen schreibst, dann sind diese lesbarer.
  • Bitte für neue Inhalte auch einen neuen Beitrag erstellen! Das hier ist ein Forum mit chronologischer Abfolge der Beiträge. Wenn man immer alles in zurückliegende Beiträge editiert, wird der Sinn eines Forums ad absurdum geführt.
    Das gilt auch für deine Anfrage, dir auf der Pinnwand zu posten. Das Thema kann auch für andere relevant sein. Andere können das auf deiner Pinnwand aber nicht finden. Deswegen gibt es ja Foren mit eigenen Unterbereichen zu bestimmten Themen.


    Zurück zum Thema: Deine Probleme sind vielleicht gelöst, aber wie ich angemerkt hab, hast du noch bei weitem mehr Probleme in deinem Script. So wie das aktuell steht kann man das eigentlich nirgends stehen lassen, da das wie ein offenes Scheunentor fungiert. Dass Eingabekontrollen erst nächste Woche kommen sollten, hast du noch nirgends geschrieben und ist auch eigentlich kein Argument. So ist das einfach eine Gefahr, das ist Fakt.


    Zum Thema multiple Insert: http://stackoverflow.com/a/6889087/1128707

  • Will eine Batch-Datei erstellen, die mich in der CMD.exe fragt, in wie vielen Sekunden ich einen Shutdown von Windows vornehmen will:


    @echo off
    set /p eingabe="Minuten bis zum Herunterfahren: "
    set /a sekunden=%eingabe%*60
    shutdown -s -t %sekunden%
    exit


    Habe diese Befehlszeilen aus einem inzwischen eingestellten IT-Magazin entnommen, funktioniert bei mir unter Win10 x64 nur nicht. Ist es möglich, dass es am System liegt, oder müsste hier irgendwas angepasst werden? Nach Eingabe einer Minutenzahl im Eingabefenster tut sich nichts.

  • Ja, funktioniert, danke. Den Pfad zum System32-Ordner muss man glücklicherweise nicht angeben; das System zieht sich das File offenbar ohnehin aus dem Verzeichnis. Dachte unterschwellig, es ließe sich die Dateierweiterung weglassen.


    Was man hingegen defintiv weglassen kann, ist das @echo off am Anfang. Braucht kein Mensch.

  • Ja, das ist wahr; bei diesem File zum Beispiel verhindert es auf meiner Win10-Testmaschine, dass in der Kommandozeile der Dateipfad angezeigt wird. Entbehrlich für die Funktionalität ists dennoch. Ein "exit" am Ende übrigens auch; funktionieren tut es auch ohne.

  • Heyho, bin gerade dabei mich in das Programmieren mit Java einzufinden. Habe jetzt auch den freien Kurs von codecademy dazu absolviert, allerdings werden da nur die grundlegenden Werkzeuge an die Hand gegeben. Für weitere Kurse muss man halt eine monatliche Gebühr zahlen. Da mir die Art, wie man dort lernt doch sehr zusagt, überlege ich derzeit auch, ob ich diese Gebühr nicht tatsächlich zahlen will. Aber vielleicht kennt ja jemand ähnliche Alternativen, die kostenfrei und effektiv sind? Dann könnte ich mir das Geld sparen. x)

  • Galileo Open Books reichen imo aus (kostenlos online einzusehen). Wichtig sind eh nur die Grundlagen. Den Rest kann man sich durch Google und die Dokumentation aneignen, wenn man es braucht. Abgesehen davon gab es mit der Version 8 von Java einige größere Updates, die je nach Dozent des Kurses ggf nicht oder nur veraltete Praktiken gelehrt werden:
    - Lambda-Ausdrücke, für anonyme Funktionen
    - JavaFX, als neue, mächtigere Grafik-Engine, die AWT (uralt) und Swing (bis dahin das übliche) ablöst
    - eine neue Zeit-API; die anderen, bisdahin verwendeten, müssten aktuell als deprecated gekennzeichnet sein und mit zukünftigen Updates entfernt werden


    Ist natürlich nur meine Meinung und je nach Lehrplan könnten interessante Themen dabei sein, und wenn dir so das lernen leichter fällt, lohnt sich vllt trotzdem der Kurs.

  • Den Rest kann man sich durch Google und die Dokumentation aneignen, wenn man es braucht.

    Ist so ca. das wichtigste. Ne Sprache lernt man durch Anwendung am besten, das ist in der Kommunikation und in der Programmierung ziemlich gleich.
    Die Basis muss man sich aneignen, danach bringt einen Praxis besser weiter als Bücher zu wälzen.

  • Ist so ca. das wichtigste. Ne Sprache lernt man durch Anwendung am besten,

    Deswegen find ich das Lernkonzept von Codecademy ja so gut, da es interaktiv von statten geht. Man bekommt Stück für Stück die Sachen beigebracht und probiert sie direkt in 'nem Codeeditor aus, der einem auch sagt, wenn etwas falsch ist.


    Aber dann versuch ichs jetzt erstmal mit der Insel. Danke für den Tipp. :)

  • So bin jetzt dabei Java zu lernen.


    Unter Anderem wird ein Negativ Beispiel für die Durchlauf Bedingungen von While-Schleifen genannt, wenn man zwei Werte mittels == vergleicht (also zb i == 3)


    Ich kann aber nicht ganz nachvollziehen, weshalb die unten genannte Schleife zu einer Endlosschleife führt. Überseh ich irgendeine Mechanik?




    Ich komme zwar, wenn ich den oben genannten Code ausführe ebenfalls zu einer Endlosschleife, aber warum ist das so? Wenn ich auf dem Papier zu 0 immer wieder 0.1 hinzu addiere, komme ich doch irgendwann auch auf 1.0, aber doch niemals auf solch seltsam lange Nachkommastellen. Oo
    Hoffe ihr könnt mir da mal das Brett vorm Kopf wegnehmen. :wacko:

  • du kannst den dort auftretenden Fehler mit der etwas simplereren Rechnung 10/3 vergleichen. das exakte Ergebniss dieser Rechnung kann nicht auf x Stellen ohne Zuhilfenahme eines Periode-Zeichens aufgeschrieben werden.


    um trotz der schon Max erwähnten Rundungsfehler eine Schleife zu nutzen,empfiehlt es sich, wo es möglich ist mit int oder long zu arbeiten und in der Schleife selbst dann durch division den Zählwert anzupassen. Wenn das nicht geht und es egal ist, ob die Schleife ggf je nach Architektur unterschiedlich oft oder ein unerwartetes weiteres mal durchlaufen wird (weil z.B. durch den Rundungsfehler das Ergebnis "zufällig" (ist auf der gleichen Architektur eigentlich immer gleich) gerade etwas zu klein ist) solltest du mit >= oder <= arbeiten.

  • Folgendes:
    Ich habe ein Programm. Das Kopiert HTML-Abschnitte in ein neues HTML zusammen. Alles easy peasy. Macht auch praktisch keine Probleme.
    Aber jetzt habe ich drei HTML Dateien, bei denen macht er es nicht.
    Ich kopiere die zusammen und lasse eine Prüfung, die Redundante Dokumente rauswerfen soll, durchlaufen und dann... Stürzt "Python.exe" ab.
    Keine Fehlermeldung, kein gar nichts, Python.exe stürzt ab.


    Aber nur bei den drei Dateien.
    Debugging schmeißt nichts raus.
    Es macht keinen Sinn.
    Das ganze stürzt an einer Stelle ab, wo nichts ist, außer eine Print-Funktion, die ein paar Statusmeldungen gibt.
    Im Debugging sind auch keine Dateien mehr geöffnet oder irgendetwas, dass so ein Problem auslösen könnte.
    Es stürzt einfach ab.
    Aber nur bei drei Dateien.
    Wenn ich die drei aus den Dateien, aus denen er sich die Snippets holt, rausnehme, ist alles wieder tutti.
    Die Sache ist: An der betroffenen Stelle wird nicht einmal wirklich etwas aus den Dateien bearbeitet. Und der Code in den dateien ist Fehlerfrei. Habe es extra noch einmal kontrollieren lassen.
    Es macht echt für mich logisch gerade keinen Sinn. :(


    Und da ich das ganze nicht genauer beschreieben kann, kann ich auch nicht auf StackOverflow fragen.

  • Die Dateien darf ich leider nicht posten, da sie unter geheimhaltung stehen. Das ist hier das große Problem. Deswegen geht es ja auch mit Stackoverflow nicht so leicht. :( Auch den gesamten Code darf ich nicht posten.


    Ich kann allerdings beschreiben, was im Code passiert und was mir der Debugger dazu sagt:


    Also, das Programm bearbeitet automatisiert halt Abschnitte aus XML oder nach belieben auch HTML. Mithilfe von lxml.
    Dabei hat es eine Verwaltungsfunktion main().
    Diese ruft nacheinander alles wichtige auf. Unter anderem auch eine Funktion in der folgendes passiert:

    • Eine Datei wird geöffnet
    • Eine neue, vorher schon angelegte Datei* wird geöffnet
    • Es wird geprüft, was bisher in die neue Datei kopiert wurde
    • Es wird ein neuer Abschnitt mit Anker angelegt
    • Darunter wird alles nicht übernommene in einen Block gepackt
    • Das ganze wird danach auf korrekte Formatierung geprüft
    • Danach wird es geschrieben und gespeichert
    • Eine kurze Benachrichtigung wird an die Konsole geschickt
    • Es geht zurück zur Hauptfunktion


    Wie gesagt: Ich habe Debugging laufen lassen und laut dem geht das Programm nach der Funktion wieder zur Hauptfunktion zurück. Aber bevor der Debugger dann in die nächste Zeile "print Statusmeldung" geht... Kommt eben der Absturz.
    Wohlgemerkt: Nicht innerhalb dieser Funktion, sonder danach, wenn die Funktion schon abgehakt wurde, wenn man so möchte.


    Zur Info: Ich habe das Programm eigentlich im groben für XML geschrieben, nutze es aktuell teilweise für HTML, bei sämtlichen anderen Dateien, die damit bearbeitet werden habe ich kein Problem. Aber die drei betreffenden Dateien haben auch keine Gemeinsamkeit, außer, dass sie in zwei verschiedenen Versionen existieren (eine alte und eine neue). Er bearbeitet allerdings damit immer nur eine auf einmal, weshalb ich nicht sehe, wie es zum Abstürz führen kann.


    Mir würde es allgemein schon reichen einmal eine Antwort zu haben dazu, was Gründe dafür sein können, dass Python.exe abstürzt, anstelle dessen einen Error auszugeben, weil das macht gerade für mich so gar keinen Sinn und macht es leider auch gerade schwer nach einer Lösung zu suchen, weil "Python.exe Crash" tolle, nichtssagende Ergebnisse liefert. (Ein solcher wird weder in die Konsole geschrieben, noch im Runtime Log angezeigt. Python schmiert einfach ohne irgendein Wehklagen ab.)

  • Ich vermute spontan, dass es mit den zwei Versionen zusammenhängt. Vielleicht kommt es da zu einer Zugriffsverletzung im weitesten Sinne, egal ob jetzt auf eine der Dateien, falsch zugewiesenen Speicher oder sonstwas. Wie wird denn zwischen den Versionen unterschieden?