|
bituniverse.com Entwickler Forum
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Di 17 Feb, 2009 18:45 Titel: Projekt Sendeplan - Datenbankstruktur |
|
|
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: |
<form name="send" method="POST" onSubmit="return pruefung(this)"
action="http://www.radio-mittelrhein.de/include.php?path=intern/sendeplan/send.php">
<table border="1">
<tr>
<td>Nickname</td>
<td><input name="nickname"></td>
</tr>
<tr>
<td>Tag</td>
<td><select size="1" name="tag">
<option value="mo">Montag</option>
<option value="di">Dienstag</option>
<option value="mi">Mittwoch</option>
<option value="do">Donnerstag</option>
<option value="fr">Freitag</option>
<option value="sa">Samstag</option>
<option value="so">Sonntag</option>
</select></td>
</tr>
<tr>
<td>Uhrzeit</td>
<td><select size="1" name="uhrzeit">
<option value="1618">16-18 Uhr</option>
<option value="1820">18-20 Uhr</option>
<option value="2022">20-22 Uhr</option>
<option value="2200">22-00 Uhr</option>
</select></td>
</tr>
<tr>
<td>Sendungsname</td>
<td><input name="sendungsname"></td>
</tr>
</table>
<input type="submit" value="Absenden" name="B1"><input type="reset" value="Zurücksetzen" name="B2">
</form>
|
Ich habe mir eine Datenbanktabelle wie folgt angelegt:
| Code: |
Felder:
ID, tinyint(4), UNSIGNED NUL NEIN
nickname, varchar(30), utf8_general_ci, NULL NEIN
uhrzeit, varchar(12), utf8_general_ci, NULL NEIN
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. 
Danke und Grüße aus "Kölle"
Christoph
_________________
Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm 
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Di 17 Feb, 2009 19:48 Titel: |
|
|
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 |
|
 |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Di 17 Feb, 2009 21:50 Titel: |
|
|
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 
_________________
Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm 
|
|
| Nach oben |
|
 |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Mi 18 Feb, 2009 02:40 Titel: |
