Feldname mit Leerzeichen lässt sich nicht verarbeiten
TheFlu
- datenbank
0 Rouven0 TheFlu0 Frank (no reg)0 TheFlu1 Rouven0 TheFlu
0 Frank (no reg)
Schönen guten Abend,
ich arbeite an einer Umfrage auf Basis von MySQl und PHP zur Zugriffssteuerung.
Im 1.Teil wird eine Überprüfung durchgeführt. Es gibt eine Tabelle in der alle Namen stehen. Im Feld "Namen" wird der aktuelle Name gespeichert und dann in einer Variable "$aktuellerNamer gespeichert.
Also:
select name from namen(so heist die tabelle) where name =0 'aktuell erbenutzer'
Im 2.Teil hat der Benutzter die Möglichekeit zu verschienden anderen Benutztern Kommentare abzugeben.
Das geschiet mit einem Updatebefehl. Allerdings wird nun nicht mehr der Name aus dem Datensatz angewählt (wie bei 1) sondern der Datensatz des jeweiligen Benutzers geändert.
update namen set $aktuelle rbenutzter = '$eingebenes stichwort' where Name = '$alle namen aus der liste'
Und jetzt das Problem:
Wenn ich bei 1 den Listename mit dem eingeben Namen vergleiche geht das alles wunderbar "vorname nachname = vorname nachname"
Bei zwei geht das aber NUR wenn Vor- und Nachname kein Leerzeichen beinhalten also vornamENachname = vornamENachname
Jetzt hab ich versucht das Leerzeichen mit 'str_replace ( ' ', '', $aktueller benutzter);' zu löschen.
Ich komme bloß immer wieder an Stelle wo ich den normalen Namen brauche zB als zu Anzeigen und auch später in der Umfrage gibt es wieder einen Teil der ähnlich wie Nr.1 ist. Dazu bräuchte ich wieder den richtigen Namen.
Gibts dafür ne Lösung wie man die mit Leerzeichen in Datenfeldnamen selektieren kann?
Hello,
wenn ich mal davon absehe, dass sich meine Zehnägel aufrollen wenn ich deine dynamischen Tabellennamen für einzelne Benutzer sehe (gibts da eine gute Begründung für??), dann ist in MySQL das Escapezeichen für reservierte Worte ein Backtick, also `
In Access ist es [], nur so am Rande.
MfG
Rouven
Also zum Zehnägelkrümmen: Die Abfrage ob ein Benutzer existiert oder nicht mache ich mit einer If-Abfrage, also
forSchleife mit N Durchgängen
{
If (aktuellerBenutzer == BenutzerN ) //Pro Schleifendurchlauf wird N //erhöht und gibt einen anderen Benutzer zum Vergleich aus
{
führe die Umfrage durch
}}
http://theflu.th.funpic.de/Ablage/Abizeitung/Datenbank.JPG
Und dann hab ich noch mal zur Verdeutlichung nen Screen gemacht.
Die Namen in der Spalte "Name" werden zum Vergleich für Teil 1 gebraucht und ausgelesen. Da ist es egal ob ein Leerzeichen im Namen steht oder nicht.
Wenn ich dann für den zweiten Teil dann aber für jeden einzelnen Namen ein Stichwort schreiben will, brauch ich ein 2 achsige Matrix, also werden alle Namen noch mal als Spaltennamen geschrieben.
Wenn ich jetzt den Spalten name mit dem Updatebefehl anwählen will, geht das nur noch wenn keine Leerzeichen vorhanden sind.
Also rot geht, blau nicht!
Hi,
dein Ansatz mit Spalten und Zeilen zu arbeiten ist grundsätzlich schon mal (äusserst) sub-sub-sub-optimal. Du siehst ja bereits, was dir ans Hemd stösst bzw. auf welch Probleme du stösst.
Was du (wenn ich deine nicht ganz durchsichtige Erklärung verstanden habe) bewirken willst, ist ein m:n Bewertungssystem. Alf kann Ulf bewerten, Ulf den Hans und Hans die Fränzi und Fränzi wieder Alf und Ulf ... und so weiter.
So was löst man für gewöhnlich am praktischsten mit einer Tabelle für die Benutzer, in der du solch wichtige Attribute wie Nickname, voller Name, Schuhgrösse undsoweiter zur jeweiligen Person speicherst und einer Tabelle 'Kommentare' mit folgendem Schema:
UserKommentator UserKommentierter Kommentar
------------------------------------------------------------------------------
Alf Ulf du bist doof
Fränzi Alf du bis hübsch
Fränzi Hans du hast mich mal an den Haaren gezogen
Damit kannst du sehr einfach auf alle gegebenen Kommentare von einer Person zu greifen, genauso auf alle Kommentare _zu_ einer bestimmten Person. Und das Updaten macht es natürlich auch um Längen einfacher.
Also verabschiede dich bitte einfach von deinem jetzigen Konzept und mach es besser. Wenn du unbedingt (was ich nicht glaube) eine Matrix-Ausgabe erzeugen musst, dann geht das jederzeit mit PHP und Arrays zu machen.
Ciao, Frank
Geil, das war klar und deutlich. Was ähnliches hat man mir schon in anderen Foren geraten.^^
Ich habe das mit meinem Informatikunterrichtswissen gemacht und verarbeite knapp 80 Personen.
Als Laie erschien mir das am einfachsten und ES FUNKTIONIERT JA AUCH!
Eben nur das Problem mit der Selektion der Spalten Namen.
Mit Datenbanknormalisierung möchte ich halt hier nicht beigehen.
Und eins noch deine Methode würde bei 80 Leuten 6400 Datensätze erzeugen. Bischen heftig wie ich finde.
Ich hatte auch noch über eine Methode nachgedacht die für jeden Benutzer eine eigene Tabelle erzeugt.
Naja fürs nächste Projekt werde ich das anders planen^^.
Kannst du mir dann vielleicht erklären warum die Spaltennamen sich so seltsam (auf das Leerzeichen bezogen) verhalten??
Danke
Hello,
Und eins noch deine Methode würde bei 80 Leuten 6400 Datensätze erzeugen. Bischen heftig wie ich finde.
ja und nein. Der Sinn einer Datenbank ist die Verwaltung von Datenmengen. Datenbanken sind geradezu dafür gebaut DatenMENGEN zu verwalten, d.h. eine Tabelle mit zig Millionen Datensätzen sind in der Unternehmenspraxis nicht außergewöhnlich. Eines der essenziellen Prinzipien ist "fasse gleichartiges in einer Tabelle zusammen". Man möchte also für 14 Millionen Kunden nicht 14 Millionen Tabellen mit je 3 Einträgen für Konto, Sparbuch und Tagegeld, sondern wenn überhaupt 3 Tabellen für Kontodaten, Sparbuchdaten und Tagegelddaten sowie _eine_ Kundentabelle mit 14 Mio Kunden.
Kannst du mir dann vielleicht erklären warum die Spaltennamen sich so seltsam (auf das Leerzeichen bezogen) verhalten??
1. das ist so - sagt der Standard...
2. wenn du ein Argument haben möchtest:
SELECT spalte a FROM tabelle
selektiert NICHT eine "spalte a" sondern ist eine Kurzschreibweise für
SELECT spalte AS a FROM tabelle
und selektiert eine Spalte, die sodann unter neuem Namen zur Verfügung gestellt wird.
Du könntest genauso fragen, warum Bindestriche nicht zugelassen sind. Weil der Unterschied zwischen
SELECT zahl1-zahl2 FROM tabelle
und
SELECT zahl1 - zahl2 FROM tabelle
(selektiere Differenz aus zahl1 und zahl2) nicht mehr erkennbar wäre.
MfG
Rouven
Jetzt fangt ihr an mich zu Überzeugen... ich wein´ gleich.
Ok ich werd mal versuchen wie weit ich komme.
Danke an alle
Hallo,
was lehrt man euch denn da im Informatik-Unterricht? "Datenbanknormalisierung" scheint ja schon mal Thema gewesen zu sein? Soweit musst du es ja noch nicht mal treiben. Du kannst auch einfach nur eine Tabelle haben und dort die Benutzernamen quasi als "Schlüssel" direkt ablegen. Das hat aber auch seine eigenen Vor- und Nachteile.
und ES FUNKTIONIERT JA AUCH!
Ach ... genau Eindruck hatte ich jetzt nicht wirklich gewonnen.
Wie Rouven auch schon quasi durch die Blume erwähnte, 6400 Datensätze à 3 Spalten ist selbst für MS Access nicht mal ein Augenzwinkern wert. Zumal du sicherlich 80x80 sowieso nicht praktisch ausnutzen würdest. Ich glaub nicht, dass jeder Abiturient wirklich zu jedem anderen Abiturient einen Kommentar hat. Ich hatte ... sekunde ... 13 Kommentare in meinem Abibuch. Deshalb reden wir vielleicht praktisch von 500 bis 1000 Datensätzen.
Ich hatte auch noch über eine Methode nachgedacht die für jeden Benutzer eine eigene Tabelle erzeugt.
Aua, mindestens genauso schlecht wie die Idee mit den Spalten.
Naja fürs nächste Projekt werde ich das anders planen^^.
Höre er, es ist nie zu spät um auf den Pfad der Tugend zurückzukehren. :) Fang einfach schon bei diesem Projekt an. Die Änderung hast du in ca. 2 Std. hinter dir ... bisschen PHP mit Schleifchen drum um die Daten in die richtigere Struktur zu migrieren und das wars.
Gut Nacht
Frank