Programmiersprache – die neusten Beiträge

JavaScript: Wie kann ich eine große Tabelle schneller sortieren?

Hallo zusammen,

ich habe eine große Tabelle in meiner ASP.NET Core Razor Pages Anwendung, die ich clientseitig mit JavaScript sortieren möchte.

Allerdings dauert die Sortierung bei einer großen Datenmenge zu lange, und ich suche nach einer performanten Lösung.

Meine aktuelle Implementierung:

Ich nutze Array.sort() und vergleiche Strings und Zahlen entsprechend, das funktioniert aber das ist nicht effizient genug.

Besonders wenn die Tabelle viele Zeilen (z. B. >10.000) hat, wird die Sortierung langsam.

Meine Anforderungen:

✅ Die Sortierung muss komplett in JavaScript (clientseitig) erfolgen

✅ Sie muss sowohl Texte (Strings mit Umlaute, Sonderzeichen, etc.) als auch Zahlen (inkl. Währungen mit €) schnell sortieren

✅ Die Tabelle wird nachträglich dynamisch mit Daten befüllt (also keine initiale Sortierung im Backend möglich)

✅ Die Lösung soll sehr schnell auch bei großen Datenmengen sein

Ich habe bereits probiert:

❌ Array.sort() (wird langsam bei vielen Zeilen)

❌ localeCompare() (korrekt für Strings, aber langsam)

❌ TypedArrays für Zahlenwerte (bringt nicht genug Speed)

Gibt es eine bessere Möglichkeit, eine HTML-Tabelle performant zu sortieren?

Vielleicht mit Web Worker, einer anderen Datenstruktur oder anderen Algorithmen?

oder gibt es andere Funktionen/Möglichkeiten, die ich noch probieren kann?

hier mein aktueller Ansatz:

Tabelle:

    <div class="col-lg-9 col-md-7 col-12">
      <div class="table-container">
        <table class="table-modern table-hover w-100" id="statistikTable">
          <thead>
            <tr>
              <th onclick="sortTable(0, this)">Datum <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
              <th onclick="sortTable(1, this)">PID <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
              <th onclick="sortTable(2, this)">Nachname <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
              <th onclick="sortTable(3, this)">Vorname <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
              <th onclick="sortTable(4, this)">Rechnungsnetto <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
              <th onclick="sortTable(5, this)">Belegnummer <img class="sort-icon" src="/img/dgvsort.png" style="display: none;"></th>
            </tr>
          </thead>
          <tbody>
            @if (Model.StatistikData != null && Model.StatistikData.Rows.Count > 0)
            {
              foreach (DataRow row in Model.StatistikData.Rows)
              {
                <tr>
                  <td>@(((DateTime)row["Datum"]).ToString("dd.MM.yyyy"))</td>
                  <td>@row["PID"]</td>
                  <td>@row["KundeNachname"]</td>
                  <td>@row["KundeVorname"]</td>
                  <td>@Convert.ToDecimal(row["Rechnungsnetto"]).ToString("N2")</td>
                  <td>@row["Belegnummer"]</td>
                </tr>
              }
            }
            else
            {
              <tr>
                <td colspan="6" class="text-center">Keine Daten gefunden</td>
              </tr>
            }
          </tbody>
        </table>
      </div>
    </div>

