bituniverse.com Foren-Übersicht bituniverse.com
Entwickler Forum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Projekt Sendeplan - Datenbankstruktur
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Di 17 Feb, 2009 18:45    Titel: Projekt Sendeplan - Datenbankstruktur Antworten mit Zitat

Hallo zusammen,

ich mache mir grade Gedanken über ein Projet "Sendeplan" und bin über die Forensuche über "Abfrage über mehrere Tabellen" und "Join" gestolpert, aber ich kann noch nicht richtig zuordnen, was für mich richtig ist.

Was möchte ich:

Ich möchte, dass meine Modis ihren Sendeplan über ein Formular in die Datenbank schreiben, und die hörer über ein PHP-Script den Sendeplan abrufen und sich anzeigen lassen können - Soweit eigentlich nicht so schwierig, habe das mit einfachen Formularen mehrfach schon gemacht, kein Problem. Aber nun wird es für mich als Anfänger etwas schwierig.

Ich habe ein Formular geschrieben, wo der Moderator eingeben soll:

Nickname (Textfeld)
Tag (DropDown Menue)
Uhrzeit (DropDown Menue)
Sendungsname (Textfeld)

Hier mal das Form (send.php):
Code:
  1. <form name="send" method="POST" onSubmit="return pruefung(this)"
  2. action="http://www.radio-mittelrhein.de/include.php?path=intern/sendeplan/send.php">
  3.  
  4. <table border="1">
  5.   <tr>
  6.     <td>Nickname</td>
  7.     <td><input name="nickname"></td>
  8.   </tr>  
  9.  
  10.   <tr>
  11.     <td>Tag</td>
  12.     <td><select size="1" name="tag">
  13.   <option value="mo">Montag</option>
  14.   <option value="di">Dienstag</option>
  15.   <option value="mi">Mittwoch</option>
  16.   <option value="do">Donnerstag</option>
  17.   <option value="fr">Freitag</option>
  18.   <option value="sa">Samstag</option>
  19.   <option value="so">Sonntag</option>
  20.   </select></td>
  21.   </tr>
  22.  
  23.   <tr>
  24.     <td>Uhrzeit</td>
  25.     <td><select size="1" name="uhrzeit">
  26.   <option value="1618">16-18 Uhr</option>
  27.   <option value="1820">18-20 Uhr</option>
  28.   <option value="2022">20-22 Uhr</option>
  29.   <option value="2200">22-00 Uhr</option>
  30.   </select></td>
  31.   </tr>
  32.  
  33.   <tr>
  34.     <td>Sendungsname</td>
  35.     <td><input name="sendungsname"></td>
  36.   </tr>
  37. </table>
  38. <input type="submit" value="Absenden" name="B1"><input type="reset" value="Zurücksetzen" name="B2">
  39. </form>

Ich habe mir eine Datenbanktabelle wie folgt angelegt:

Code:
  1. Felder:
  2. ID, tinyint(4), UNSIGNED NUL NEIN
  3. nickname, varchar(30), utf8_general_ci, NULL NEIN
  4. uhrzeit, varchar(12), utf8_general_ci, NULL NEIN
  5. sendungsname, varchar(50), utf8_general_ci, NULL NEIN

Nun weiss ich nicht, ob ich für jeden Wochentag und jede Uhrzeit, 1618, 1820, 2022, 2200...ein separates Feld anlegen, und diese dann aus dem Formular per separaten $_POST Variablen übergeben muss.

Ich denke da an evtl. Überschneidungen - Sprich, wenn ein Moderator sich für MO. 18-20 Uhr eintragen will, diese Sendezeit aber bereits vergeben ist, so soll der Vorhandene Datensatz ja nicht überschrieben werden, sondern das send.php soll eine Prüfung vornehmen, ob in der Datenbank bereits ein Eintrag zu diesem Tag und der Uhrzeit vorhanden ist - ist der Wert "true", soll eine Meldung ausgegeben werden "bereits belegt" o. ä.

Oh ha, ich hoffe, ich hab mich einigermassen verständlich ausgedrückt.

Bitte dieses Post nicht missverstehen, ich möchte nicht, dass mir das Jemand coded, dann lerne ich ja nix, aber entsprechende richtungsweisende Hinweise wären supi. Smile

