Spezieller Bilder-Upload und Spielabsagen mit Datenbank verknüpfen

Hey Dude23,

der Grund weshalb dieser Codeschnipsel funktioniert:

Code:
$sql .= " 5  ";

dieser aber nicht:

Code:
$sql .= " '".$_SESSION['user_id']."' ";

ist, dass deine User-SessionId im zweiten Fall als String
an die MySql Where-Klausel übergeben wird.

Wenn du die Quotes weg lässt, sollte es funktionieren.

Code:
$sql .= $_SESSION['user_id'];

Schöner ist es natürlich, das Ganze über PDO Prepared Statements zu machen.
Kannste dir aber auch für später aufheben, wenn es für den Moment zu viel ist.

Greetz und viel Erfolg
 
Hallo Shrink,

erstmal danke für deine Antwort. Ich hab's auch schon ohne die Anführungszeichen versucht, so wie du es schreibst, aber es bleibt leer. Wie gesagt, das Problem ist, dass es mittlerweile nichtmal mehr mit dem "Urcode" funktioniert, der anfangs aber noch funktioniert.
Den Link von dir werd ich mir auf jeden Fall aufheben. momentan is das aber zu viel ;)

Hab hier jetz auch folgende Meldung:

Notice: Trying to get property of non-object in /***/absagen.php on line 15

line 15 ist:
PHP:
echo nl2br ( $row->Spielplan );
 
Zuletzt bearbeitet:
Ich kann doch in der Abfrage $_SESSION["user_id"] so benutzen, oder? Warum gibt das dann kein Ergebnis *grübl*

Oha. Dieser Thread kam garnicht mehr im Kontrolzentrum bis jetzt.
Also noch schnell was nachliefern von mir:

Das kann man vielleicht so benutzen. Hast du phpMyAdmin oder ähnliches?
Lass dir nach dem Zusammenstellen von $sql mal $sql ausgeben:
PHP:
echo $sql;
Und führe den dann gezeigten Query direkt in phpMyAdmin aus. Dort wird er dir dann eventuelle Fehler anzeigen.

Es geht auch so:
PHP:
$plan = mysql_query($sql) or die(mysql_error());
http://de.php.net/manual/de/function.mysql-error.php
 
Hoi,

ja, hab phpMyAdmin 2.9.1.1.

PHP:
echo $sql;
gibt: SELECT Spielplan FROM benutzerdaten WHERE Id = 5

Das sagt mir immerhin, dass ich die Session jetzt richtig benutze, denn die 5 wird richtig übertragen:
PHP:
$sql = " SELECT Spielplan FROM benutzerdaten";
$sql .= " WHERE Id = ";
$sql .= $_SESSION['user_id'];


Hab hier jetz mal nen Screenshot von phpMyAdmin angehängt...das kommt raus, wenn ich o.g. dort eingebe:

s1.jpg
 
PHP:
while($row = mysql_fetch_row($plan));

Mehrere Sachen. Mit mysql_fetch_row erhälst du kein Objekt mehr in $row, sondern ein Array. Das heißt du musst es (hier) mit Zahlen ansprechen. 0 = erste Spalte, 1 = zweite... etc.

PHP:
echo $row[0];

Das ist performanter (schneller) aber wenn du weiterhin Objekte (das mit ->) haben willst dann benutze mysql_fetch_object($plan).

Und dann lass das Semikolon am Ende einmal weg.
 
Ach...es war das Semikolon. Das gibts doch nicht, immer wieder faszinierend dieses PHP ;) Kann man nicht mal eine Sprache erfinden, bei der dann als Fehlermeldung steht: "Da is ein Semikolon zuviel!"? :-)

Also gut...puh. Dann werd ich jetzt mal das mit den Kontrollkästchen machen. Und dann erstmal ab ins Bett ;) Danke dir soweit!
 
