[PHP/MYSQL] Für Kalendererstellung nur 1 Datenbank anstatt 364 Datenbänke

digiTALE

Lt. Junior Grade
Registriert
Juli 2004
Beiträge
270
Alooa,

ich bin gerade dabei per HTML/PHP eine Geburtstagskalender zu erstellen. Dann müsste ich für jeden Tag eine Datenbank erstellen, sprich insgesamt 364/365 Datenbanken über PHPMYADMIN. Bei dem untenstehenden Script müsste ich soviel Datenbänke machen und das ist dann im Endeffekt echt viel arbeit. :(
Kann man nur eine Datenbank erstellen wo alles reinkommt aber zum Schluss wenn ich z.B. auf den 01.06.2006 klicke dann nur die Geburtstage vom 01.06. erscheinen!?

Das wäre dann die Abfrage wenn ich dann für jeden Tag eine Datenbank hätte (vordefeniert 01januar):
PHP:
<?php 
$ErgebnisseProSeite = 20; 
$DatabasePointer = mysql_connect("localhost", "username", "password"); 
mysql_select_db("birthday", $DatabasePointer); 
if(!isset($_REQUEST['AktuelleSeite'])) { 
    $AktuelleSeite = 0; 
} 
else { 
    $AktuelleSeite = $_REQUEST['AktuelleSeite']; 
} 
$ResultPointer = mysql_query("SELECT * FROM januar01 $AktuelleSeite, $ErgebnisseProSeite", $DatabasePointer); 
$Anzahl = mysql_num_rows(mysql_query("SELECT * FROM januar01 ORDER BY DESC", $DatabasePointer)); 
echo"<table width=\"480\" cellpadding=\"0\" cellspacing=\"0\">\n"; 
for($i = 0; $i < mysql_num_rows($ResultPointer); $i++) 
{ 
    $birthday = mysql_fetch_object($ResultPointer); 
    echo"<tr>\n", 
        "<td width=\"160\" align=\"center\" height=\"150\">", 
        "<img src=\"$januar01->Bilder\" height=\"140\" width=\"150\"></td>\n", 
        "<td width=\"320\" height=\"150\">", 
        "<div class=\"data\">\n", 
        "<img src=\"../img/trenn_linie_280.png\" width=\"280\" height=\"3\"><br>\n", 
        "&nbsp;<b>Name :</b>", 
        "<span style=\"padding-left:62px\; color=\"$januar01->Farbe\">$januar01->Name", 
        "</span><br>\n", 
        "<img src=\"../img/trenn_linie_280.png\" width=\"280\" height=\"3\"><br>\n", 
        "&nbsp;<b>Alter :</b>", 
        "<span style=\"padding-left:68px\"; color=\"$januar01->Farbe\">", 
        "<script type=\"text/javascript\">alter($januar01->Geburtstag2);</script>", 
        "</span><br>\n", 
        "<img src=\"../img/trenn_linie_280.png\" width=\"280\" height=\"3\"><br>\n", 
        "&nbsp;<b>Geburtstag :</b>", 
        "<span style=\"padding-left:27px\"; color=\"$januar01->Farbe\">$januar01->Geburtstag1",             
        "</span><br>\n", 
        "<img src=\"../img/trenn_linie_280.png\" width=\"280\" height=\"3\"><br>\n", 
        "&nbsp;<b>Sternzeichen :</b>", 
        "<span style=\"padding-left:14px\"; color=\"#888888\">$januar01->Sternzeichen",     
        "</span><br>", 
        "<img src=\"../img/trenn_linie_280.png\" width=\"280\" height=\"3\"><br>\n", 
        "&nbsp;<b>Gruppe :</b>", 
        "<span style=\"padding-left:52px\"; color=\"#888888\">$januar01->Gruppen",         
        "</span><br>", 
        "<img src=\"../../img/trenn_linie_280.png\" width=\"280\" height=\"3\">\n", 
        "&nbsp;<b>Erstellt am :</b><span style=\"padding-left:29px\">", 
        substr($januar01->Datum, 8, 2), 
        ".", 
        substr($januar01->Datum, 5, 2), 
        ".", 
        substr($januar01->Datum, 0, 4), 
        " ", 
        substr($januar01->Datum, 10),             
        "</span><br>", 
        "<img src=\"../../img/trenn_linie_280.png\" width=\"280\" height=\"3\">\n",         
        "<br></div></td>\n", 
        "</tr>\n", 
        "<tr>\n", 
        "<td width=\"160\" height=\"28\"></td>\n", 
        "<td width=\"320\" height=\"28\" class=\"edit_user\">", 
        "&nbsp;<img src=\"../img/edit_user.png\" width=\"10\" height=\"10\" align=\"absmiddle\">", 
        "&nbsp;Eintrag bearbeiten &nbsp;&nbsp;&nbsp;\n", 
        "<img src=\"../img/delete_user.png\" width=\"10\" height=\"10\" align=\"absmiddle\">", 
        "&nbsp;Eintrag löschen</td>\n", 
        "</tr>\n";         
} 

echo "</table>"; 
if($Anzahl > $ErgebnisseProSeite) { 
    $Seiten = intval($Anzahl/$ErgebnisseProSeite); 
    if($Anzahl%$ErgebnisseProSeite) { 
        $Seiten++; 
    } 
    echo "Seite";    
} 
for($i = 1; $i <= $Seiten; $i++) { 
    echo"<a href=\"01jan.php?AktuelleSeite=", 
    ($i-1)*$ErgebnisseProSeite, "\">$i</a> "; 
} 
?>

MYSQL Tabelle besteht aus folgenden Spalten:
- Datum datetime,
- Name varchar(50),
- Geburtstag1 varchar(20),
- Geburtstag2 varchar(20),
- Sternzeichen varchar(20),
- Gruppen varchar(30),
- Bilder varchar(200),
- Farbe varchar(20)


Wie kann man das umändern das man nur eine Datenbank brauch und zu den entsprechenden Tagen den entsprechenden Geburtstag anzeigt ?

Danke im voraus!
mfg digiTALE
 
Wofür Geburtstag 1 und Geburtstag 2?

Wenn das Feld Geburtstag dann z.B. 20.12.1980 hat,

kannst du eine Abfrage machen:

SELECT * FROM geburtstage WHERE birthday like '20.12.%'

Sprich du übergibst z.B. birthdays.php?date=20.12

Im Script dann:

$date = $_REQUEST['date'];

Und dann ne Abfrage:
"SELECT * FROM geburtstage WHERE birthday like '".$date.".%'"

Du brauchst nur eine Tabelle und ein Script für die Abfrage, mehr nicht.
 
Einfach das DateTime in der Query abfragen:
select * from TABELLE where Datum='2006-01-01'
 
Schreib doch einfach was du genau vorhast, die wenigsten werden hier deinen Code auseinandernehmen wollen.
Wie kommst du auf 364 Datenbänke, du benutzt im Code nur eine einzige.
datenbanken != Tabellen
 
@ Blutschlumpf
Ja das ist nur eine Datenbank für den 01.Januar, dachte ich muss für jeden Tag eine Datenbank schreiben -> deshalb komme ich auf 364 insgesamt. Naja deshlab hab ich ja hier nachgefragt!

Ich möchte in einer Datenbank alle Geburtstage eintragen/erstellen können. Später wenn ich zum Beispiel die Seite vom 01.06.2006 öffne sollen nur die Geburtstage vom 01.06.* erscheinen!


Ansonsten THX an alle, werds gleich mal ausprobieren

mfg digiTALE
 
warum machst du nicht einfach ne table "kalender" wo du im wesentlichen 2 Felder hast: das datum und den inhalt. wenn du dann spezifisch 1 bestimmten tag anzeigen willst machste halt nen nen select + where dadrauf und gibst das ergebnis in einer schleife aus.

edit -> da waren einige fixer sry
 
@CrazyWolf

Wo muss ich das " WHERE birthday like '".$date.".%'" " eintragen?

PHP:
$ResultPointer = mysql_query("SELECT * FROM Geburtstage ORDER BY Datum DESC LIMIT $AktuelleSeite, 
$ErgebnisseProSeite", $DatabasePointer);

oder
PHP:
$Anzahl = mysql_num_rows(mysql_query("SELECT * FROM Geburtstage ORDER BY Datum DESC", 
$DatabasePointer));



Muss ich dann das $date umändern als $geburtstag, weil ich ja keine Spalte habe mit Date!

mfg digiTALE
 
Zuletzt bearbeitet:
Damit du die Geburtstage vernünftig sortieren kannst, würde ich sie in dieser Form in der Datenbank ablegen: "yyyy.mm.dd". Du brauchst um das zu realiseren nur eine Datenbank und eine Tabelle "Geburtstage". Die Struktur der Tabelle sollte so aussehen:

ID, Datum, Name

Ich denke die Struktur ist klar, oder? Um dann an alle Geburtstage vom aktuellen Datum zu gelangen musst nur nur folgenden Query an die DB schicken:

[code-schnippel-an]

$aktuellesdatum = date("____.m.d");

$query = "SELECT * FROM Geburtstage WHERE Datum LIKE '$aktuellesdatum'";

[code-schnippel-ende]

MfG
 
Zuletzt bearbeitet:
Das wird in der Datenbank hinterlegt:

Datum -> (Erstellungsdatum des Eintrages)
Name -> (Der Name der eingetragenen Person)
Geburtstag -> (sein Geburtstag)
Sternzeichen -> (sein Sternzeichen)
Gruppe -> (zu wem die Person gehört)
Bilder -> (hier wird der Bilderpfad des Bildes der Person gespeichert)
Farbe -> (wird farblich angepasst ob männlich oder weiblich)

@merv
Also müsste ich schon beim Eingabeformular so das Datum eingeben "yyyy.mm.dd" ? Oder kann ich das normal eingeben und ein Script wandelt das dann so um?


Die Daten vom Formular werden dann an das darunterstehende Script übergeben und in der Datenbank abgespeichert
PHP:
<?php
 
$DatabasePointer = mysql_connect("localhost", "username", "password");

mysql_select_db("Geburtstage", $DatabasePointer);
 
$SQL = "INSERT INTO Geburtstage (Datum, Name, Geburtstag, Sternzeichen,
Gruppe, Bilder, Farbe) VALUES (NOW(''),
'".$_REQUEST['Name']."',
'".$_REQUEST['Geburtstag']."',
'".$_REQUEST['Sternzeichen']."',
'".$_REQUEST['Gruppe']."',
'".$_REQUEST['Bilder']."',
'".$_REQUEST['Farbe']."')";

mysql_query($SQL, $DatabasePointer);
 
if(mysql_affected_rows($DatabasePointer) == 1)
{
?>
Erfolgreich in der Datenbank abgelegt<br>
<a href="01jan..php">Zur&uuml;ck</a>
<?php
}
else
{
?>
Beim Eintragen ist ein Fehler aufgetreten.<br>
<a href="javascript:history.back();">Zur&uuml;ck</a>
<?php
}
?>


Ist das jetzt nun richtig wenn ich das jetzt ändere "$aktuellesdatum = date("____.m.d");" --> "$aktuellesdatum = date("____.12.29"); ?

Was ist eigentlich mit "ID" gemeint?

Bin noch ziehmlich am Anfang mit meinem PHP, also habt einwenig nachsicht mit mir! *g

mfg digiTALE
 
Zuletzt bearbeitet:
Ist das jetzt nun richtig wenn ich das jetzt ändere "$aktuellesdatum = date("____.m.d");" --> "$aktuellesdatum = date("____.12.29"); ?

Nein! Die Funktion date erzeugt ja für den aktuellen Tag das Datum in dem Format: ____.mm.dd; kannst du auch einfach mal ausprobieren in dem du

$aktuellesdatum = date("____.m.d");

per echo ausgeben lässt. Wäre ja schön blöd, wenn du per Hand für jeden Tag das Datum eingeben müsstest!

Du musst das Datum nicht so eingeben lassen: yyyy.mm.dd. Du kannst das eingegeben Datum aber einfach in diese Form bringen:

Du hast für den Tag, den Monat und das Jahr einfach je ein(e) Form:

<form type="text" name="tag">
....

Auslesen kannst du das dann ja so:

$tag = $_POST['tag'];

und um das nun so umzuwandeln für die Datenbank kannst du die 3 Variablen einfach zusammen "kleben" bzw. verketten:

$db_datum = $jahr;
$db_datum .= ".";
$db_datum .= $monat;
$db_datum .= ".";
$db_datum .= "$tag";

Am schluss kommt dann sowas raus: "1983.07.07".

Mit ID meine ich übrigens eine eindeutige ID für jeden Datensatz die mit dem Primärschlüsselversehen ist und bei mysql per Auto_Increment automatisch um einen erhöht wird. Hintergrund der Sache ist die, dass jeder Datensatz eindeutig sein sollte!. Und da Name, Geburtstag etc gleich sein können, theoretisch, kann man die Datensätze nur anhand einer eindeutigen ID, Nummer oder Key (Der Name spielt keine Rolle!) voneinander unterscheiden.

Das mit der geschlechtsspezifischen Farbe würde ich übrigens so machen: In die Tabelle kommt eine Spalte "Geschlecht" und das kann den Wert "m" oder "w" haben. Beim auslesen kann man dann die Farbe bestimmen:

if($geschlecht == "m")
{
$farbe = blau;
} else {
$farbe = rosa;
}

Oder so in der Art ;)