meine sort Funktion:

  function sortTable(columnIndex, header) {
    const table = document.getElementById("statistikTable");
    const tbody = table.tBodies[0];
    const rows = Array.from(tbody.rows);
    const ascending = table.dataset.sortOrder !== "asc";

    const isNumericColumn = !isNaN(parseFloat(rows[0].cells[columnIndex].textContent.replace("€", "").replace(",", ".").trim()));

    let sortedRows;
    if (isNumericColumn) {
      sortedRows = rows
        .map(row => ({
          element: row,
          value: parseFloat(row.cells[columnIndex].textContent.replace("€", "").replace(",", ".").trim()) || 0
        }))
        .sort((a, b) => ascending ? a.value - b.value : b.value - a.value);
    } else {
      const collator = new Intl.Collator("de", { numeric: true, sensitivity: "base" });
      sortedRows = rows
        .map(row => ({
          element: row,
          value: row.cells[columnIndex].textContent.trim()
        }))
        .sort((a, b) => ascending ? collator.compare(a.value, b.value) : collator.compare(b.value, a.value));
    }

    const fragment = document.createDocumentFragment();
    sortedRows.forEach(({ element }) => fragment.appendChild(element));
    tbody.appendChild(fragment);

    table.dataset.sortOrder = ascending ? "asc" : "desc";

    updateSortIcons(header, ascending);
  }

  function updateSortIcons(header, ascending) {
    document.querySelectorAll(".sort-icon").forEach(icon => {
      icon.src = "/img/dgvsort.png";
      icon.style.display = "inline";
    });

    const icon = header.querySelector(".sort-icon");
    if (icon) {
      icon.src = ascending ? "/img/dgvsortup.png" : "/img/dgvsortdown.png";
      icon.style.display = "inline";
    }
  }

Freue mich über jede Hilfe! 😊

HTML, Webseite, programmieren, CSS, JavaScript, HTML5, Programmiersprache, Webdesign, Webentwicklung, Frontend

C Programm funktioniert nicht Richtig?

Es geht um folgenden Code:

#include <gtk/gtk.h>
#include <string.h>
// Globale Variablen für die UI-Elemente
GtkWidget *search_entry;
GtkWidget *treeview;
GtkListStore *list_store;
GtkTreeModel *filter_model;
// Beispiel-Lagerbestand
typedef struct {
  const gchar *artikelnummer;
  const gchar *name;
  int bestand;
} Lagerartikel;
// Beispielhafte Lagerartikel
Lagerartikel lager[] = {
  {"1001", "Laptop", 15},
  {"1002", "Maus", 50},
  {"1003", "Tastatur", 30},
  {"1004", "Monitor", 10},
  {"1005", "Drucker", 5},
  {"1006", "USB-Stick", 100}
};
const int lager_size = sizeof(lager) / sizeof(lager[0]);
// Filterfunktion für die Suche
static gboolean filter_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) {
  gchar *artikelnummer = NULL;
  gtk_tree_model_get(model, iter, 0, &artikelnummer, -1);
  if (artikelnummer == NULL) {
    return TRUE;
  }
  GtkWidget *search_entry = GTK_WIDGET(data);
  const gchar *search_text = gtk_entry_get_text(GTK_ENTRY(search_entry));
  if (search_text == NULL) {
    search_text = "";
  }
  gboolean visible = TRUE;
  if (strlen(search_text) > 0) {
    visible = g_strrstr(artikelnummer, search_text) != NULL;
  }
  g_free(artikelnummer);
  return visible;
}
// Aktualisiert den Filter, wenn sich der Suchtext ändert
static void on_search_changed(GtkSearchEntry *entry, gpointer user_data) {
  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(filter_model));
}
// Erstellt die Lagerbestand-Tabelle
static void setup_treeview(GtkBuilder *builder) {
  treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview"));
  // Spalten für die TreeView erstellen
  GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
  GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes("Artikelnummer", renderer, "text", 0, NULL);
  GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", 1, NULL);
  GtkTreeViewColumn *col3 = gtk_tree_view_column_new_with_attributes("Bestand", renderer, "text", 2, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col1);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col2);
  gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col3);
  // ListStore erstellen und Daten füllen
  list_store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
  for (int i = 0; i < lager_size; i++) {
    GtkTreeIter iter;
    gtk_list_store_append(list_store, &iter);
    gtk_list_store_set(list_store, &iter, 0, lager[i].artikelnummer, 1, lager[i].name, 2, lager[i].bestand, -1);
  }
  // Filtermodell erstellen
  filter_model = gtk_tree_model_filter_new(GTK_TREE_MODEL(list_store), NULL);
  gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter_model), filter_func, search_entry, NULL);
  gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), filter_model);
}
// Hauptfunktion
int main(int argc, char *argv[]) {
  gtk_init(&argc, &argv);
  // Glade-Datei laden
  GtkBuilder *builder = gtk_builder_new_from_file("part1.glade");
  // Widgets abrufen
  GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
  search_entry = GTK_WIDGET(gtk_builder_get_object(builder, "search_entry"));
  // Signal für die Suche
  g_signal_connect(search_entry, "search-changed", G_CALLBACK(on_search_changed), search_entry);
  g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
  // Setup für die TreeView
  setup_treeview(builder);
  // Fenster anzeigen
  gtk_widget_show_all(window);
  gtk_main();
  return 0;
}