So, jetzt wo ich die Ausgabe endlich richtig hinbekommen habe, stelle ich einen Fehler in meiner Planung fest. Bisher hatte ich den anzuzeigenden Spielplan in der DB als Text in einer Spalte. Sprich jeder Spielplan ist nur ein fließender Text. Damit bekomme ich natürlich den Spielplan als eine einzige Ausgabe und hier
PHP:
echo "<input type='checkbox' name='absage' value=$row->Spielplan>".nl2br($row->Spielplan)."<br></br>";
natürlich auch nur eine Checkbox, statt eine hinter jedem Spiel. D.h. entweder finde ich eine andere Lösung als mit den Checkboxen oder aber ich ändere die Tabellenstruktur in der Datenbank. Bei letzterer Möglichkeit müsste die Änderung so erfolgen, dass jedes Spiel ein eigener Datensatz ist. Denn bisher sieht die Sache so aus:
s2.jpg
Hat jemand eine zündende Idee? ;)
 
Hier, ich! :D

Also deine Tabelle verstößt gegen die erste Normalform und gehört sofort in Knast :p (nur Spaß)

Das was deiner Tabelle fehlt ist eine schöne Normalisierung (so nennt man es).
Auf wikipedia ist die bisher beste Erklärung wie ich finde:
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Sieh mal (Primärschlüssel sind immer Unterstrichen):

Teams
TeamID, Name, Straße, Tel
1, Tuto Riales, Hauptstraße, 555-123456
2, TU Turial, 555-789654
3, FC Dude, 555-753951

Termine
TeamID, Zeit, Text
1, 115945646, "Grillen"
1, 115945589, "Aufräumen"
3, 115943288, "Programmieren"

Mal als Beispiel.
Schlägst dich bis jetzt um einiges besser als alle anderen Neuen hier und erkennst wenigstens die Fehler ;) Weiter so!
 
Zuletzt bearbeitet:
Was würde ich nur ohne dich tun ;)

Wenn ich das jetzt richtig verstanden habe, bräuchte ich dazu eine zweite Tabelle in der Datenbank. In der Fehlerfindung half mir vor allem das Beispiel in dem Wiki-Artikel.
Die ID vergebe ich für die zweite Tabelle manuell, da es ja zur Team-ID der ersten Tabelle passen muss.

Die Abfrage wird dadurch aber nicht komplexer, wenn ich das kapiere.

Denn sie müsste ja nun in die Richtung
PHP:
SELECT * FROM termine WHERE Id = $_SESSION['user_id']
gehen, da mich dann die erste Tabelle (die ja eigentlich nur für die Logins da ist) für diese Abfrage gar nicht interessiert. Die ID bekomm ich ja über die Session. Ui, das wird lustig ;) Wieder was zum basteln :D

Noch ne Zwischenfrage: Das Datum werd ich nie einzeln brauchen, es kann daher von mir aus gerne auch (ähnlich wie bisher) als Text im selben Feld wie die Spielansetzungen stehen. Ist das dann ein übler Bock oder kann man das so machen?
 
Zuletzt bearbeitet:
Das Datum werd ich nie einzeln brauchen, es kann daher von mir aus gerne auch (ähnlich wie bisher) als Text im selben Feld wie die Spielansetzungen stehen. Ist das dann ein übler Bock oder kann man das so machen?

Das kann man selbstverständlich machen. Würde ich persönlich seperat machen, falls man mal eine Funktion einbauen möchte, mit der man alle Ereignisse von einem bestimmten Datum oder in einer bestimmten Zeitspanne haben will.

Zudem sollte es ein "Timestamp" sein (von mySQL oder besser von PHP mit time() ), da dies als Zahl in der Tabelle dann steht und wunderbar verarbeitet werden kann.
Mit Text ist immer so eine Sache, vor allem bei der Sortierung etc.

Also es spricht vieles dafür, dies in einer eigenen Spalte zu machen, insbesondere dadurch, dass die nullte Normalform dir sagt: "Atomare Zerlegung" ;)
In "31.12.2009 Geburtstag von Mama Erde" sind schon zwei Informationen (Datum und Ereignis) was dem atomaren Widerspricht.
Andersrum sollte man es auch nicht übertreiben mit dem Zerlegen ;) Also kannst du es in diesem Fall zusammenlassen oder auseinander nehmen. Jacke wie Hose.
 
Zuletzt bearbeitet:
Zurück