Ulf: Irgendwie verschluckt mein ARRAY Daten

Hallo zusammen, ich habe da ein Problem:

Also, wie im Thema schon angesprochen: mein Array verschluckt Daten.
Ich geben sie ein und sie kommen nicht wieder 'raus.

Hier ist noch kurz (*g*) der Source von der Seite.
Vielleicht habt ihr ja 'ne Idee.

Teil 1: (Teil 2 folgt noch)
<?php
include "../includes/service.inc.php";
session_start();
?>
<html>
<head>
<meta name="author" content="Frank Groetzner/Ulf Wuestefeld">
<title>Schulungsraum buchen</title>
<link rel="stylesheet" href="../service.css" type="text/css">
<script LANGUAGE="JavaScript" src="../checkFields.js">
</script>
<script LANGUAGE = "JavaScript">
function rbox_handler()
{
    var const_html = "<SELECT name=recur onChange=rbox_handler()><OPTION value=keine>keine</OPTION><OPTION value=taeglich>täglich</OPTION><OPTION value=woechentlich>wöchentlich</OPTION><OPTION value = monthly>monatlich</OPTION><OPTION value=jaehrlich>jährlich</OPTION></SELECT>";
    var index = document.Formular.recur.selectedIndex;
    var period = document.Formular.recur.options[index].value;
    inputbox = "  einmalig";
    caption = "";
    if(period != "keine")
    {
      inputbox = "  für  <INPUT TYPE=text size=2 maxlength=3 name=numrecur>";
      caption = "  ";
      if(period == "taeglich")
      {
        caption += "Tage";
        const_html = "<SELECT name=recur onChange=rbox_handler()><OPTION value=keine>keine</OPTION><OPTION value=taeglich selected>täglich</OPTION><OPTION value=woechentlich>wöchentlich</OPTION><OPTION value = monthly>monatlich</OPTION><OPTION value=jaehrlich>jährlich</OPTION></SELECT>";
      }
      else if(period == "monthly")
      {
        caption += "Monate";
        const_html = "<SELECT name=recur onChange=rbox_handler()><OPTION value=keine>keine</OPTION><OPTION value=taeglich>täglich</OPTION><OPTION value=woechentlich>wöchentlich</OPTION><OPTION value = monthly selected>monatlich</OPTION><OPTION value=jaehrlich>jährlich</OPTION></SELECT>";
      }
      else if(period == "woechentlich")
      {
        caption += "Wochen";
        const_html = "<SELECT name=recur onChange=rbox_handler()><OPTION value=keine>keine</OPTION><OPTION value=taeglich>täglich</OPTION><OPTION value=woechentlich selected>wöchentlich</OPTION><OPTION value = monthly>monatlich</OPTION><OPTION value=jaehrlich>jährlich</OPTION></SELECT>";
      }
      else if(period == "jaehrlich")
      {
        caption += "Jahre";
        const_html = "<SELECT name=recur onChange=rbox_handler()><OPTION value=keine>keine</OPTION><OPTION value=taeglich>täglich</OPTION><OPTION value=woechentlich selected>wöchentlich</OPTION><OPTION value = monthly>monatlich</OPTION><OPTION value=jaehrlich selected>jährlich</OPTION></SELECT>";
      }
    }
    document.getElementById("recurdiv").innerHTML = const_html+inputbox+caption;
}

Vielen Dank für eure Mithilfe!

