Zum Inhalt springen

Switch/case mit Datenbankaufruf verknuepfen


Empfohlene Beiträge

Hallo,

ich soll in php eine Seite erstellen, in der verschiedene Terminplaene abgerufen werden, also fuer montag, dienstag, mittwoch usw. Hierbei soll auf eine Datenbank zugegriffen werden. nun moechte ich gerne wissen, wie soetwas zu loesen ist. kann ich bereits vor der switch/case-Anweisung den Datenbankaufruf machen, jedoch wie kann ich dann realisieren, dass die richtige aufgerufen wird. ist es moeglich, dass ich im aufruf, also hier z.b.:

$dbquery = mysql_query("SELECT start_time, end_time, Rooms.handle AS room FROM Schedule, ScheduleTypes, Rooms, Terms where (Rooms_roomID IS NULL OR Rooms_roomID=roomID) and ScheduleTypes_typeID=typeID

and ScheduleTypes.handle=\"Open Lab\" and Terms_termID=termID and Terms.handle='W07x1' and weekdays LIKE '%S%

dass ich statt diesem like %S% eine Variable setze, und diese dann in der switch case anweisung befuelle? also dann z.b. so:

$dbquery = mysql_query("SELECT start_time, end_time, Rooms.handle AS room FROM Schedule, ScheduleTypes,

Rooms, Terms where (Rooms_roomID IS NULL OR Rooms_roomID=roomID) and ScheduleTypes_typeID=typeID

and ScheduleTypes.handle=\"Open Lab\" and Terms_termID=termID and Terms.handle='W07x1' and weekdays LIKE '$i'

Vielen dank schoneinmal, ich weiss hierbei wirklich nicht weiter...

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, ist schon möglich - welche cases gibt es denn, bzw. was steht in der datenbankspalte "weekdays" denn drinnen? wenn dein weekdays ein festes set von (ich denke mal, wochentagen?) ist, dann musst du ohnehin nicht mit LIKE, sondern könntest gleich mit "=" arbeiten. woher würde denn dein angenommenes $i kommen, aus einer auswahlliste?

ohne obiges zu wissen ist es IMO nicht sinnvoll, dir etwas vorzuschlagen, da möglicherweise unpraktikabe/unsauber - wenn es das nicht ohnehin schon ist, was ich auch an der stelle nicht sagen kann, weil ich die umgebenden codezeilen nicht kenne.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Amstelchen,

zunaechst mal vielen dank fuer deine rasche antwort. aber genau hierbei liegt das problem, ich habe ein komplettes interface hier liegen, soll es aber kuerzen, da mein vorgaenger das programmiert hat, jedoch fuer jeden tag einzeln mit if else anweisungen. ich habe nur dieses skript, und mehr weiss ich nicht, weder was genaues ueber die datenbank noch etwas anderes, ich weiss nur, dass es ein raumreservierungsplan sein soll. mir ist das in die hand gedrueckt worden und einfach gesagt, mach mal. Aber wenn das so funktionieren koennte, dann waere ich schon seeehhhr gluecklich darueber. ich kann dir mal den code hierherkopieren:

<?

// select for monday

$dbquery = mysql_query("SELECT start_time, end_time, Rooms.handle AS room FROM Schedule, ScheduleTypes,

Rooms, Terms where (Rooms_roomID IS NULL OR Rooms_roomID=roomID) and ScheduleTypes_typeID=typeID

and ScheduleTypes.handle=\"Open Lab\" and Terms_termID=termID and Terms.handle='W07x1' and weekdays LIKE '%M%

'");

// reformat the information from the DB in correct order given in the SELECT statement

if ($dbquery) {

$times_array = mysql_fetch_row($dbquery);

} else {$times_array = "";}

while ($times_array != "")

{

echo "<td>".Monday." </td>\t";

echo "<td>".$times_array[0]." </td>\t";

echo "<td>".$times_array[1]." </td>\t";

echo "<td>".$times_array[2]." </td>\t";

// ask for availableness by checkboxes, default setting is 'NO'

echo "<td><INPUT TYPE=\"checkbox\" NAME=\"".Monday."_".$times_array[0]."_".$times_array[1]."_".$times

_array[2]."\"></td></tr>\n";

$times_array = mysql_fetch_row($dbquery);

}

das habe ich hier vor mir liegen...

gruss dany

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist es nicht weitaus "geschmeidiger", sich die jeweilige DB Query dyanmisch zusammenzubauen als "switch/case" zu verwenden?

Woher kommt denn die Entscheidung, ob nun "Monatag" oder "Mittwoch"?

Aus einem Formular?

Irgendwoher muss sie doch kommen, und dann kannste natürlich die query mit diesem Wert befüllen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

erstmal wieder danke fuer deine antwort, aber was meinst du mit einer dynamischen query? ich hab mit php und mysql noch nicht so die erfahrung, nur die Grundlagen aus der schule...

das ist der code den ich zur verfuegung hab ... natuerlich das ganze noch 7 mal... bei mittwoch ist halt dann like W und so weiter.. ist alles auf englisch hier..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na gut.... :D

Nehmen wir also an, in Deinem Formular steht das hier:


<form action = "meinedatei.php" method="post">
.....
<select name="tag">
<option value="M">Montag</option>
....
<option value="S">Sonntag</option>
</select>
....
[/PHP]

Dann kannste in der Datei "meinedatei.php" den Wert von $_POST['tag'] aus dem Formular in Deine DB Query einbauen.

Du brauchst nur naoch eine DB Query die dynamisch aus dem Formular gefüttert wird.

Und das war es eigentlich..

Noch ein Tipp!

Aus dem "[...]LIKE '%M%' [...]" in Deiner Query mach bitte unbedingt ein "[...] =".$_POST['tag]."' [...]", weil ein "Like" immer sehr viel an Performance kostet.

Hat die Tabelle sehr viele Einträge, dann solltest Du von der Kennzeichnung der Wochertage durch Buchstaben weggehen und sie durch Zahlen ersetzen.

Hier bietet sich an, die Zahlen für die Wochentage der date(); Funktion zu übernehmen.... also "0" für Sonntag bis "6" für Samstag, da ein Zugriff auf ein vernünftig indexiertes Zahlenfeld immer in "Null Zeit" passiert (Egal ob 5 Einträge in der Tabelle, oder 2 Mio!), ein Zugriff auf ein indexiertes varchar Feld allerdings sehr viel an MySQL Performance "frisst".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Noch ein Tipp!

Aus dem "[...]LIKE '%M%' [...]" in Deiner Query mach bitte unbedingt ein "[...] =".$_POST['tag]."' [...]", weil ein "Like" immer sehr viel an Performance kostet.

Wo wir hier gerade bei Tipps sind:

Gebe niemals Benutzereingaben ungefiltert an die Datenbank weiter!

SQL-Injection


"[...] ='".mysql_real_escape_string($_POST['tag'])."' [...]"

Zusätzlich sollte man vorher noch die Gültigkeit der Eingabe überprüfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, also erstmal vielen vielen dank fuer eure vielen Antworten. Ich habe es jetzt bisher soweit geloest. Nur ein Problem stellt sich mir noch, dass ich immer noch nicht weiss, was genau in dem weekdays feld drin steht. Jetz hab ich da eine Frage... und zwar ist es bei der if abfrage irgendwie moeglich, dass man eingibt, dass z.b. nur ein Buchstabe in der Variable, in der ich die Ergebnisse der Abfrage gespeichert habe, vorkommt. Es jedoch auch andere Buchstaben noch sein koennen...

also mal angenommen ich habe hier eine Variable mit weekdays, in der W, S steht, ich aber nie genau weiss was drin steht, waere es moeglich dann eine if abfrage zu starten in etwa so:

if ($bla == "%W%)??? da gibt er mir dann nichts aus.. wie kann ich das noch am besten loesen??

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, jetzt will ers ganz anders..

er will die sql abfragen beibehalten und die ausgabe dann mit einer foreach schleife geloest.. aber er weiss nicht genau wie, weil er php selbst nicht kann... toll wie bring ich jetz 6 sql abfragen in eine foreach schleife, dass ich auch nur einmal die ausgabe im code hab???

ich peils nicht

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hä?

Bist Du in einer ABM ? :D

Warum foreach?

Foreach ist so ziemlich die "teuerste" Schleife die es in php gibt.

Im Übrigen habe ich nicht ganz verstanden wie er das gelöst haben will...

Er will also die 7 Abfragen beibehalten und die Ausgabe anstelle von z.B. "While($row=mysql_fetch_array($result)){...." in ein foreach Konstrukt gewandelt haben?

Wir können natürlich den DB Connect noch mit einer handvermittelten Verbindung über die Raumstation ISS lösen :floet:

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

na toll... ich kann auch nix dafuer :(((

ja genau so will er es haben.. also dass ich 6 abfragen mach.. weil fuer sonntag brauch ich sie nicht.. und dann irgendwie mit ner variabel $day oder sowas mit foreach die ausgabe machen lasse???

so und was jetz?? er sagt er hat keine ahnung von php.. nur von perl..

Link zu diesem Kommentar
Auf anderen Seiten teilen

ne es soll kein uebungsprojekt sein.. habs jetz auch irgendwie geloest.. nur hab ich jetz noch das problem, dass ich meine ausgabe ordnen muss.. momentan zeigts mir so an

Tuesday 10:00:00 14:00:00 A205

Wednesday 10:00:00 14:00:00 A205

Saturday 10:00:00 14:00:00 A205

Tuesday 10:00:00 14:00:00 T103

Wednesday 10:00:00 14:00:00 T103

Saturday 10:00:00 14:00:00 T103

jedoch sollte erst alle tuesday dann alle wednesday usw anzeigen.. jetzt weiss ich nicht wie ich das ganze am besten ordnen kann??

Link zu diesem Kommentar
Auf anderen Seiten teilen

jedoch sollte erst alle tuesday dann alle wednesday usw anzeigen.. jetzt weiss ich nicht wie ich das ganze am besten ordnen kann??

das ist IMO nicht so ohne weiteres im SQL-query - ohne manipulation - möglich, da das feld weekday bei dir wahrscheinlich (zumindest habe ich aus deinem post nicht anderes herauslesen können) vom datentyp CHAR ist - ist dem so?

Tuesday 10:00:00 14:00:00 A205

sind start_time und end_time im übrigen vom typ TIME?

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...