Ich benutze Glade um mit c ein interface zu erstelle.
Hier sollen die definierten Lagerartikel nach den Artikelnummern gesucht werden. Wenn man etwa 1002 eingibt bleibt nur 1002 übrig. wenn ich jetzt aber die 2 wegnehme, bleibt nur 1002 und 1003 übrig, obwohl alle angezeigt werden sollten.

Jetzt ist meine Frage, wie ich das beheben kann.
Auch ist folgendes: Bei 1003 zu 100 kommt 1003, 1004, 1005. Bei 1004 zu 100 kommt 1004, 1005, 1006, genau das gleiche bei 1005 und 1006. Nur bei 1001 zu 100 kommt alles

Programmiersprache, C (Programmiersprache)

PHP Fehler?

Moinsen Leude,

Ich bin gerade etwas am verzweifeln. Ich arbeite noch nicht so lange mit php und stoße die ganze zeit immer wieder auf den gleichen fehler:

Warning: Undefined array key "password" in C:\xampp\htdocs\website\metropolisx\index.php on line 21

Hier die PHP-Datei um die es geht:

<?php
session_start();
require_once "includes/config.php"; // Datenbankverbindung

$error = "";

// Nur fortfahren, wenn das Formular per POST abgesendet wurde
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Überprüfen, ob die Felder 'username' und 'password' in $_POST gesetzt sind
    $username = isset($_POST['username']) ? $_POST['username'] : '';
    $password = isset($_POST['password']) ? $_POST['password'] : '';

    // Überprüfen, ob beide Felder nicht leer sind
    if (!empty($username) && !empty($password)) {
        // Datenbankabfrage, um den Benutzer zu finden
        $stmt = $pdo->prepare("SELECT * FROM accounts WHERE USERNAME = ?");
        $stmt->execute([$username]);
        $user = $stmt->fetch();

        // Wenn der Benutzer existiert und das Passwort korrekt ist
        if ($user && password_verify($password, $user['password'])) {
            $_SESSION['user'] = $user['username'];
            // Weiterleitung zum Dashboard
            header("Location: pages/dashboard.php");
            exit();
        } else {
            $error = "Falsche Anmeldedaten!";
        }
    } else {
        // Fehlermeldung, wenn eines der Felder leer ist
        $error = "Bitte Benutzername und Passwort eingeben!";
    }
}
?>

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login | MetropolisX</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>

<div class="login-container">
    <h2>MetropolisX - Login</h2>

    <?php if ($error): ?>
        <p class="error"><?php echo htmlspecialchars($error); ?></p>
    <?php endif; ?>

    <form method="post">
        <input type="text" name="username" placeholder="Benutzername" required>
        <input type="password" name="password" placeholder="Passwort" required>
        <button type="submit">Anmelden</button>
    </form>
</div>

</body>
</html>

Wenn einer von euch weiß warum ich diesen fehler die ganze zeit kriege, gebt gerne bescheid. Danke schonmal im vorraus :D

SQL, HTML, Webseite, Code, Datenbank, MySQL, PHP, Programmiersprache, Webdesign, Webentwicklung