|
|
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: |
<html>
<head>
<script language="JavaScript">
function pruefung(send)
{
if(send.nickname.value.length < 1 )
{
alert("Bitte gib Deinen Nicknamen ein")
return false
}
if(send.tag.value.length < 1 )
{
alert("Bitte wähle einen Sendetag aus")
return false
}
if(send.uhrzeit.value.length < 1 )
{
alert("Bitte wähle eine Uhrzeit aus")
return false
}
if(send.sendungsname.value.length < 1 )
{
alert("Bitte gib einen Sendungsnamen an")
return false
}
else alert("Deine Daten wurden erfolgreich eingetragen")
return true
}
</script>
</head>
<body>
<?php
include ("config/db_config.php");
?>
<form name="send" method="POST" onSubmit="return pruefung(this)"
action="http://www.radio-mittelrhein.de/sendeplanscript/send.php">
<table border="1">
<tr>
<td>Nickname</td>
<td><input name="nickname"></td>
</tr>
<tr>
<td>Tag</td>
<td><select size="1" name="tag">
<option value="Montag">Montag</option>
<option value="Dienstag">Dienstag</option>
<option value="Mittwoch">Mittwoch</option>
<option value="Donnerstag">Donnerstag</option>
<option value="Freitag">Freitag</option>
<option value="Samstag">Samstag</option>
<option value="Sonntag">Sonntag</option>
</select></td>
</tr>
<tr>
<td>Uhrzeit</td>
<td><select size="1" name="uhrzeit">
<option value="16-18 Uhr">16-18 Uhr</option>
<option value="18-20 Uhr">18-20 Uhr</option>
<option value="20-22 Uhr">20-22 Uhr</option>
<option value="22-00 Uhr">22-00 Uhr</option>
</select></td>
</tr>
<tr>
<td>Sendungsname</td>
<td><input name="sendungsname"></td>
</tr>
</table>
<input type="submit" value="Absenden" name="B1"><input type="reset" value="Zurücksetzen" name="B2">
</form>
</body>
</html>
<?php
$select = "SELECT * from $table";
$result = mysql_query($select);
$db_tag=['tag'];
$db_uhrzeit=['uhrzeit'];
if ($db_tag == ['tag'] & $db_uhrzeit == ['uhrzeit']
{
echo "Fehler, Sendezeit bereits belegt";
}
else
{
$nickname = $_POST ['nickname'];
$tag = $_POST ['tag'];
$uhrzeit = $_POST ['uhrzeit'];
$sendungsname = $_POST ['sendungsname'];
$eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
mysql_query ($eintrag);
mysql_close ();
}
?>
|
_________________
Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm 
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Mi 18 Feb, 2009 10:30 Titel: |
|
|
| Php: |
<?php
$select = "SELECT * from $table";
$db_tag=['tag'];
$db_uhrzeit=['uhrzeit'];
?>
|
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 |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Mi 18 Feb, 2009 10:32 Titel: |
|
|
Hmm, ich darf nicht so viele Links in einen Beitrag packen, deswegen hier noch welche zu Punkt 1 
de.php.net oder de.php.net
|
|
| Nach oben |
|
 |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Mi 18 Feb, 2009 23:49 Titel: |
|
|
@M
vorab vielen Dank für Deine Hilfe.
Bin ich so auf dem richtigem Weg?
| Code: |
<?php
$select = "SELECT tag, uhrzeit from $table";
$result = mysql_query($select);
mysql_fetch_assoc ($result);
$nickname = (addslashes ($_POST ['nickname'] ));
$tag = (addslashes ($_POST ['tag'] ));
$uhrzeit = (addslashes ($_POST ['uhrzeit'] ));
$sendungsname = (addslashes ($_POST ['sendungsname'] ));
$eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
mysql_query ($eintrag);
mysql_close ();
?>
|
Kann ich jetzt nach dem mysql_fetch_assoc meine if/else abfrage starten ??
_________________
Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm 
|
|
| Nach oben |
|
 |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Do 19 Feb, 2009 00:37 Titel: |
|
|
Also langsam weiss ich nimmer weiter 
| Code: |
<?php
$select = "SELECT tag, uhrzeit from $table";
$result = mysql_query($select);
mysql_fetch_assoc ($result);
if ($result ['tag'] == $tag & ($result ['uhrzeit'] == $uhrzeit))
{
echo "Sendeplatz bereits vergeben";
}
else
{
$nickname = (addslashes ($_POST ['nickname'] ));
$tag = (addslashes ($_POST ['tag'] ));
$uhrzeit = (addslashes ($_POST ['uhrzeit'] ));
$sendungsname = (addslashes ($_POST ['sendungsname'] ));
$eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
mysql_query ($eintrag);
mysql_close ();
}
?>
|
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 
|
|
| Nach oben |
|
 |
M
Anmeldedatum: 05.11.2007 Beiträge: 107 Wohnort: Aachen
|
Verfasst am: Do 19 Feb, 2009 00:39 Titel: |
|
|
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 |
|
 |
Christoph
Anmeldedatum: 17.02.2009 Beiträge: 38 Wohnort: Köln
|
Verfasst am: Do 19 Feb, 2009 01:49 Titel: |
|
|
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: |
<?php
$select = "SELECT tag, uhrzeit from $table";
$result = mysql_query($select);
while ($row = mysql_fetch_assoc ($result) )
{
$dbtag = $row ['tag'];
$dbuhrzeit = $row ['uhrzeit'];
}
if ($dbtag ['tag'] == $tag & ($dbuhrzeit ['uhrzeit'] == $uhrzeit))
{
echo "Sendeplatz bereits vergeben";
}
else
{
$nickname = (addslashes ($_POST ['nickname'] ));
$tag = (addslashes ($_POST ['tag'] ));
$uhrzeit = (addslashes ($_POST ['uhrzeit'] ));
$sendungsname = (addslashes ($_POST ['sendungsname'] ));
$eintrag = "INSERT INTO $table (nickname, tag, uhrzeit, sendungsname)
VALUES ('$nickname', '$tag', '$uhrzeit', '$sendungsname' )";
mysql_query ($eintrag);
mysql_close ();
}
?>
|
_________________
Computerstörungen sitzen immer ca. 50 cm. vor dem Bildschirm 
|
|
| Nach oben |
|
 |
|
|
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
|