Quiz - MySQL eintrag schlägt fehl

Hi,

ich hab ein Quiz gemacht was mir so eig einigermaßen gut passt nur bei der datenbank eintragung hackt es … hatte da eigentlich noch nie probeleme komisch aber vielleicht könnt ihr mir ja dabei helfen

und dann kommt folgender fehler im browser

aber ich kapier nicht von was das kommt vill könnt ihr mir ja den richten code posten DANKE lg flo

sinnvoll wäre es sich mal mit den Verkettungsoperatoren richtig auseinander zu setzen.
http://tut.php-q.net/de/concat.html

Außerdem ist es MySQL egal wenn zwischen den einzelnen Argumenten/Befehlen Zeilenumbrüche sind.
Soll heißen, du kannst die Abfrage ruhig für den Programmierer ein wenig übersichtlicher gestalten. So würden PHP-Fehler auch schneller auffallen, weil die Zeilen unterschiedlich sind.

Generell würde ich sagen, der Fehler liegt irgendwo in den ganzen $_SESSION variablen. Habs mir so genau nicht angeschaut.

mfg Balmung

Hi,
danek für deine schnelle antwort.
Wie meinst du das? könntest du mir ein kleines beispiel machen weil ich das nicht so ganz verstehe hab das bis jetz immer nur in einerzeile gesehn und auhc gelernt

lg flo

so zum beispiel (hab die fehler nicht korrigiert)

$sql = "INSERT INTO quiz ('id', 'qid', 'uid', 'uname', 'date', 'right', 'gesamt', '1.1', '1.2', '2.1', '2.2', '3.1', '3.2', '4.1', '4.2', '5.1', '5.2', '6.1', '6.2', '7.1', '7.2', '8.1', '8.2', '9.1', '9.2', '10.1', '10.2', '11.1', '11.2') VALUES (NULL, '$qid', '$_SESSION[id]', '$_SESSION[user]', NOW(), '$richtige_antworten', '$gesamtpunkte', '$_SESSION[$qid2.1.1]', '$_SESSION[$qid2.1.2]', '$_SESSION[$qid2.2.1]', '$_SESSION[$qid2.2.2]', '$_SESSION[$qid2.3.1]', '$_SESSION[$qid2.3.2]', '$_SESSION[$qid2.4.1]', '$_SESSION[$qid2.4.2]', '$_SESSION[$qid2.5.1]', '$_SESSION[$qid2.5.2]', '$_SESSION[$qid2.6.1]', '$_SESSION[$qid2.6.2]', '$_SESSION[$qid2.7.1]', '$_SESSION[$qid2.7.2]', '$_SESSION[$qid2.8.1]', '$_SESSION[$qid2.8.2]', '$_SESSION[$qid2.9.1]', '$_SESSION[$qid2.9.2]', '$_SESSION[$qid2.10.1]', '$_SESSION[$qid2.11.2]', '$_SESSION[$qid2.11.1]', '$_SESSION[$qid2.11.2]')";

Bei Solchen Sachen ist es extrem wichtig eine gute Ordnung zu behalten.

du könntest zB ein Array in Session verwenden zB $_SESSION[‘quiz’.$quid] und dann ein wenig tricksen

wenn du davon ausgehen kannst, dass die Schlüssen ‘1.1’, ‘1.2’, ‘2.1’, ‘2.2’ usw heißen und geordnet sind, kannst du den SQL-Befehl extrem abkürzen

$sql = "INSERT INTO quiz ('id', 'qid', 'uid', 'uname', 'date', 'right', 'gesamt', '1.1', '1.2', '2.1', '2.2', '3.1', '3.2', '4.1', '4.2', '5.1', '5.2', '6.1', '6.2', '7.1', '7.2', '8.1', '8.2', '9.1', '9.2', '10.1', '10.2', '11.1', '11.2') VALUES (NULL, '$qid', '$_SESSION[id]', '$_SESSION[user]', NOW(), '$richtige_antworten', '$gesamtpunkte', '$_SESSION[$qid2.1.1]', '".implode("', '", $_SESSION['quiz'.$quid]). "')";

Allerdings gefällt mir diese Schreibweise mit 1.1 usw sowiso nicht wirklich, was genau willst du damit bewirken?

Hi,

also mit dem $_SESSION[xx.yy.zz]

xx = die quiz id
yy = die frage 1 (von 11)
zz = 1 = richtig beantwortet und 2= die punktezahl

ok danke für deinen code teil aber i-wie funktionier er leider auch nicht … ich verstehts echt nicht … od soll ich alle $_SESSION variablen in eine andere variable schreiben ?? glaubt ihr geht es dann einfacher od gibt es dann nen hacken?

lg flo

edit: was müsste ich den in die variable $quid schreiben?

Sind es immer 11 Fragen?

Ich würde ja generell mehrere Tabellen anlegen:

CREATE TABLE quizz (
  id INTEGER PRIMARY KEY auto_increament,
  name VARCHAR(30) NOT NULL
);

CREATE TABLE question (
  id INTEGER PRIMARY KEY auto_increament,
  quizz INTEGER REFERENCES quizz(id), --so gehts zumindest in PgSQL, bei MySQL: Foreign-Key Constraint
  title VARCHAR(30) NOT NULL,
  text TEXT NOT NULL,
  right_answer REFERENCES answer(id)
);

CREATE TABLE answer (
  id INTGEGER PRIMARY KEY auto_increament,
  question INTEGER REFERENCES question(id),
  text TEXT
);

CREATE TABLE solve(
  id INTEGER PRIMARY KEY auto_increament,
  name VARCHAR(30),
  quizz INTEGER REFERENCES quizz(id)
);

CREATE TABLE solve_questions(
  id INTEGER PRIMARY KEY auto_increament,
  solve INTEGER REFERENCES solve(id),
  question INTEGER REFERENCES question(id),
  answer INTEGER REFERENCES answer(id)
);

Das ganze ist in dieser Größenordnung natürlich nicht für Anfänger geeignet, und das Tabellenlayout ist so auch noch nicht perfekt. Hier fehlen noch mehrere Constraints und Optimierungen, aber du siehst wie aufwendig es ist ein DB-basiertes variables Quizz-System mit vollständiger Statistik zu Programmieren.

Hi,

danke …
Oha schaut echt sehr schwer aus …
Naja ich such nommal im Internet vill find ich ja was sonst muss ich euch nochmal fragen.

Danke an alle für die Antworten!!
LG Flo