Ulf

  1. Teil 2 des Source-Codes:

    </script> </head> <body> <? if ($HTTP_POST_VARS["recur"] != "") { ?> <form name="Formular"> </form>

    <?php

    // ANFANG: Überprüfung, ob der Schulungsraum frei ist anhand von phpPlanner

    $numrecur = $HTTP_POST_VARS["numrecur"]; $recur = $HTTP_POST_VARS["recur"]; $von = $HTTP_POST_VARS["von"]; $bis = $HTTP_POST_VARS["bis"]; $datum = $HTTP_POST_VARS["datum"]; $link_pr = mysql_connect("$host:$port","$user","$pass"); mysql_select_db("Schedule",$link_pr); $query_pr = "select * from sched"; $result_pr = mysql_query($query_pr,$link_pr); $num_pr = mysql_numrows($result_pr);

    for ($i = 0; $i < $num_pr-1; $i++) { $row_pr = mysql_fetch_array($result_pr);

    // datestamp erstellen (siehe Tabelle sched in der Datenbank Schedule)

    // print($datum); // Datumsüberprüfung // print("<br>"); list($tag_timestampdatum,$monat_timestampdatum,$jahr_timestampdatum)=split('[.]',$datum,3); // print($tag_timestampdatum); // print("."); // print($monat_timestampdatum); // print("."); // print($jahr_timestampdatum); // print("-"); $timestampdatum_ges=array(); if($recur="keine") { $schleife=0; $erhoehen=$tag_timestampdatum+$schleife; $zeit=mktime('00','00','00',$monat_timestampdatum,$erhoehen,$jahr_timestampdatum); $timestampdatum_ges[$schleife]=$zeit; } if($recur="taeglich") { for($schleife=0; $schleife < $numrecur; $schleife++) { $erhoehen=$tag_timestampdatum+$schleife; $zeit=mktime('00','00','00',$monat_timestampdatum,$erhoehen,$jahr_timestampdatum); $timestampdatum_ges[$schleife]=$zeit; } } if($recur="woechentlich") { for($schleife=0; $schleife < $numrecur; $schleife++) { $erhoehen=$tag_timestampdatum+($schleife*7); $zeit=mktime('00','00','00',$monat_timestampdatum,$erhoehen,$jahr_timestampdatum); $timestampdatum_ges[$schleife]=$zeit; } } if($recur="monthly") { for($schleife=0; $schleife < $numrecur; $schleife++) { $erhoehen=$monat_timestampdatum+$schleife; $zeit=mktime('00','00','00',$erhoehen,$tag_timestampdatum,$jahr_timestampdatum); $timestampdatum_ges[$schleife]=$zeit; } } if($recur="jaehrlich") { for($schleife=0; $schleife < $numrecur; $schleife++) { $erhoehen=$jahr_timestampdatum+$schleife; $zeit=mktime('00','00','00',$monat_timestampdatum,$tag_timestampdatum,$erhoehen); $timestampdatum_ges[$schleife]=$zeit; } } //for($schleife=0; $schleife < $numrecur; $schleife++) //{ //print($timestampdatum_ges[$schleife]); // Timestamp-Prüfung //print("<br>"); //}

    // von-timestamp erstellen

    list($stundevon,$minutevon)=split(":",$von,2); $jahrvon = date('y', $row_pr[stimestamp]); $monatvon = date('m', $row_pr[stimestamp]); $tagvon = date('d',$row_pr[stimestamp]); $timestampvon = mktime($stundevon,$minutevon,0,$monatvon,$tagvon,$jahrvon);

    // bis-timestamp erstellen

    list($stundebis,$minutebis)=split(":",$bis,2); $jahrbis = date('y', $row_pr[etimestamp]); $monatbis = date('m', $row_pr[etimestamp]); $tagbis = date('d',$row_pr[etimestamp]); $timestampbis = mktime($stundebis,$minutebis,00,$monatbis,$tagbis,$jahrbis); echo "($stundebis,$minutebis,00,$monatbis,$tagbis,$jahrbis)"; // Vergleich, ob die timestamps gleich sind. // Wenn ja, ist der Schulungsraum um die Uhrzeit besetzt, // sonst ist er frei.

    $query_prv = "select stimestamp from sched"; //von $query_prb = "select etimestamp from sched"; //bis $result_prv = mysql_query($query_prv,$link_pr); $result_prb = mysql_query($query_prb,$link_pr); $query_pr2 = "select * from sched WHERE $timestampvon=stimestamp"; $query_pr3 = "select * from sched WHERE $timestampbis=etimestamp"; $query_pr4 = "select * from sched WHERE $timestampvon<etimestamp AND $timestampbis>stimestamp"; $result_pr2 = mysql_query($query_pr2,$link_pr); $result_pr3 = mysql_query($query_pr3,$link_pr); $result_pr4 = mysql_query($query_pr4,$link_pr); $num_pr2 = mysql_numrows($result_pr2); $num_pr3 = mysql_numrows($result_pr3); $num_pr4 = mysql_numrows($result_pr4);

    for($schleife=0; $schleife < $numrecur; $schleife++) {

    // Prüfung, ob das array richtig funktioniert // print($i); // print(" - "); // print($schleife); // print(" - "); // print($timestampdatum_ges[$schleife]); // print("<br>"); // print($timestampvon); // print("<br>"); // print($timestampbis); // print("<br>");

    $query_prd = "select datestamp from sched"; //Datum $result_prd = mysql_query($query_prd,$link_pr); $query_pr5 = "select * from sched WHERE $timestampdatum_ges[$schleife]=datestamp"; $result_pr5 = mysql_query($query_pr5,$link_pr); $num_pr5 = mysql_numrows($result_pr5); }

    // Debug-Informationen

    // print("num_pr2: "); // Überprüfung, ob es gleiche Startzeitpunkte gibt // print($num_pr2); // print(" - num_pr3: "); // Überprüfung, ob es gleiche Endzeitpunkte gibt // print($num_pr3); // print(" - num_pr4: "); // Überprüfung, ob es Überschneidungen von Start- und Endzeitpunkten gibt // print($num_pr4); // print(" - num_pr5: "); // Überprüfung, ob es an diesem Tag schon Schulungen gibt // print($num_pr5); // print("<br><br>");

    // Vergleich, ob die datestamps gleich sind. // Sind die Anzahl der datestamps und timestamps // größer 0, ist der Schulungsraum an dem Tag, zu der // gewünschten Uhrzeit besetzt.

    }

    mysql_close($link_pr);

    // Hier findet die eigentliche Prüfung der Buchungsdaten statt. if((($num_pr2==0) AND ($num_pr3==0) AND ($num_pr4==0)) OR ($num_pr5==0)) { $datum = $HTTP_POST_VARS["datum"]; $von = $HTTP_POST_VARS["von"]; $bis = $HTTP_POST_VARS["bis"]; $thema = $HTTP_POST_VARS["thema"]; $beschreibung = $HTTP_POST_VARS["beschreibung"]; $offen = $HTTP_POST_VARS["offen"];

    // Wert der Variable offen ändern. Checkbox-Wert=on/Variablenwert=ja sonst ist er nein

    if($offen=="on") { $offen="ja"; } else { $offen="nein"; }

    $max = $HTTP_POST_VARS["max"]; $mail = $HTTP_POST_VARS["mail"]; $numrecur = $HTTP_POST_VARS["numrecur"]; $recur = $HTTP_POST_VARS["recur"]; $name = $HTTP_POST_VARS["name"]; $vorname = $HTTP_POST_VARS["vorname"]; mail(         "$mail",         "Buchung des Schulungsraums",         "Am $datum\nvon $von\nbis $bis\nThema: $thema \nBeschreibung: $beschreibung\nWiederholung: $recur ($numrecur)\n\nName: $name\nVorname: $vorname"); print("<h1 align='center'>Schulungsraum gebucht</h1><br>"); print("<h4 align='center'>Sollte der Schulungsraum in dieser Zeit"); print("nicht zur Verfügung stehen<br>werden Sie umgehend von uns per Mail informiert.</h4>");

    // Eintrag in die Datenbank stua : Tabelle schulungen

    $link_add = mysql_connect("$host:$port","$user","$pass"); mysql_select_db("stua",$link_add); $result_add = mysql_query($query_add,$link_add); $query_add = "INSERT INTO schulungen(thema, beschreibung, datum, dozent, max, anmeldungen, offen, von, bis, mail) VALUES ('$thema','$beschreibung','$datum','$vorname $name', '$max', '0', '$offen', '$von', '$bis', '$mail')"; $result_add = mysql_query($query_add,$link_add); mysql_close($link_add); // print($query_add); // Überprüfung, ob die Abfrage korrekt ist // print("<br><br>"); // Eintrag in die Datenbank Schedule : Tabelle sched

    $link_add2 = mysql_connect("$host:$port","$user","$pass"); mysql_select_db("Schedule",$link_add2); for($schleife=0; $schleife < $numrecur; $schleife++) { $timestampdat=$timestampdatum_ges[$schleife]; $result_add2 = mysql_query($query_add2,$link_add2); $query_add2 = "INSERT INTO sched(datestamp, stimestamp, etimestamp, resource, descr) VALUES ('$timestampdat', '$timestampvon', '$timestampbis', 'Schulungsraum', '$thema')"; $result_add2 = mysql_query($query_add2,$link_add2); print($query_add2); // Überprüfung, ob die Abfrage korrekt ist print("<br>"); } mysql_close($link_add2); } else { print("<h1 align='center'><font color='#FF0000'>Fehler beim Buchen des Schulungsraumes</font></h1><br><br>"); print("<h4 align='center'>Der Schulungsraum ist zu dem von Ihnen angegebenen Zeitpunkt leider schon gebucht.</h4>"); }

    // ENDE: Überprüfung, ob der Schulungsraum frei ist anhand von phpPlanner

    } else { ?> <h1 align="center">Schulungsraum buchen</h1> <form name="Formular" method="post" action="schulungsraumbuchen.php"> <table align="center"> <tr>  <td align="right">gewünschtes Datum:</td>  <td><input type="text" name="datum" maxlength="10" size="8"></td> </tr> <tr>  <td align="right">Name:</td> <? echo "<td><input type=text name=name size=30 value=$_SESSION[name]>"; ?> </tr> <tr>  <td align="right">Vorname:</td> <? echo "<td><input type=text name=vorname size=30 value=$_SESSION[vname]>"; ?> </tr> <tr>  <td align="right">email-Adresse:</td> <? echo "<td><input type=text name=mail size=30 value=$_SESSION[email]>"; ?> </tr> <tr>  <td align="right">Von:</td>  <td><input type="text" name="von" maxlength="5" size="4">Uhr</td> </tr> <tr>  <td align="right">bis:</td>  <td><input type="text" name="bis" maxlength="5" size="4">Uhr</td> </tr> <tr>  <td align="right">Thema:</td>  <td><textarea name="thema" rows=2 cols=50></textarea></td> </tr> <tr>  <td align="right">Beschreibung:</td>  <td><textarea name="beschreibung" rows=3 cols=50></textarea></td> </tr> <tr>  <td align="right">maximale<br>Teilnehmerzahl:</td>  <td><input type="text" name="max" maxlength="2" size="2"></td> </tr> <tr>  <td align="right">öffentliche<br>Schulung:</td>  <td><input type="checkbox" name="offen"></td> </tr> <td align="right">Wiederholung:</td> <td> <div ID="recurdiv">    <select name="recur" onChange="rbox_handler();">     <option value="keine" selected>keine</option>     <option value="taeglich">täglich</option>     <option value="woechentlich">wöchentlich</option>     <option value="monthly">monatlich</option>     <option value="jaehrlich">jährlich</option>    </select>  einmalig </div> </td> </tr> <tr><td colspan = "2"><br></td> </tr> <tr> <td colspan = "2" align="center"><input type="button" value="Senden" onClick="checkFields()";></td> </tr> </table>   </form> <? } ?> </body> </head>

    nochmals Danke!

  2. Hallo Ulf,

    Also, wie im Thema schon angesprochen: mein Array verschluckt Daten.

    welchen Array? eine etwas genauere Fehlerbeschreibung wäre schon sinnvoll - Was steht in dem drin? bei welcher Aktion werden die Daten "verschluckt"? Gibt es eine Fehlermeldung? (evtl. error_reporting(E_ALL); einsetzen)

    Ich geben sie ein und sie kommen nicht wieder 'raus.

    wie stellst du das fest

    Hier ist noch kurz (*g*) der Source von der Seite.

    poste bitte nur den relevanten Code deiner Seite und nicht das ganze html und js gewurschtel - das interessiert nicht.

    Teil 1: (Teil 2 folgt noch)
    <?php
    include "../includes/service.inc.php";

    steht da irgendwas relevantes drin (oder nur Einstellungen für mysql_connect() o.ä.)?

    [...]

    ellenlanges Stück html- und js-Codes gelöscht

    <?

    du weißt, dass das nur mit short_open_tags=on funktioniert?

    if ($HTTP_POST_VARS["recur"] != "")

    ist $HTTP_POST_VARS das Array, das du meinst (bzw. eher $_POST)? und warum verwendest du nicht empty() bzw. in dem fall wohl eher isset()

    <form name="Formular">

    es fehlt das action-Attribut, außerdem ist ein leeres form-Element etwas sinnlos

    $link_pr = mysql_connect("$host:$port","$user","$pass");

    die Anführungszeichen um die Variablen kannst du dir sparen (Ausname: der erste Parameter sollte eher so: ($host.':'.$port,...) aussehen) - außerdem, wo ist die Fehlerbehandlung?

    $query_pr = "select * from sched";

    http://www.dclp-faq.de/q/q-sql-select.html

    $num_pr = mysql_numrows($result_pr);

    die Funktion mysql_numrows() gibt es nicht (du meinst vermutlich mysql_num_rows())

    list([...])=split('[.]',$datum,3);

    du weißt, dass split() einen regulären Ausdruck erwartet und das Punkte in einem Solchen eine bessondere Bedeutung haben? Ob der Punkt in dem Fall (innerhalb von []) maskiert werden muss, weiß ich allerdings nicht, aber split() ist hier überflüssig - explode() tut es völlig.

    if($recur="keine")

    das gibt immer true - wenn du prüfen willst, ob $recure den Wert 'keine' enthält musst du zwei Gleichheitszeichen verwenden (siehe: http://www.php.net/language.operators.comparison)

    if($recur="taeglich")
    if($recur="woechentlich")
    if($recur="monthly")
    if($recur="jaehrlich")

    dito.

    $jahrvon = date('y', $row_pr[stimestamp]);

    http://www.php.net/manual/de/language.types.array.php#language.types.array.foo-bar

    $query_prv = "select stimestamp from sched"; //von
    $query_prb = "select etimestamp from sched"; //bis

    warum machst du das nicht in einem Query?

    $mail = $HTTP_POST_VARS["mail"];
    [...]
    mail(
            "$mail",

    schicke nie E-Mails an E-Mailadressen die vom user kommen (sowas lässt sich wunderbar zum Spammen missbrauchen)

    print("<h4 align='center'>Sollte der Schulungsraum in dieser Zeit");
    print("nicht zur Verfügung stehen<br>werden Sie umgehend von uns per Mail informiert.</h4>");

    ehh...? ich dachte du prüfst vorher ellenlang, ob der Raum frei ist?

    $link_add = mysql_connect("$host:$port","$user","$pass");

    warum machst du die Verbindung erst zu, öffnest sie dann aber wieder?

    $query_add = "INSERT INTO [...] VALUES ('$thema','$beschreibung','$datum','$vorname $name', '$max', '0', '$offen', '$von', '$bis', '$mail')";

    Angaben die vom User kommen nie einfach so in die Datenbank schreiben (beim ersten ' im Text gerät dein Query völlig durcheinander) - zum maskieren der "kritischen" Zeichen gibt es mysql_escape_string()

    mysql_close($link_add);
    $link_add2 = mysql_connect("$host:$port","$user","$pass");

    schon wieder ein überflüssiger Schließ- und Öffnenvorgang

    <? echo "<td><input type=text name=name size=30 value=$_SESSION[name]>"; ?>

    mal abgesehen davon, das $_SESSION[name] falsch ist (s.o.), gibt das einen ungültigen Code - um den Wert von value müssen Anführungszeichen (bei den folgenden Zeilen ebenfalls).

    <td><input type="text" name="max" maxlength="2" size="2"></td>

    ich hoffe du prüfst vorher nochmal, ob wirklich nur höchstens zweistellige Zahlen eingetragen wurden...

    <td [...]><input type="button" value="Senden" onClick="checkFields()";></td>

    eine clientseitige Prüfung der Daten ist ja schön und gut, aber ersetzt nicht die Serverseitige.

    nochmals Danke!

    ob ich dein Problem lösen konnte, weiß ich nicht, wenn nicht, sag etwas genauer, wo das Problem überhaupt liegt.

    Grüße aus Nürnberg
    Tobias [der hofft, dass er Ulf mit dem ganzen Geschreibsel nicht erschlagen hat :-)]

    -- Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|