Danke und Grüße aus "Kölle"
Christoph


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Di 17 Feb, 2009 19:48    Titel: Antworten mit Zitat

Hmm, würde mir jetzt spontan einfallen ein Datumsfeld einzufügen, dass den Starttermin speichert und dann entweder eins für den Endtermin oder eins für die Dauer.

Dann kannst du dir ausrechnen, ob zu einem bestimmten Datum eine Sendung eingetragen ist oder nicht.

dev.mysql.com

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Di 17 Feb, 2009 21:50    Titel: Antworten mit Zitat

Hi M

M hat Folgendes geschrieben:
Hmm, würde mir jetzt spontan einfallen ein Datumsfeld einzufügen, dass den Starttermin speichert und dann entweder eins für den Endtermin oder eins für die Dauer.

Dann kannst du dir ausrechnen, ob zu einem bestimmten Datum eine Sendung eingetragen ist oder nicht.

Also die Datenbankeinträge fluppen soweit - Ich denke, es reicht meinen Anforderungen aus, wenn ich jetzt in der send.php vorher auschecke, ob z. B Montag, 16-18 Uhr bereits ein Eintrag in der Datenbank vorhanden ist. mal sehen, ob ich das hinbekomme. Ich denke, das müsste sich mit einer if/else abfrage realisieren lassen.

Danke Dir für Deine schnelle Antwort Smile


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Mi 18 Feb, 2009 02:40    Titel: Antworten mit Zitat

Soderle, ich bin jetzt an einem Punkt angelangt, wo ich nichtmehr weiter weiss. - Aber vorab, ich denke, es wird jetzt off topic bez. MySql - @Admins, vllt. verschieben nach PHP?

Ich Habe mir jetzt ein Script geschrieben, wo ich denke, dass es gehen sollte, aber es schreibt nicht in die Datenbank. (Lasse ich die if/else Anweisungen weg, schreibt es)

Ich finde den Fehler nicht - So wie es jetzt gecoded ist, erhalte ich einen Parse error:Parse error: syntax error, unexpected '[' in /var/www/vhosts/radio-mittelrhein.de/httpdocs/sendeplanscript/send.php on line 100