VS-Code findet Datei zum compilieren im Pfad nicht obwohl der Pfad der im Dateimanager kopierte Pfad zur Datei ist?

Hi, ich lern gerade Programmieren in VS-Code und habe mir als erste Sprache C ausgesucht. Ich versuche jetzt seit gut zwei Tagen, mein erstes kleines miniprogramm was schon automatisch da steht, zum laufen zu bringen, allerdings klappt da etwas nicht, vscode findet nähmlich die datei im angegeben Pfad nicht und spuckt mir immer wieder diese Fehlermeldung im Ausgabe Bereich aus (Bild1) wenn ich es versuche mit code runner zu starten

[Running] cd "c:\Users\LaughBoy\programmieren mit c\" && gcc zweiter_versuch.c -o zweiter_versuch && "c:\Users\Jojo\programmieren mit c\"zweiter_versuch

gcc: error: CreateProcess: No such file or directory

vorher hab ich schon noch den complier MinGW runtergeladen, weil vorher der complier komplett gefehlt hat, damit habe ich dann versucht die datei zu kompilieren und zwar im Terminalbereich mit powershell, da bekomm ich aber immer diese Fehlermeldung:

PS C:\Users\Jojo\programmieren mit c> gcc -o erster_code "C:\Users\Jojo\programmieren mit c\erster_code"  

gcc.exe: error: C:\Users\Jojo\programmieren mit c\erster_code: No such file or directory

gcc.exe: fatal error: no input files

compilation terminated.

[Done] exited with code=1 in 0.074 seconds

ich bin mittlerweile komplett verwirrt und freue mich über Hilfe ich probier auch gerne was anderes von ganz vorne aus falls es an MinGW liegt, hauptsache ich kann endlich Anfangen mit C zu programmieren. Danke im vorraus.

Lg. LaughBoy

Bild zum Beitrag
compiler, Code, Programmiersprache, C (Programmiersprache), Visual Studio Code

JS Fehlermeldung Hilfe: null is not an object evaluating…?

Ich brauche Hilfe dabei: mir wird dieser Fehlermeldung angezeigt…es soll das Volumen des 2. Körpers ausrechnen aber das Ergebnis erschein nicht und die Fehler meldung taucht auf:

//Javascript
var input1 = document.getElementById("input1");
var input2 = document.getElementById("input2");
var btn = document.getElementById("btn");
var erw_input = document.getElementById("erw-input");
var erw_input2 = document.getElementById("erw-input2");
var volumen_out = document.getElementById("volumen-out");
var volumen_out2 = document.getElementById("volumen_out2");


const koerper = ["zylinder", "kegel", "kugel", "würfel", "quader", "pyramide"];


var foundInput1 = koerper.includes(input1.value.toLowerCase());

btn.addEventListener("click", function() {
  if (koerper.includes(input1.value.toLowerCase())) {
    for (var i1 = 0; i1 < koerper.length; i1++) {
      if (koerper[i1] == input1.value.toLowerCase()) {
        if (koerper[i1] == koerper[0]) {
          zylinder();
        }
        if (koerper[i1] == koerper[1]) {
          kegel();
        }
        if (koerper[i1] == koerper[2]) {
          kugel();
        }
        if (koerper[i1] == koerper[3]) {
          wuerfel();
        }
        if (koerper[i1] == koerper[4]) {
          quader();
        }
        if (koerper[i1] == koerper[5]) {
          pyramide();
        }
      }
    }
  } else {
    console.log("falsch");
  }

  if (koerper.includes(input2.value.toLowerCase())) {
    for (var i2 = 0; i2 < koerper.length; i2++) {
      if (koerper[i2] == input2.value.toLowerCase()) {
        if (koerper[i2] == koerper[0]) {
          zylinderZwei();
        }
        if (koerper[i2] == koerper[1]) {
          kegelZwei();
        }
        if (koerper[i2] == koerper[2]) {
          kugelZwei();
        }
        if (koerper[i2] == koerper[3]) {
          wuerfelZwei();
        }
        if (koerper[i2] == koerper[4]) {
          quaderZwei();
        }
        if (koerper[i2] == koerper[5]) {
          pyramideZwei();
        }
      }
    }
  } else {
    console.log("falsch");
  }
  
});