Gruß und Viel Erfolg
 
Hey

1. Habe das mit der ID vergabe hinbekommen. Die Datenbank erstellt bei jedem neuen Eintrag eine neue Nummer sprich er fängt bei 1 an :-).

2. Dann habe ich den Code für das Datumformat in das Script eingefügt das die Daten in die Datenbank schreibt.
-> ist das so richtig ?
PHP:
<?php 
$DatabasePointer = mysql_connect("localhost", "...", "..."); 

mysql_select_db("geburtstage", $DatabasePointer);

$SQL = "INSERT INTO geburtstage (Datum, Name, Geburtstag, Sternzeichen, 
Gruppe, Bilder, Farbe) VALUES (NOW(''), 
'".$_REQUEST['Name']."', 
'".$_REQUEST['Geburtstag']."', 
'".$_REQUEST['Sternzeichen']."', 
'".$_REQUEST['Gruppe']."', 
'".$_REQUEST['Bilder']."', 
'".$_REQUEST['Farbe']."')";

$aktuellesdatum = date("____.m.d");

$query = "SELECT * FROM Geburtstage WHERE Geburtstag LIKE '$aktuellesdatum'";

mysql_query($SQL, $DatabasePointer); 
		  
if(mysql_affected_rows($DatabasePointer) == 1) { 
?>

3. Wenn ich auf die Seite vom 06.Juni gehe, will ich nur die Daten vom 6.Juni ausgegeben haben. Wie kann ich das realisieren !?

mfg digiTALE
 
Zuletzt bearbeitet:
Alle Geburtstage am 6.6.

SELECT * FROM Geburtstage WHERE Geburtstag LIKE '____.06.06';

Ich würde an deiner Stelle statt mit $_REQUEST mit $_POST arbeiten. Zudem würde ich die übergebenen Daten überprüfen, also ob keine nicht gewünschten Daten eingetragen werden.
 
N'Abend,

das mit der Ausgabe hat Funktioniert!! Zu jedem bestimmten Datum zeigt er mir den richtigen Geburtstag an. Genauso mit der Farbe hat das auch geklappt :) :cool_alt:

Warum soll ich das "$_REQUEST" durch "$_POST" ? Soll man das REQUEST nicht dafür nehmen oder was steckt dahinter?


Achso, eine Frage noch. Wie kann ich einen Link einrichten der mir die Person löscht (wenn ausversehen der Geburtstag falsch [Zahlendreher] eingegeben worden ist). Muss ja dann irgendwie mit der "ID" gehen !?

mfg digiTALE
 
Zurück
Oben