Anbei mal meine send.php:
Code:
  1. <html>
  2. <head>
  3.  
  4. <script language="JavaScript">
  5.      
  6.       function pruefung(send)
  7.       {    
  8.           if(send.nickname.value.length < 1 )
  9.           {
  10.               alert("Bitte gib Deinen Nicknamen ein")
  11.               return false
  12.           }
  13.  
  14.        
  15.         if(send.tag.value.length < 1 )
  16.           {
  17.               alert("Bitte wähle einen Sendetag aus")
  18.               return false
  19.           }
  20.  
  21.        
  22.         if(send.uhrzeit.value.length < 1 )
  23.           {
  24.               alert("Bitte wähle eine Uhrzeit aus")
  25.               return false
  26.           }
  27.          
  28.          
  29.           if(send.sendungsname.value.length < 1 )
  30.           {
  31.               alert("Bitte gib einen Sendungsnamen an")
  32.               return false
  33.           }
  34.            
  35.           else alert("Deine Daten wurden erfolgreich eingetragen")
  36.             return true
  37.         }
  38. </script>
  39.  
  40. </head>
  41. <body>
  42.  
  43. <?php
  44. include ("config/db_config.php");
  45.  
  46.  
  47.  
  48.  
  49. ?>
  50.  
  51. <form name="send" method="POST" onSubmit="return pruefung(this)"
  52. action="http://www.radio-mittelrhein.de/sendeplanscript/send.php">
  53.  
  54. <table border="1">
  55.   <tr>
  56.     <td>Nickname</td>
  57.     <td><input name="nickname"></td>
  58.   </tr>  
  59.  
  60.   <tr>
  61.     <td>Tag</td>
  62.     <td><select size="1" name="tag">
  63.   <option value="Montag">Montag</option>
  64.   <option value="Dienstag">Dienstag</option>
  65.   <option value="Mittwoch">Mittwoch</option>
  66.   <option value="Donnerstag">Donnerstag</option>
  67.   <option value="Freitag">Freitag</option>
  68.   <option value="Samstag">Samstag</option>
  69.   <option value="Sonntag">Sonntag</option>
  70.   </select></td>
  71.   </tr>
  72.  
  73.   <tr>
  74.     <td>Uhrzeit</td>
  75.     <td><select size="1" name="uhrzeit">
  76.   <option value="16-18 Uhr">16-18 Uhr</option>
  77.   <option value="18-20 Uhr">18-20 Uhr</option>
  78.   <option value="20-22 Uhr">20-22 Uhr</option>
  79.   <option value="22-00 Uhr">22-00 Uhr</option>
  80.   </select></td>
  81.   </tr>
  82.  
  83.   <tr>
  84.     <td>Sendungsname</td>
  85.     <td><input name="sendungsname"></td>
  86.   </tr>
  87. </table>
  88. <input type="submit" value="Absenden" name="B1"><input type="reset" value="Zurücksetzen" name="B2">
  89. </form>
  90. </body>
  91. </html>
  92.  
  93. <?php
  94.  
  95.   $select = "SELECT * from $table";
  96.   $result = mysql_query($select);
  97.   $db_tag=['tag'];
  98.   $db_uhrzeit=['uhrzeit'];
  99.  
  100.   if ($db_tag == ['tag'] & $db_uhrzeit == ['uhrzeit']
  101.   {
  102.   echo "Fehler, Sendezeit bereits belegt";
  103.   }
  104.   else
  105.   {
  106.   $nickname          = $_POST ['nickname'];
  107.   $tag               = $_POST ['tag'];
  108.   $uhrzeit           = $_POST ['uhrzeit'];
  109.   $sendungsname      = $_POST ['sendungsname'];
  110.  
  111.   $eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
  112.   VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
  113.  
  114.   mysql_query ($eintrag);
  115.   mysql_close ();
  116.   }
  117.   ?>


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Mi 18 Feb, 2009 10:30    Titel: Antworten mit Zitat

Php:
  1. <?php
  2.  
  3. $select = "SELECT * from $table";
  4. $result = mysql_query($select);
  5. $db_tag=['tag'];
  6. $db_uhrzeit=['uhrzeit'];
  7. ?>

Das funktioniert so auch nicht.

1) Musst du wenn du das Querry abgeschickt hast erst das Ergebnis holen. de.php.net

2) Gibt es sowas wie ['tag'] nicht. Was du wohl machen wolltest war $result['tag']. Das ist ein Array. de.php.net

3) Ist es immer empfehlenswert nicht einfach ein SELECT * zu machen, sondern explizit nur die Felder zu holen, die auch benötigt werden.

4) Wenn du innerhalb deines Querrys Variablen verwendest, dann musst du sicherstellen, dass diese nicht durch den späteren Benutzer manipuliert werden können. Ich denke ja mal, dass $table aus deiner db_config.php kommt aber spätestens die per POST übergebenen Werte lassen sich von außen manipulieren. Stichwort SQL Injection

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Mi 18 Feb, 2009 10:32    Titel: Antworten mit Zitat

Hmm, ich darf nicht so viele Links in einen Beitrag packen, deswegen hier noch welche zu Punkt 1 Wink

de.php.net oder de.php.net

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Mi 18 Feb, 2009 23:49    Titel: Antworten mit Zitat

@M

vorab vielen Dank für Deine Hilfe.

Bin ich so auf dem richtigem Weg?

Code:
  1. <?php
  2.  
  3.   $select = "SELECT tag, uhrzeit from $table";
  4.   $result = mysql_query($select);
  5.    
  6.   mysql_fetch_assoc ($result);
  7.  
  8.   $nickname          = (addslashes ($_POST ['nickname'] ));
  9.   $tag               = (addslashes ($_POST ['tag'] ));
  10.   $uhrzeit           = (addslashes ($_POST ['uhrzeit'] ));
  11.   $sendungsname      = (addslashes ($_POST ['sendungsname'] ));
  12.  
  13.   $eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
  14.   VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
  15.  
  16.   mysql_query ($eintrag);
  17.   mysql_close ();
  18.  
  19.   ?>

