pinablubb Geschrieben 17. April 2007 Geschrieben 17. April 2007 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... Zitieren
Amstelchen Geschrieben 17. April 2007 Geschrieben 17. April 2007 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 Zitieren
pinablubb Geschrieben 17. April 2007 Autor Geschrieben 17. April 2007 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 Zitieren
Eupinkepank Geschrieben 19. April 2007 Geschrieben 19. April 2007 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 Zitieren
pinablubb Geschrieben 19. April 2007 Autor Geschrieben 19. April 2007 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.. Zitieren
Amstelchen Geschrieben 19. April 2007 Geschrieben 19. April 2007 beantworte bitte mal die fragen - ohne dem kann man nichts genaueres sagen: - was genau steht in der spalte weekdays drinnen? M, T, W, ...? - woher kommen die daten, die als basis für die abfrage dienen? s'Amstel Zitieren
pinablubb Geschrieben 19. April 2007 Autor Geschrieben 19. April 2007 In der Spalte Weekdays stehen nur die Buchstaben drin, M fuer Montag, T fuer Dienstag usw... Die Daten kommen alle aus einer Datenbank, oder wie meinst du das? Zitieren
Eupinkepank Geschrieben 20. April 2007 Geschrieben 20. April 2007 Ich möchte halt gerne wissen, woher die Information kommt, ob nun "Montag" oder "Dienstag" angezeigt werden soll. Zitieren
pinablubb Geschrieben 20. April 2007 Autor Geschrieben 20. April 2007 das ist ne tabelle, in der unter anderem die spalte weekdays ist, in der allerdings nur einelne buchstaben wie M fuer monday, T fuer tuesday usw stehen... in dieser Tabelle sind dann auch alle anderen Daten.. die Tabelle heisst classes.... Zitieren
Eupinkepank Geschrieben 20. April 2007 Geschrieben 20. April 2007 Wir reden aneinader vorbei... Wie wählt der Bediener aus, ob Montag oder z.B. Dienstag angezeigt werden soll? Kommt das aus einem HTML Formular oder so? Zitieren
pinablubb Geschrieben 20. April 2007 Autor Geschrieben 20. April 2007 achso das meinst du *ggg* ja das kommt aus einem html formular *ggg* sorry dass ichs jetzt erst verstanden hab... hier gibt der schueler dann seine id, seinen namen und seine email ein und kann damit dann eine raumreservierung anfragen... Zitieren
Eupinkepank Geschrieben 26. April 2007 Geschrieben 26. April 2007 Na gut.... 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". Zitieren
Monty82 Geschrieben 26. April 2007 Geschrieben 26. April 2007 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. Zitieren
pinablubb Geschrieben 26. April 2007 Autor Geschrieben 26. April 2007 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?? Zitieren
pinablubb Geschrieben 26. April 2007 Autor Geschrieben 26. April 2007 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 Zitieren
Eupinkepank Geschrieben 27. April 2007 Geschrieben 27. April 2007 Hä? Bist Du in einer ABM ? 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: Zitieren
pinablubb Geschrieben 27. April 2007 Autor Geschrieben 27. April 2007 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.. Zitieren
Eupinkepank Geschrieben 30. April 2007 Geschrieben 30. April 2007 Naja.... Soll das ein Übungsprojekt für Dich sein? Wenn nicht, soltest Du ihm sagen, dass das absoluter Müll ist was er da von Dir erwartet. Wenn ja, solltest Du es halt lösen. Ist zwar "doof und umständlich", aber dennoch realisierbar. Zitieren
pinablubb Geschrieben 30. April 2007 Autor Geschrieben 30. April 2007 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?? Zitieren
Amstelchen Geschrieben 30. April 2007 Geschrieben 30. April 2007 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 Zitieren
pinablubb Geschrieben 1. Mai 2007 Autor Geschrieben 1. Mai 2007 ja die weekdays felder sind char... leider und man kann sie nicht mal alphabetisch oder so ordnen des nervt mich so dermassen ja die start_time und end_time sind date so viel ich weiss... Zitieren
Empfohlene Beiträge
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.