function kugel() {
  erw_input.innerHTML = "<h4>Radius 1:</h4> " + "<input required type='text' placeholder='Radius Kugel' id='rKug'>"
}

function kugelZwei() {
  erw_input2.innerHTML = "<h4>Radius 2:</h4> " + "<input required type='text' placeholder='Radius Kugel' id='rKug2'>";
}


  if (input1.value.toLowerCase() == koerper[2]) {
    var erg_kug = 4 / 3 * Math.PI * Math.pow(rKug.value, 3);
    volumen_out.innerHTML = "Volumen 1 - Kugel: <br>" + "V = 4 &#247; 3 &#183; &#960; &#183; r&#179; <br>" + "V = 4 &#247; 3 &#183; &#960; &#183; " + rKug.value + "&#179; <br>" + "V = " + erg_kug.toFixed(2) + " cm&#179";
  }

    if (input2.value.toLowerCase() == koerper[2]) {
      var erg_kug2 = 4 / 3 * Math.PI * Math.pow(rKug2.value, 3);
      volumen_out2.innerHTML = "Volumen 2 - Kugel: <br>" + "V = 4 &#247; 3 &#183; &#960; &#183; r&#179; <br>" + "V = 4 &#247; 3 &#183; &#960; &#183; " + rKug2.value + "&#179; <br>" + "V = " + erg_kug2.toFixed(2) + " cm&#179";
    }

    Den Rest habe ich rausgekürzt, da es sonst zu lang wäre. Danke schonmal im Vorraus !

Bild zum Beitrag
Webseite, JavaScript, Code, Programmiersprache, Webentwicklung

Frage zu Responsive Nav, Burger Button?

Hi, also ich verstehe hier folgendes nicht :

Warum das Hamburger Symbol bei bei zutreffender Mediaquerry "@media (max-width: 768px)", angezeigt wird, denn schließlich ist doch der ".menu-toggle" auf "display: none;" ???

Eventuell verstehe ich es richtig, dass durch ".classList.toggle('nav-active');" in der "function toggleMenu()" irgendwie der Burger aktiviert wird, durch eine versteckte VanillaJS Funktion, aber wie genau?

Danke

LG

<!DOCTYPE html>
<html lang="de">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Meine Website</title>
   <style>
       * {
           margin: 0;
           padding: 0;
           box-sizing: border-box;
           font-family: Arial, sans-serif;
       }
       body {
           display: flex;
           flex-direction: column;
           align-items: center;
       }
       .navbar {
           width: 100%;
           background-color: #333;
           display: flex;
           justify-content: space-between;
           align-items: center;
           padding: 15px;
       }
       .logo {
           color: white;
           font-size: 24px;
           font-weight: bold;
       }
       .nav-links {
           list-style: none;
           display: flex;
       }
       .nav-links li {
           margin: 0 15px;
       }
       .nav-links a {
           color: white;
           text-decoration: none;
           font-size: 18px;
       }
       .menu-toggle {
           display: none;
           font-size: 24px;
           color: white;
           cursor: pointer;
       }
       @media (max-width: 768px) {
           .nav-links {
               display: none;
               flex-direction: column;
               background-color: #333;
               position: absolute;
               top: 60px;
               right: 0;
               width: 100%;
               text-align: center;
           }
           .nav-links li {
               padding: 10px 0;
           }
           .menu-toggle {
               display: block;
           }
           .nav-active {
               display: flex;
           }
       }
   </style>
