Nein, das meinte ich nicht sondern beim WHERE:
WHERE (tabelle1.autor = tabelle2.user AND `tabelle1.id`= ?) LIMIT 10"
Kann auch tabelle2 sein, das habe ich nicht untersucht.
Nein, das meinte ich nicht sondern beim WHERE:
WHERE (tabelle1.autor = tabelle2.user AND `tabelle1.id`= ?) LIMIT 10"
Kann auch tabelle2 sein, das habe ich nicht untersucht.
Du prüfst in der where-Klausel eine ID ab. Weil es diese in beiden Tabellen gibt ist das mehrdeutig. Du musst, ebenso wie bei den anderen Spaltennamen, den Tabellennamen davor stellen.
Zitatnur bekomm ich die boxen nicht gleich ... die mittlere will einfach nicht höher werden.
Hast Du das HTML und CSS so übernommen wie ich es gepostet habe? Bei mir, nachdem ich deinen Code übernommen hatte, war das genau so. Grund waren die überflüssigen div-Container, hier:
Dabei nahm die umgebende section die selbe Höhe ein wie die benachbarten aber das div darin nicht.
Und das CSS:
/* Grundlegende Stile */
:root {
--primary-color: #ffa800;
--secondary-color: #f4f7fa;
--text-color: #333;
--white: #fff;
--box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Poppins', sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: var(--secondary-color);
}
.container {
max-width: 1100px;
margin: auto;
padding: 0 20px;
}
/* Header */
.header {
background: var(--primary-color);
color: var(--white);
padding: 60px 0;
text-align: center;
}
.header h1 {
font-size: 3rem;
margin-bottom: 10px;
font-weight: 600;
}
.special-heading {
font-size: 1em;
font-family: 'Arial', sans-serif;
color: purple;
text-align: center;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
letter-spacing: 2px;
text-transform: uppercase;
font-weight: bold;
padding-bottom: 50px;
}
.header p {
font-size: 1.2rem;
}
/* Hauptinhalt */
.main-content {
padding: 60px 0;
display: grid;
grid-template-columns: 1fr;
}
.call-to-action {
text-align: center;
margin-bottom: 30px;
}
.call-to-action h2 {
font-size: 2.5rem;
color: var(--primary-color);
margin-bottom: 10px;
}
.contact-section {
display: flex;
justify-content: center;
gap: 40px;
flex-wrap: wrap;
}
.contact-form-container,
.call-button-container {
background: var(--white);
padding: 30px;
border-radius: 10px;
box-shadow: var(--box-shadow);
}
.contact-section h3 {
text-align: center;
margin-bottom: 25px;
color: var(--primary-color);
}
/* Formular-Styling */
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: 600;
}
.form-group input,
.form-group textarea {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 5px;
font-size: 1rem;
transition: border-color 0.3s;
}
.form-group input:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--primary-color);
}
/* Button-Styling */
.btn {
display: inline-block;
background: var(--primary-color);
color: var(--white);
padding: 12px 25px;
border: none;
border-radius: 5px;
text-decoration: none;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s, transform 0.3s;
width: 100%;
text-align: center;
}
.btn:hover {
background: #0056b3;
transform: translateY(-2px);
}
/* Anruf-Button */
.call-button-container {
text-align: center;
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
}
.call-btn {
text-align: center;
margin-bottom: 25px;
margin-top: 20px;
font-size: 1.2rem;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
.call-btn .icon {
font-size: 1.5rem;
}
.call-button-container {
font-size: 1.1rem;
font-weight: 600;
color: var(--primary-color);
}
/* Formular-Status-Nachrichten */
.form-status {
margin-top: 20px;
text-align: center;
font-weight: 600;
}
.form-status.success {
color: green;
}
.form-status.error {
color: red;
}
.faq-section {
display: flex;
justify-content: center;
gap: 40px;
flex-wrap: wrap;
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 5px;
font-size: 1rem;
transition: border-color 0.3s;
background: var(--white);
box-shadow: var(--box-shadow);
}
.faq-item {
margin-bottom: 10px;
}
/*.faq-question {
display: block; /* or inline-block
padding: 10px;
background-color: #f0f0f0;A
border: 1px solid #ccc;
text-decoration: none; /* Entfernt Unterstreichung
color: #333; /* Textfarbe
transition: background-color 0.3s ease; /*Hover-Effekt
}*/
.faq-question:hover {
background-color: #e0e0e0;
}
/* Footer */
.footer {
background: var(--text-color);
color: var(--white);
text-align: center;
padding: 20px 0;
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
/* Halbtransparenter Hintergrund */
display: none;
/* Zuerst ausgeblendet */
justify-content: center;
align-items: center;
}
.popup {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
#closePopup {
margin-top: 10px;
}
.overlay.show {
display: flex;
/* Popup anzeigen */
}
/* Responsivität für kleinere Bildschirme */
@media (max-width: 768px) {
.contact-section {
flex-direction: column;
gap: 20px;
}
}
/* details>div {
padding: .5em;
}
details {
border: thin solid;
}
summary {
position: relative;
line-height: 300%;
padding-left: 1em;
font-weight: bold;
}
summary::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15'%3E%3Cpath fill='green' d='m0,8 v-4 l5,5 v-10 h5 v10 l5,-5 v4 l-7.5,7.5 z'/%3E%3C/svg%3E");
position: absolute;
width: 1em;
aspect-ratio: 1;
right: 1em;
top: .2em;
transition: all 0.5s;
}
details[open] summary::after {
transform: scale(1, -1);
filter: hue-rotate(250deg)
} */
details>div {
padding: .5em;
}
details {
border: thin solid;
}
summary {
/* position: relative; */
/* line-height: 300%; */
padding-left: 1em;
font-weight: bold;
display: flex;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.3em 0.2em 0.3em 0.2em;
gap: 0.2em;
}
summary::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15'%3E%3Cpath fill='green' d='m0,8 v-4 l5,5 v-10 h5 v10 l5,-5 v4 l-7.5,7.5 z'/%3E%3C/svg%3E");
/* position: absolute; */
width: 1em;
aspect-ratio: 1;
transform: translateY(0.1em);
/* right: 1em;
top: .2em; */
transition: all 0.5s;
}
details[open] summary::after {
transform: scale(1, -1);
filter: hue-rotate(250deg)
}
body {
display: flex;
flex-direction: column;
}
main.main-content {
grid-template-columns: 1fr;
}
@media (min-width: 50em) {
body {
margin: 0 auto;
max-width: 50em;
gap: 1em;
}
main.main-content {
grid-template-columns: 1fr 1fr 1fr;
}
.call-to-action {
grid-column: 1/4;
}
Alles anzeigen
Da war einiges doppelt und evtl. müsste noch mehr bereinigt werden aber mir fehlte die Zeit.
Die FAQ-Elemente sind jetzt recht klein. Wenn da Inhalt rein kommt, könnte es zu Schwierigkeiten kommen.
Und Du hattest geschrieben, dass sich alles verschiebt, wenn man ein Akkordeon auf klappt. Das ist bei meiner Lösung auch so. Will man das vermeiden, müsste man die z. B. die Höhe begrenzen und den Overflow sichtbar machen. Aber dann wird es wahrscheinlich Probleme geben, wenn man ein Element ganz unten auf klappt.
Zitatich danke dir für deine geduld.
Da nicht für, Geduld gehört dazu beim Programmieren.
Das Layout, dass dein HTML und CSS ergibt, sah ein wenig wild aus. Ich habe mich mal nach dem Bild in Posting #9 gerichtet und die Elemente so angeordnet. Zu viel um alles zu erklären, ich habe u. a. überflüssige Container entfernt.
Bei den Pfeilen des summary-details hast Du mit abs. Positionierung gearbeitet und dabei haben sich gleich die Nachteile offenbart: Element überlappen sich. Du kannst den Text und den Pfeil sehr gut mit Flexlayout neben einander anordnen.
<body>
<header class="header">
<div class="container">
<h1>Testseite</h1>
<h2 class="special-heading">Testseite erklärung</h2>
<p>
“Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor
</p>
<p> incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.
Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.”
</p>
</div>
</header>
<main class="main-content">
<section class="call-to-action">
<h2>Kontaktieren Sie uns noch heute!</h2>
<p>Nutzen Sie unser Formular oder rufen Sie uns direkt an.</p>
<p>
Für ein persönliches Gespräch erreichen Sie uns Montag bis Freitag
von 00:00 bis 24:00 Uhr
</p>
</section>
<section class="contact-form-container">
<h3>Kontaktformular</h3>
<form id=" contactForm" class="contact-form">
<div class="form-group">
<label for="name">Name</label>
<input type="text" id="name" name="name" required />
</div>
<div class="form-group">
<label for="email">E-Mail</label>
<input type="email" id="email" name="email" required />
</div>
<div class="form-group">
<label for="message">Nachricht</label>
<textarea id="message" name="message" rows="5" required></textarea>
</div>
<button type="submit" class="btn">Nachricht senden</button>
</form>
<div id="formStatus" class="form-status"></div>
</section>
<section class="call-button-container">
<h3>Direkt anrufen</h3>
<a href="tel:+49123456789" class="btn call-btn">
<span class="icon">📞</span> Jetzt anrufen!
</a>
<p>+49 123 456789</p>
</section>
<section class="faq-section">
<h1>ANTWORTEN AUF HÄUFIG GESTELLTE FRAGEN</h1>
<div>
<details name="acc">
<summary>Frage?</summary>
<div class="content">
<p>Antwort</p>
</div>
</details>
<details name="acc">
<summary>Frage</summary>
<div class="content">
<p>Antwort </p>
</div>
</details>
<details name="acc">
<summary>Frage </summary>
<div class="content">
<p>Antwort</p>
</div>
</details>
</div>
<details name="acc">
<summary>Frage</summary>
<div class="content">
<p>Antwort</p>
</div>
</details>
<!-- Mehr summary-details-Elemente -->
</section>
</main>
<footer class="footer">
<div class="container">
<p>© 2025Alle Rechte vorbehalten.</p>
</div>
</footer>
</body>
Alles anzeigen
Ich wiederhole mich ungern, aber:
ZitatPoste das HTML und CSS oder am besten die URL der Seite.
D. h. das neueste mit deinem Versuch, die Accordeons einzubauen. Ohne das kann man dir nicht weiter helfen.
BTW:
ZitatIch habe versucht die per KI anpassen zu lassen, die wollen aber immer auf Krampf die html und php zu einer zusammenzufassen.
Das höre ich nicht zum ersten Mal, dass die KI alles global galaktisch in einer Datei zusammen würfeln will. Auch mit inline-CSS und -JS. Anscheinend besteht da noch Lernbedarf bei der KI ![]()
Häufig ist hier der Browser-Cache der Schuldige. Versuche, die Zeit an die URL anzuhängen:
fetch('check-state.php?switch=a&t=' + Date.now(), { method: 'GET' })
Da finde ich zwar in script.js Code für Popups aber leider kein HTML.
Außerdem wird im Javascript mit getElementById gearbeitet, deshalb wird das JS nur für ein Akkordeon funktionieren.
Um dieses Problem zu lösen müsste man das Ganze im Zusammenhang sehen. Poste das HTML und CSS oder am besten die URL der Seite.
Im Moment ist meine Zeit ein wenig knapp, vielleicht findet sich jemand anders und nimmt sich des Problems an.
Wie schon geschrieben wäre es am besten wenn Du das online stellen könntest. Hast Du überhaupt Webspace?
ZitatIch frage mich auch welche Checklist ich bei solchen Fehlern durchgehen müsste.
Dafür gibt es keine generelle Regel. Man muss sich das abhängig vom Fehler, der auftritt, überlegen.
ZitatIDs und Klassen kontrolliert.
Das habe ich auch gemacht und bemerkt, dass das Element "deck-container" mit getElementById ermittelt wird, im HTML steht dies jedoch als Klasse.
PS: Wenn ich mir deinen Code ansehe, finde ich nur einen Eventlistener für den Button für das Austeilen. Keinen für das Aufdecken und auch keinen für das Mischen. Du musst die noch hinzu fügen.
Zitatwie gehst du in solchen fällen vor?
Bist Du schon mit den Entwicklerwerkzeugen deines Browser vertraut? Vor allem der Debugger wäre bei JS sehr hilfreich. Du kannst damit den Ablauf des Skripts verfolgen, Variablen ansehen etc. ohne jedes Mal Ausgaben mit console.log einbauen zu müssen.
ZitatHast du eine Idee wie ich den Code am besten sagen kann im welchen Bereich noch Runde 1 von 4 Runden (4 Leben jeder Spieler) ist?
Die KI hat mir gesagt, dass ich pro aus teil klick messen könnte welche Runde gerade ist. Und den Button dann bis zur nächsten runde sperre. Das klingt mir aber irgendwie zu unüblich und nicht als Best Practise. Wie würdest du das machen ?
Das verstehe ich jetzt nicht, vermutlich weil ich das Spiel und die Regeln nicht kenne. Kannst Du es genauer erklären?
ZitatJetzt lassen sich auf einmal doch die Karten austeilen, es lag wohl an der Reihenfolge der Codeabfolge. Ich fülle die Kind Elemente von Stapel mit Script generierten IMG-Tags, weil ich die Vorderseiten der Karten aus dem Backend erst ausliefere(damit niemand auf die Idee kommt über Element untersuchen zu schummeln).
Vollständig verstehe ich das nicht aber ich vermute: Du zeigst erst nur die Rückseiten der Karten an und lädst die Vorderseiten dann mit Ajax nach. Allerdings finde ich das nicht in dem Code, den Du angehängt hattest. Aber wenn Du etwas nachlädst findet das fast immer asynchron statt und das kann zu Problemen führen. Hast Du das Spiel schon online? Es wäre hilfreich, wenn man es sich in Aktion ansehen könnte.
Ja, das hilft schon Mal weiter, die Buttons etc. sind da. Allerdings fehlt der Kern der Sache, nämlich der Stapel. Das div ist leer und wird wahrscheinlich durch den GET-Request gefüllt. Um testen zu können habe ich es rasch von Hand mit 10 Elementen gefüllt:
<div class="stapel">
<div>0</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
Alles anzeigen
Damit funktioniert jedoch das Geben der Karten einwandfrei, 3 x 3 werden auf die Spieler verteilt und eine bleibt im Stapel.
Das kann ich mir jetzt nur so erklären, dass der originale Stapel bei dir anders aussieht. Poste doch auch mal das HTML des Stapels aus der Quelltextansicht des Browsers.
Hallo tacodek und willkommen im Forum!
Wenn Du Code postest, benutze bitte Codetags, das Symbol <> in der Werkzeugleiste oben. In deinem Fall wurden manche Zeichenfolgen in Smilies umgewandelt.
Dann ist es, wenn man den Fehler finden will, am einfachsten, wenn man eine Testdatei anlegt. Dafür fehlt aber das HTML. Poste das bitte ebenfalls.
Ist das das selbe Problem wie auf html-forum?
ZitatIch würde gern an dem Aufbau festhalten.
Bin für jeden Lösungsansatz dankbar.
Das widerspricht sich irgend wie. Manchmal kann man den Pelz des Bären nicht waschen ohne ihn nass zu machen.
Ratsam wäre:
Das HTML zu bereinigen indem Du überfüssige Container entfernst.
Semantische Tags zu verwenden. Hier würde sich <figure> anbieten.
Auf Bootstrap zu verzichten, da veraltet. Statt dessen die Container mit Flex- oder Gridlayout anordnen.
Guten Abend Karin und willkommen im Forum!
Nicht so schön ist, dass dein Skript noch jQuery benutzt aber das wird die Funktion nicht beeinträchtigen.
Die maximale Größe der hochgeladenen Datei wird durch die Einstellungen deines Servers begrenzt. Das Skript liest diese aus und vergleicht sie mit der Datei, die hoch geladen wird. Du musst mit deinem Provider sprechen ob es möglich ist, diese Werte in php.ini zu vergrößern.
Ich wollte zunächst vorschlagen, die Werte mit ini_set zu vergrößern, aber das wird nicht gehen, siehe hier:
https://stackoverflow.com/questions/2184513/change-the-maximum-upload-file-size
Wenn Du auf diese Weise nicht zum Ziel kommst, melde dich wieder, möglicher Weise gibt es noch eine andere Möglichkeit.
ZitatVielleicht hat auch jemand von Euch ein weniger umfangreiches Script, das meine Anforderunge erfüllt
Das Skript ist deshalb so umfangreich weil es relativ viel leistet, einschl. einer Anzeige des Fortschritts beim Hochladen. Wenn man das weg lässt, kann man es allerdings vereinfachen und auf fetch statt XMLHttpRequest umstellen.
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.