Datum + 1 Tag in while schleife

  • Hi!

    folgendes Problem:

    Das script sollte jedes Datum, das in der Datenbank gefunden wird (mit dem Select im script) soll + 1 Tag gerechnet werden. So wie ich es jetzt habe werden aber alle Datum auf das gleiche gesetzt. z.B.: 24-8-05 und 23-08-05 wurden beim Select ausgegeben aber beide standen dann auf 25-8-05.

    Hier das Script:
    [php:1:9433aff35f]<?php
    <?php

    require('connect.php'); // Db connect
    require('auth.php'); // überprüfung ob session vorhanden

    $sql1 = ociparse($c,"SELECT * from bestellungen where KURZZ = '" .$_SESSION['kuerzel'] . "'"); // Select der vorhandenen Sätze (inklusive Datum) für den Benutzer)
    ociexecute($sql1);

    while($sql2 = oci_fetch_array($sql1))
    {
    $sql3 = ociparse($c,"update bestellungen set datum = to_date('".date('d-m-Y',mktime($sql2['DATUM']) + 86400)."', 'dd-MM-yyyy') where kurzz = '".$_SESSION['kuerzel']."'"); //eigentliche whileschleife welche nicht funktioniert
    ociexecute($sql3);
    ocicommit($c);
    }
    header("location:bestellungen.php");

    ?>?>[/php:1:9433aff35f]

    Danke schonmal für eure Hilfe!

  • [php:1:3db719f47b]<?php

    require('connect.php'); // Db connect
    require('auth.php'); // überprüfung ob session vorhanden

    $sql1 = ociparse($c,"SELECT * from bestellungen where KURZZ = '" .$_SESSION['kuerzel'] . "'"); // Select der vorhandenen Sätze (inklusive Datum) für den Benutzer)
    ociexecute($sql1);

    while($sql2 = oci_fetch_array($sql1))
    {
    /*
    Datum in einen Unix Timestamp umwandeln
    */
    $dt_array = implode("-", $sql2['DATUM']);
    $timestamp = mktime(0,0,0,$dt_array[1],$dt_array[0],$dt_array[2]);

    /*
    Nächster Tag im DD-MM-YYYY Format
    */
    $one_day = 1 * 60 * 60 * 24; // 1 Tag in Sekunden
    $next_day = date("d-m-Y", $timestamp + $one_day);

    $sql3 = ociparse($c,"update bestellungen set datum = '{$next_day}' where kurzz = '".$_SESSION['kuerzel']."' AND datum = '{$sql2['DATUM']}'");
    ociexecute($sql3);
    ocicommit($c);
    }
    header("location:bestellungen.php");

    ?>[/php:1:3db719f47b]

    Ungetestet, müsste aber gehen.

    Wichtig ist die Ergänzung in der where Bedingung...

  • Warning: implode() [function.implode]: Bad arguments. in /var/www/intranet/menues/f_verschbest.php on line 15

    Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-01843: not a valid month in /var/www/intranet/menues/f_verschbest.php on line 24

    Warning: Cannot modify header information - headers already sent by (output started at /var/www/intranet/menues/f_verschbest.php:15) in /var/www/intranet/menues/f_verschbest.php on line 27

    Sorry is aber mein Fehler, weil $sql2['DATUM'] enthaelt doch nicht DD-MM-YYYY sondern z.b.: 28-AUG-05

  • Nein mein fehler - ich verwechsel gerne im- und explode *fg*

    [php:1:86b3539ecd]<?php

    require('connect.php'); // Db connect
    require('auth.php'); // überprüfung ob session vorhanden

    $sql1 = ociparse($c,"SELECT * from bestellungen where KURZZ = '" .$_SESSION['kuerzel'] . "'"); // Select der vorhandenen Sätze (inklusive Datum) für den Benutzer)
    ociexecute($sql1);

    while($sql2 = oci_fetch_array($sql1))
    {
    /*
    Datum in einen Unix Timestamp umwandeln
    */
    $dt_array = explode("-", $sql2['DATUM']);
    $monate = array (
    "JAN" => 1,
    "FEB" => 2,
    "MRZ" => 3,
    "APR" => 4,
    "MAI" => 5,
    "JUN" => 6,
    "JUL" => 7,
    "AUG" => 8,
    "SEP" => 9,
    "OKT" => 10,
    "NOV" => 11,
    "DEZ" => 12,
    );
    $timestamp = mktime(0,0,0,$monate[$dt_array[1]],$dt_array[0],$dt_array[2]);

    /*
    Nächster Tag im DD-MM-YYYY Format
    */
    $one_day = 1 * 60 * 60 * 24; // 1 Tag in Sekunden
    $next_day = date("d-m-Y", $timestamp + $one_day);

    $sql3 = ociparse($c,"update bestellungen set datum = '{$next_day}' where kurzz = '".$_SESSION['kuerzel']."' AND datum = '{$sql2['DATUM']}'");
    ociexecute($sql3);
    ocicommit($c);
    }
    header("location:bestellungen.php");

    ?>[/php:1:86b3539ecd]
    Bitte den $monate array an die Monatskürzel anpassen wie sie möglich wären - ich verwende in meinen Tabellen immer nur nen Unix Timestamp, da ists einfacher mit zu rechnen ;)

  • ach mist :P

    wie magst du das datum denn haben? mit dem STRING oder mit der ZAHL?

    Damit würdest du die Einträge jetzt in der Form String (zurück-)bekommen:

    [php:1:8a8ee39779]<?php

    require('connect.php'); // Db connect
    require('auth.php'); // überprüfung ob session vorhanden

    $sql1 = ociparse($c,"SELECT * from bestellungen where KURZZ = '" .$_SESSION['kuerzel'] . "'"); // Select der vorhandenen Sätze (inklusive Datum) für den Benutzer)
    ociexecute($sql1);

    while($sql2 = oci_fetch_array($sql1))
    {
    /*
    Datum in einen Unix Timestamp umwandeln
    */
    $dt_array = explode("-", $sql2['DATUM']);
    $monate = array (
    "JAN" => 1,
    "FEB" => 2,
    "MRZ" => 3,
    "APR" => 4,
    "MAI" => 5,
    "JUN" => 6,
    "JUL" => 7,
    "AUG" => 8,
    "SEP" => 9,
    "OKT" => 10,
    "NOV" => 11,
    "DEZ" => 12,
    "01" => 1,
    "02" => 2,
    "03" => 3,
    "04" => 4,
    "05" => 5,
    "06" => 6,
    "07" => 7,
    "08" => 8,
    "09" => 9,
    "10" => 10,
    "11" => 11,
    "12" => 12,
    );
    $rev_monate = array (
    "01" => "JAN",
    "02" => "FEB",
    "03" => "MRZ",
    "04" => "APR",
    "05" => "MAI",
    "06" => "JUN",
    "07" => "JUL",
    "08" => "AUG",
    "09" => "SEP",
    "10" => "OKT",
    "11" => "NOV",
    "12" => "DEZ",
    );
    $timestamp = mktime(0,0,0,$monate[$dt_array[1]],$dt_array[0],$dt_array[2]);

    /*
    Nächster Tag im DD-MM-YYYY Format
    */
    $one_day = 1 * 60 * 60 * 24; // 1 Tag in Sekunden
    $next_day = date("d", $timestamp + $one_day) ."-". $rev_monate[date('m', $timestamp + $one_day)] ."-". date("Y", $timestamp + $one_day);

    $sql3 = ociparse($c,"update bestellungen set datum = '{$next_day}' where kurzz = '".$_SESSION['kuerzel']."' AND datum = '{$sql2['DATUM']}'");
    ociexecute($sql3);
    ocicommit($c);
    }
    header("location:bestellungen.php");

    ?>[/php:1:8a8ee39779]

    btw: was gibts denn heut zu essen? Hab hunger...

  • tzz doch nicht perfekt für was zahl ich dich denn? *fg*

    wenn 2 gleiche sätze in der db stehen (also gleiche bestellnr) aber verschiedene Datum, dann wird auf das datum was später ist ein tag dazu gezählt und das andere diesem gleichgesetzt.

  • ja hab ich drin gelassen.

    Primary Key: ID

    edit: eam ja ehrlich gesagt kA an was das liegt aber er machts doch nicht nur wenn die bestnr's gleich sind sondern einfach sporadisch wie er will ;D

  • [php:1:fc3827f2e1]<?php

    require('connect.php'); // Db connect
    require('auth.php'); // überprüfung ob session vorhanden

    $modula_debug = "";

    $sql1 = ociparse($c,"SELECT * from bestellungen where KURZZ = '" .$_SESSION['kuerzel'] . "'"); // Select der vorhandenen Sätze (inklusive Datum) für den Benutzer)
    ociexecute($sql1);

    while($sql2 = oci_fetch_array($sql1))
    {
    foreach($sql2 AS $key => $value) {
    $modula_debug.= "{$key}\t=&gt;\t{$value}";
    }
    $modula_debug.= "
    \r\n";
    /*
    Datum in einen Unix Timestamp umwandeln
    */
    $dt_array = explode("-", $sql2['DATUM']);
    $monate = array (
    "JAN" => 1,
    "FEB" => 2,
    "MRZ" => 3,
    "APR" => 4,
    "MAI" => 5,
    "JUN" => 6,
    "JUL" => 7,
    "AUG" => 8,
    "SEP" => 9,
    "OKT" => 10,
    "NOV" => 11,
    "DEZ" => 12,
    "01" => 1,
    "02" => 2,
    "03" => 3,
    "04" => 4,
    "05" => 5,
    "06" => 6,
    "07" => 7,
    "08" => 8,
    "09" => 9,
    "10" => 10,
    "11" => 11,
    "12" => 12,
    );
    $rev_monate = array (
    "01" => "JAN",
    "02" => "FEB",
    "03" => "MRZ",
    "04" => "APR",
    "05" => "MAI",
    "06" => "JUN",
    "07" => "JUL",
    "08" => "AUG",
    "09" => "SEP",
    "10" => "OKT",
    "11" => "NOV",
    "12" => "DEZ",
    );
    $timestamp = mktime(0,0,0,$monate[$dt_array[1]],$dt_array[0],$dt_array[2]);

    /*
    Nächster Tag im DD-MM-YYYY Format
    */
    $one_day = 1 * 60 * 60 * 24; // 1 Tag in Sekunden
    $next_day = date("d", $timestamp + $one_day) ."-". $rev_monate[date('m', $timestamp + $one_day)] ."-". date("Y", $timestamp + $one_day);

    $sql3 = ociparse($c,"update bestellungen set datum = '{$next_day}' where ID = {$sql2['ID']}");
    ociexecute($sql3);
    ocicommit($c);
    }
    if($_GET['debug'] == 1) {
    echo $modula_debug;
    echo "

    Weiter

    ";
    } else {
    header("location:bestellungen.php");
    }

    ?>[/php:1:fc3827f2e1]

    wenns wieder nicht tut brauch ich die debugausgaben (?debug=1)