</head>
<body>
   <nav class="navbar">
       <div class="logo">Mein Logo</div>
       <span class="menu-toggle" onclick="toggleMenu()">&#9776;</span>
       <ul class="nav-links">
           <li><a href="#">Home</a></li>
           <li><a href="#">Über</a></li>
           <li><a href="#">Leistungen</a></li>
           <li><a href="#">Kontakt</a></li>
       </ul>
   </nav>
   <script>
       function toggleMenu() {
           document.querySelector('.nav-links').classList.toggle('nav-active');
       }
   </script>
</body>
</html>


ps:Ok hat sich geklärt...ich depp habe übersehen das die unteren css eigenschaften ja in der Mediaquerry drinne sind
HTML, Webseite, CSS, JavaScript, HTML5, Programmiersprache, Webdesign, Webentwicklung

Bitget Order Bot?

Moin, ich möchte gerne einen python Bot bauen, welcher für mich Future Postionen auf Bitget eröffnet.
Ich bekomme nur leider immer den gleichen fehler und weiß nicht wie ich das umgehen soll. Kann mir da jemand weiterhelfen?
Fehler:
Versuch 1 von 10...

Fehler beim Platzieren der Order:

{
  "code": "40009",
  "msg": "sign signature error",
  "requestTime" :1738611623938,
  "data": null
}

Warte 30 Sekunden vor dem nächsten Versuch...

Code:

import requests
import time
import hmac
import hashlib
import configparser
import json
# Lade die Konfiguration aus der config.ini Datei
config = configparser.ConfigParser()
config.read('config.ini')
api_key = config['bitget']['api_key']
secret_key = config['bitget']['secret_key']
passphrase = config['bitget']['passphrase']
# Bitget API Endpoints
BASE_URL = 'https://api.bitget.com'
END_POINT = '/api/mix/v1/order/placeOrder'
# Funktion zur Generierung der Signatur
def generate_signature(secret_key, message):
  return hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
# Funktion zur Erstellung der Headers
def create_headers(api_key, secret_key, passphrase, request_path, body):
  timestamp = str(int(time.time() * 1000))
  message = timestamp + request_path + json.dumps(body, separators=(',', ':')) # Wichtig: Keine Leerzeichen im JSON
  signature = generate_signature(secret_key, message)
  headers = {
    'Content-Type': 'application/json',
    'ACCESS-KEY': api_key,
    'ACCESS-SIGN': signature,
    'ACCESS-TIMESTAMP': timestamp,
    'ACCESS-PASSPHRASE': passphrase
  }
  return headers
# Funktion zum Kauf von Bitcoin im Futures-Markt
def buy_bitcoin_futures(amount_usdt):
  request_path = END_POINT
  body = {
    "symbol": "BTCUSDT_UMCBL",
    "marginCoin": "USDT",
    "side": "open_long",
    "orderType": "market",
    "price": "0",
    "size": str(amount_usdt),
    "timeInForce": "normal"
  }
  headers = create_headers(api_key, secret_key, passphrase, request_path, body)
   
  response = requests.post(BASE_URL + request_path, headers=headers, json=body)
   
  if response.status_code == 200:
    print("Order erfolgreich platziert:", response.json())
    return True # Erfolg
  else:
    print("Fehler beim Platzieren der Order:", response.text)
    return False # Fehler
# Hauptfunktion
if __name__ == "__main__":
  amount_usdt = 5 # 5 USDT
  max_retries = 10 # Maximale Anzahl von Versuchen
  retry_delay = 30 # Verzögerung zwischen den Versuchen in Sekunden
  for attempt in range(max_retries):
    print(f"Versuch {attempt + 1} von {max_retries}...")
    success = buy_bitcoin_futures(amount_usdt)
     
    if success:
      break # Erfolg, Schleife beenden
    else:
      print(f"Warte {retry_delay} Sekunden vor dem nächsten Versuch...")
      time.sleep(retry_delay) # Warte 30 Sekunden
  if not success:
    print("Maximale Anzahl von Versuchen erreicht. Order konnte nicht platziert werden.")
