Frage von MinecrafterPG, 67

Wie bekomme ich die Variablen-Fehler weg (PHP)?

Hi Leute,

ich habe ein Script programmiert, indem man Aufgaben für bestimmte User erstellen kann (bis zu 3 Stück, weil es für jeden User 3 Slots gibt) und der User diese abhaken kann. Allerdings habe ich ein Problem bei der Seite, wo die Aufgaben erstellt werden. Der User wird über die URL erkannt (blablabla.de/pade.php?id=2). Die ID steht immer für einen bestimmten User. Auf dieser Seite sollen nun die Slots des ausgewählten Users sehen. Die Slots die bereits einen Inhalt haben sollen auf readonly stehen und außerdem soll der Eintrag darin stehen. Bei leeren Slots wird einfach ein leeres Textfeld angezeigt, das dann über POST an die nächste Seite weitergeleitet wird. Aber zurück zum Problem: Wenn der Eintrag existiert, wird er angezeigt, das Feld steht auf readonly etc. aber wenn der Eintrag nicht existiert, tauchen da Fehlermeldungen wegen undefinierten Variablen auf und im Textfeld stehen komische Sachen (<span class=). Wie kann ich mein System ändern, sodass diese Meldungen ausbleiben?

Schonmal Danke für die Hilfe!

Hier mein PHP-Code für die Seite:

https://www.dropbox.com/s/fmedvhnmkfrpl8q/new.php?dl=0

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ceevee, 16
    if(mysql_num_rows($einlesen1)==1)  goto ja1;        else goto end1;


und im hinter "ja1" wird die Variable $_daten erst angelegt. Will heißen, wenn du zu end1 springst, dann gibt es $_daten nicht. Genau diese Variable willst du aber ein paar Zeilen später anzeigen, nämlich hier:
<input name="aufgabe" value="<?php echo $_daten['Aufgabe']; ?>" <?php echo $i1; ?>><br>


Das ist das Problem, was du beheben musst. Daneben:
- weg mit dem goto! Das macht deinen Code erst schwer verständlich. In deinem Fall wäre eine Variante ohne goto sogar kürzer... so könnte das, was du machen willst, in richtig aussehen (ungetestet!).

if(mysql_num_rows($einlesen1)==1) {$_sql = "SELECT * FROM User_Aufgaben WHERE UserID='".mysql_real_escape_string($_GET['id']) . "' AND Slot=1 AND Status!='deleted' AND Status!='finished'";    $_resultat = mysql_query($_sql);    $_daten = mysql_fetch_array($_resultat, MYSQL_ASSOC);}else {$_daten = "";}$i1 = 1;


- die neuen mysql-Befehle solltest du bald nutzen wollen, weil es ein Sicherheitsrisiko ist. Die PHP-Entwickler denken sich schon was dabei, wenn sie die auf "deprecated" setzen. - Alter Programmierindianer-Weisheit: wenn du Code kopieren und leicht verändert wieder einfügen musst, dann machst du sehr wahrscheinlich irgendwas falsch. In deinem Falle könnte man die Sloterzeugung in eine Funktion auslagern, die nur noch die ID übergeben bekommt und daraus das Formularelement zusammenbastelt.
Kommentar von MinecrafterPG ,

Danke, für dieses gute Lösung!

Antwort
von fluffiknuffi2, 18

Ist mir zu viel & zu schlecht strukturierter Code. Vermutlich ist das Problem trivial. Versuche es einzugrenzen dann kann ich dir gerne helfen aber ich investiere jetzt keine 10 oder mehr Minuten um einen trivialen Fehler zu finden.

Antwort
von webflexer, 30

Dein Code ist sehr unstrukturiert und teilweise "veraltet" (deprecated).

session_start() sollte immer ganz am Anfang des Codes stehen!

mysql_ Funktionen und MYSQL_ASSOC sind veraltet (deprecated) , lieber mysqli nutzen!

lass das GOTO hin und her "ge-eiere"...lieber den Code vernünftig strukturieren - eigene Funktionen erstellen.

Kommentar von MinecrafterPG ,

Okay session_start() steht jetzt am Anfang und ich möchte aber weiter die "alte" Variante von MYSQL benutzen. Wie bekomme ich jetzt aber die Fehler weg?

Antwort
von happyfish2, 43

Das dürften keine Fehler sein, sondern nur Notices. Kannst über das error reporting level abschalten.

Kommentar von MinecrafterPG ,

Und diese komischen Einträge in dem Textfeld?

Kommentar von webflexer ,

Die Fehlermeldungen abzuschalten ist sehr kontraproduktiv. Lieber die Fehler ausbessern.

Kommentar von MinecrafterPG ,

Okay, hast du eine Idee?

Kommentar von webflexer ,

ja, soeben geschrieben

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten