Problem mit Datumsübergabe durch Formular an DB

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Problem mit Datumsübergabe durch Formular an DB

Beitrag von porfavor »

Hallo,

in einem Html-Formular, das durch php ausgelesen wird, habe ich ein select Feld, das das Datum erzeugt. Es fängt beim Aktuellen an und zeigt die nächsten 30 Wochen. Jeder Tag kann ausgewählt werden. Jetzt habe ich folgendes Problem:

Alle anderen Felder werden korrekt in die DB eingetragen, nur eben dieses nicht. Egal, was ich für einen Feldtyp wähle. Auch Varchar ergibt "", int "0" , date "0000-00-00"

Das Skript zum Erzeugen des Datums im Formularfeld ist folgendes:

Code: Alles auswählen

$startday = time();
$showweeks = 30; //Wieviele woche auswählbar sind

$starttime = isset($site['attr']['starttime']) ? $site['attr']['starttime'] : (time());
$starttime = mktime(0,0,0,date('m',$starttime),date('d',$starttime),date('Y',$starttime));
$weekdays = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
$gerweekdays = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');
$startday = array_keys($weekdays,date('D',$starttime));
for ($b=$startday[0];$b<$startday[0]+($showweeks*7);$b++) {
$days = isset($days) ? $days : $b-1;
$days = $days>5 ? 0 : $days+1;
$blas['daystamp'] = $starttime;
$blas['daydate'] = date('d.m.Y',$starttime);
$blas['day'] = $gerweekdays[$days];
$addtage[] = $blas;
unset($blas);
$starttime = $starttime+86400;

Es generiert einfach nur die jeweiligen Datumsangaben und gibt sie dann nacher auf der Seite im Dropdownfeld aus...
Doch wie übergebe ich dieses?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

verstehe nicht ganz was du genau meinst...

willst du jetzt vom phpscript aus eine dropdownliste erstellen?
oder willst du wissen, wie man das ausgewählte feld der dropdownliste von html aus in das script übergibt?

ausserdem würde ich den reinen timestamp in der db speichern... (dazu den feldtyp INT mit 10 zeichen länge verwenden...)
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag von porfavor »

Die Dropdownliste wird bereits vom PHP script erstellt. Nur wenn man eine Option auswählt soll sie auch in die DB eingetragen werden, was leider nicht mit einem normalen insert der variable in das feld funktioniert. Ich muss das irgendwie wieder umwandeln...

Wie mache ich das, dass mysql es erkennt?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag von porfavor »

Wie dem auch sei:

Ich habe nun das ganze mit 3 Selects gelöst (sicherlich umständlich, jedoch für meine Zwecke ausreichend) Nun habe ich noch ein kleines Problem, dessen Lösung ich nicht mehr weiß, weil ich lange nicht mehr damit arbeiten musste. Erklärung des Problems:

Mein Script arbeitet mit einem Templatesystem.

Die Daten, die ich aus der DB auslese, werden in einzelne Variablen umgewandelt, was auch super funktioniert und per {$var} ausgegeben wird.
Allerdings geschieht das immer nur mit der ersten Zeile in der Tabelle. Wie kann ich es realisieren, dass alle oder eine bestimmte Anzahl von Einträgen ausgegeben wird?

Hier mal der code:

Code: Alles auswählen

<?php
$verbindung = mysql_connect("localhost","root","");
mysql_select_db("jgr", $verbindung);
$result = mysql_query("SELECT * FROM events");
$result2 = mysql_fetch_array($result);
$titel = $result2['titel'];
$day = $result2['day'];
$month = $result2['month'];
$year = $result2['year'];
$time = $result2['zeit'];
$description = $result2['description'];
mysql_close($verbindung);

include template('container.tpl');
?>
Wie kann ich das realisieren, dass ich nacher bei der Ausgabe bekomme

Titel1, Tag1...<br>
Titel2, Tag2...

?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

Wie mache ich das, dass mysql es erkennt?
indem du den timestamp ("time()") übergibst...

ein eintrag der auswahlliste würde dann so aussehen:

Code: Alles auswählen

<option value="(timstamp)">sonntag, 23. 11. 2008</option>
und im script kannst du dann den timestamp gleich der db übergeben...
je nachdem solltest du den timestamp verschlüsselt ausgeben, da er relativ leicht manipuliert werden kann ;) (nitcht mit md5() sondern mit base64_encode()/base64_decode() und mit einem kurzen hash)

Die Daten, die ich aus der DB auslese, werden in einzelne Variablen umgewandelt, was auch super funktioniert und per {$var} ausgegeben wird.
Allerdings geschieht das immer nur mit der ersten Zeile in der Tabelle. Wie kann ich es realisieren, dass alle oder eine bestimmte Anzahl von Einträgen ausgegeben wird?
um alle auszugeben:

Code: Alles auswählen

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$titel[] = $result2['titel'];
$day[] = $result2['day'];
$month[] = $result2['month'];
$year[] = $result2['year'];
$time[] = $result2['zeit'];
$description[] = $result2['description']; 
}
um nur einen teil auszugeben musst du eine bedinung bei der mysql abfrage machen...

Code: Alles auswählen

SELECT * FROM events WHERE titel='$foo'
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag von porfavor »

Danke für deine Hilfe!

Habe das jetzt aber wie gesagt komplett anders gelöst mit 4 selects-feldern: Wochentag, Tag, Monat, Jahr...war ein wenig umständlich, speziell später beim auslesen...Ich musste halt das ganze mit limit und 3 sort by machen und hab jetzt halt alles insgesamt 36 Variablen die ich im Template benutze, also eben jeweils 6 einzelne select abfragen.

Aber das mit dem timestamp merke ich mir mal für die Zukunft.
Was mir nicht klar war ist allerdings...müsste es nicht heißen:
<option value="(timestamp)"></option>
da ja value schon den vorgeschriebenen Wert bestimmt, dann ist das zwischen den Tags ja sinnlos, wenn ichs automatisch generieren lassen will?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

...
<option value="das wird ans script weitergegeben">das wird dem user angezeigt</option>

du musst nicht ganze 4 felder für ein datum machen... eines reicht:
im script kannst du in etwa sowas schreiben:

Code: Alles auswählen

// um tage deutschsprachig anzuzeigen...
setlocale(LC_ALL, 'de_de');


$uebergabe = base64_encode(time() . "dein nicht zu langer hash, kann aus allen zeichen bestehen die es gibt...";
$angezeigt = date('l, d. m. Y');
und im template dann das:

Code: Alles auswählen

...
<option value="{$uebergabe}">{$angezeigt}</option>
...
das wären dann aber 210 einträge (du willst 30 tage mit allen woochentagen ausgeben oder?^^)... aber so ists relativ manipuliergeschützt :P
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag von porfavor »

Manipulation ist eigentlich kein Problem, da nur bestimmte User Zugriff auf die Datei erhalten.
Aber das sieht schonmal sehr einfach aus. Ich komme bei Gelegenheit darauf zurück.

Danke!

Jetzt habe ich den Code schon anders geschrieben und sehe keinen Grund alles umzumodeln. Da ich noch ein paar andere Dinge vorhabe, werde ich erst diese lösen schätze ich und dann das machen.
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

Danke!
np :P
ist eigentlich nur eigennutz...^^
Antworten

Zurück zu „Coding & Technik“