Bot, Code, Programmiersprache, Python, Python 3, Bitget

wie übergebe ich Daten mit Input?

Die Anwendung von Input ist eigentlich klar. Die gestellte Frage soll aber auf mein Problem hinweisen denn im dargestellten Fall habe ich Probleme.

if ($sichern == true){
        for($i=1; $i<4; $i++){
            echo "<input type='hidden' name='vonMod[$i]' value='$vonMod[$i]'>";
            echo "<input type='hidden' name='bisMod[$i]' value='$bisMod[$i]'>";
        }
        echo "<p align='center'><br><input class='backa' type='button' value='nein, zur&uuml;ck' onclick='history.back()'>&nbsp;&nbsp;";
        echo "<input class='speichern' type='submit' name='speichern' formaction='speichern.php' value='ja, speichern'><p>&nbsp;</p>";
    }else{
        echo "<p align='center'><br><input class='backa' type='button' value='nein, zur&uuml;ck' onclick='history.back()'>&nbsp;&nbsp;";
        echo "<input class='speichern' type='submit' name='kontrolle' formaction='termine_change.php?sichern' value='ja, speichern'><p>&nbsp;</p>";
    }

Mit der Datenweitergabe via Input name='kontrolle' gibt es keine Probleme!

Die Datenweitergabe mit name='speichern' funktioniert nicht! Die if-Abfrage nach "$sichern == true" wurde überprüft und wird ausgeführt.

Verschiebe ich den Input name='speichern' ausserhalb der Abfrage "$sichern == true" wird der Befehl ausgeführt.

Was kann ich machen, damit ich nach der Abfrage "$sichern == true" den Input-Befehl ausführen kann. Bei der Probiererei hatte ich zu dem Input noch ein onclick mit einem Alert-fenster angehängt. Alert funktionierte, nur input nicht!

Webseite, PHP, Programmiersprache

Warum wird das Spielfeld nach der Bauernbewegung so komisch ausgegeben?

Ich wäre jedem einzelnen von euch mega dankbar, wenn ihr mir helfen könntet!

Hallo zusammen,

wir haben die Aufgabe bekommen das Spiel Schach in einer sehr abgespeckten Variante zu implementieren. Das heißt, so wie mein Code momentan aussieht, ist er an sich fertig von den Funktionalitäten. Jedoch ergeben sich zwei Probleme: Einerseits das sich bei einem JUnit-Test der Springer vom Feld [4][4] nicht auf [6][5] bewegen lässt und das die Bauernbewegung sehr schlecht und unregelmäßig funktioniert.

Das bedeutet, dass alle schwarzen Bauern sich auf [2][0] bewegen und alle weißen Bauern, die sich unten befinden, sollen sich nicht bewegen lassen. Außer dem [6][6], der sich dann auf das Feld [5][0] bewegt.

Mein Code ist grundsätzlich so aufgebaut, das es eine ChessPiece-Superklasse gibt, von denen die einzelnen Spielfigurenklassen erben und eine ChessBoard-Klasse, die das Feld abbildet und Figuren bewegt.

Ich bin seit zwei Tagen am Verzweifeln, weil weder ich, noch KI mir helfen konnte. Deswegen wäre ich unglaublich dankbar, wenn einer von euch mich erlösen könnte.

Ich versuche die wichtigsten Implementierungen in den Bildern darzustellen.

Die main-Methode:

Erstellen der Felder:

Die Methode soll grob sagen, ob eine Bewegung true oder false ist:

Ausgeben des Feldes:

Die ausführende Bewegungsmethode:

Beispielausgabe:

Springerbewegung mit JUnit-Test:

Wenn ihr noch was braucht, sagt Bescheid. Ich wäre euch unglaublich dankbar, wenn ihr mir helfen könnt!

Bild zum Beitrag
programmieren, Java, Schach, Programmiersprache, Objektorientierte Programmierung, IntelliJ IDEA

Meistgelesene Beiträge zum Thema Programmiersprache