Kann ich jetzt nach dem mysql_fetch_assoc meine if/else abfrage starten ??


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Do 19 Feb, 2009 00:37    Titel: Antworten mit Zitat

Also langsam weiss ich nimmer weiter Sad

Code:
  1. <?php
  2.  
  3.   $select = "SELECT tag, uhrzeit from $table";
  4.   $result = mysql_query($select);
  5.    
  6.   mysql_fetch_assoc ($result);
  7.  
  8.   if ($result ['tag'] == $tag  & ($result ['uhrzeit'] == $uhrzeit))
  9.     {
  10.     echo "Sendeplatz bereits vergeben";
  11.     }
  12.   else
  13.     {
  14.   $nickname          = (addslashes ($_POST ['nickname'] ));
  15.   $tag               = (addslashes ($_POST ['tag'] ));
  16.   $uhrzeit           = (addslashes ($_POST ['uhrzeit'] ));
  17.   $sendungsname      = (addslashes ($_POST ['sendungsname'] ));
  18.  
  19.   $eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
  20.   VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
  21.  
  22.   mysql_query ($eintrag);
  23.   mysql_close ();
  24.  
  25.     }
  26.  
  27. ?>

Nun gibt er mir das Form direkt mit der Meldung, dass der Sendelatz vergeben ist, aber in der DB steht nichts - Auch wenn ich dann absende, schreibt es nichts in die DB - Es hapert einfach an der if/else - Lasse ich die raus, schreibt es perfekt in die DB, aber natürlich ohne Überprüfung - Was mache ich denn falsch ???


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
M



Anmeldedatum: 05.11.2007
Beiträge: 107
Wohnort: Aachen

BeitragVerfasst am: Do 19 Feb, 2009 00:39    Titel: Antworten mit Zitat

Nein, nicht ganz.

mysql_fetch_assoc() liefert dir ein assoziatives Array mit dem ersten/nächsten Datensatz zurück. Wenn du dieses nicht speicherst, dann landet es im Nirvana und der ganze Aufruf war für die Katz.

Wenn du dann noch alle Datensätze erwischen willst, dann musst du eine Schleife drum herum basteln. Schau dir mal das Beispiel aus dem PHP Manual an, da ist eigentlich alles erklärt.

Bei den SQL-Injections sollte das addslashes() das schlimmste abhalten. Du kannst dir aber zusätzlich noch die Funktionen mysql_real_escape_string(), strip_tags() und htmlentities() anschauen.

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christoph



Anmeldedatum: 17.02.2009
Beiträge: 38
Wohnort: Köln

BeitragVerfasst am: Do 19 Feb, 2009 01:49    Titel: Antworten mit Zitat

Ich komme leider nicht weiter, irgentwo fehlt mir die Logik oder ich denke zu kompliziert - Habe mir die Vorgaben angeschaut und eine Scleife gebastelt, aber es funzelt nicht - Es werden keine Daten in die DB geschrieben.:

Code:
  1. <?php
  2.  
  3.   $select = "SELECT tag, uhrzeit from $table";
  4.   $result = mysql_query($select);
  5.    
  6.   while ($row = mysql_fetch_assoc ($result) )
  7.         {
  8.         $dbtag = $row ['tag'];
  9.         $dbuhrzeit = $row ['uhrzeit'];
  10.         }
  11.   if ($dbtag ['tag'] == $tag  & ($dbuhrzeit ['uhrzeit'] == $uhrzeit))
  12.     {
  13.     echo "Sendeplatz bereits vergeben";
  14.     }
  15.   else
  16.     {
  17.   $nickname          = (addslashes ($_POST ['nickname'] ));
  18.   $tag               = (addslashes ($_POST ['tag'] ));
  19.   $uhrzeit           = (addslashes ($_POST ['uhrzeit'] ));
  20.   $sendungsname      = (addslashes ($_POST ['sendungsname'] ));
  21.  
  22.   $eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
  23.   VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
  24.  
  25.   mysql_query ($eintrag);
  26.   mysql_close ();
  27.  
  28.     }
  29.  
  30. ?>


_________________

Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Datenbanken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB2.de
Powered by WebRing.