PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Syntax (sehe den Fehler nicht)


mapel110
2008-05-21, 11:30:10
$vermittelt=0;
$vermittelt_angenommen=0;
$vermittelt_nicht_angenommen=0;
$vermittelt_kein_gespraech=0;

Dazwischen wird mit den Variablen nur hochgezählt ala $vermittelt++;
echo "Vermittelt $vermittelt";
echo "vermittelt_angenommen $vermittelt_angenommen";
echo "vermittelt_nicht_angenommen $vermittelt_nicht_angenommen";
echo "vermittelt_kein_gespraech $vermittelt_kein_gespraech";


Wenn ich ohne das Hochzählen den Code nutze, dann bekomme ich die Nullen angezeigt. Soweit korrekt. Aber wenn ich hochzähle, dann werden die Variablen offenbar geleert. Es steht nichts mehr drin. Jedenfalls bekomme ich bei den Echos keine Werte mehr angezeigt. :confused:

/edit


while ($row = mssql_fetch_array($result_eingehende_vermittlung_datensaetze)) {
$test_zeit=$row[Datum]+$row[Dauer];
do {
if($weitergeleitet_anrufer[$i]==$row[Angerufener])
{
if($weitergeleitet_datum[$i]>$row[Datum])
{
$vermittelt++;
$j=$durchlaufen_eingehende;
do {
if($weitergeleitet_angerufener[$i]==$eingehende_angerufener[$j])
if($row[Anrufer]==$eingehende_anrufer[$j])
switch (TRUE){

case ($eingehende_dauer[$j] == 0):
$vermittelt_nicht_angenommen++;
break;
case ($eingehende_dauer[$j] <= 5):
$vermittelt_kein_gespraech++;
break;
case ($eingehende_dauer[$j] > 5):
$vermittelt_angenommen++;
break;
}
$j++;
$durchlaufen_eingehende=$j;
} while ($eingehende_datum[$j]<=($test_zeit+2));
}
}
$i++;
} while ($weitergeleitet_datum[$i]<=$test_zeit);
}

Mal davon abgesehen, dass der Code schlecht geschrieben ist, kann so ein Schnipsel mir die Variablen zerschießen? Ist da irgendwas verwerfliches drin?

Kinman
2008-05-21, 11:47:35
Bei mir sieht's so aus, wie es sein soll


<?php

$vermittelt=0;
$vermittelt_angenommen=0;
$vermittelt_nicht_angenommen=0;
$vermittelt_kein_gespraech=0;

echo "Vermittelt $vermittelt <br />";
$vermittelt++;
echo "vermittelt_angenommen $vermittelt_angenommen <br />";
$vermittelt++;
echo "vermittelt_nicht_angenommen $vermittelt_nicht_angenommen <br />";
$vermittelt++;
echo "vermittelt_kein_gespraech $vermittelt_kein_gespraech";
$vermittelt++;

?>


ergibt folgende Ausgabe:


Vermittelt 0
vermittelt_angenommen 0
vermittelt_nicht_angenommen 0
vermittelt_kein_gespraech 0


mfg Kinman

mapel110
2008-05-21, 11:53:32
Jap, auch der Code tuts bei mir, aber sobald ich hochzähle mit dem Code aus meinem editierten Code-Schnipsel, gehts nicht mehr, keine Werte.

Kinman
2008-05-21, 12:13:13
Auf den ersten Blick kann ich hier auch keinen Fehle feststellen. Standardmethode wäre jetzt bei mir die Variablen mal casten...


(int)$vermittelt++;


Hast Du es ohne Deiner Switch-case Konstruktion mal versucht? Ich habe sowas nämlich noch nie gesehen, aber prinzipiell sollte es stimmen.

EDIT Argh.. das break Verhindert natürlich weitere Ausführungen.. Somit ist das Nachfolgende falsch :(


Vorallem versteh ich denn Sinn dieser Konstruktion nicht. Sie spart eigentlich keinen Schreibaufwand.

Das:

if ($eingehende_dauer[$j] == 0) $vermittelt_nicht_angenommen++;
if ($eingehende_dauer[$j] <= 5) $vermittelt_kein_gespraech++;
if ($eingehende_dauer[$j] > 5) $vermittelt_angenommen++;

Sollte eigentlich das gleiche bewirken..

Und besser wäre es so:


if ($eingehende_dauer[$j] <= 5)
{
$vermittelt_kein_gespraech++;
if ($eingehende_dauer[$j] == 0) $vermittelt_nicht_angenommen++;
}
else $vermittelt_angenommen++;



mfg Kinman

mapel110
2008-05-21, 12:26:33
Switch-Case sah schöner aus. ;(
Aber danke dafür. :)

Ich hab gerade mal den Code-Block auskommentiert. Und auch dann tritt der Fehler auf. Aber es gibt keinen weiteren Code, der mit diesen Variablen zu tun hat.

Nur in einer separaten Datei läuft dieser Code. Aber in meinem Script nicht.

/edit
omg wtf PHP

Spielt es für PHP etwa doch eine Rolle, wo ich Variablen vorbelege?

Ich hab die Vorbelegung der 4 Variablen jetzt mal an den Anfang des Scripts gepackt (Zeile 30). Damit geht es. Wenn ich die Vorbelegung direkt von dem Scriptteil mache, wo ich sie brauche (Zeile 1000 etwa), dann gehts nicht.
WTF?

/edit2
*heul*
Ich bin mal wieder schuld. Ich hab das Script in einem Abschnitt stehen, der quasi gar nicht ausgeführt wird. 13 Arbeitstage noch .... dann :weg:

Marscel
2008-05-21, 13:38:38
Ich hab das Script in einem Abschnitt stehen, der quasi gar nicht ausgeführt wird

So schlimm ist PHP noch nicht geworden. ;)

robobimbo
2008-05-21, 14:45:29
PHP Manual:

"Der case-Ausdruck kann eine Prüfung einfacher Typen sein, also von Integer- oder Fließkomma-Zahlen oder von Strings/Zeichenketten. Arrays oder Objekte können nicht benutzt werden, es sei denn, sie wurden in einfache Typen umgewandelt."

Versuch mal das Array aus dem case Vergleich rauszunehmen und das stattdessen mit einer Variablen zu lösen


EDIT: Hat sich eh schon erledigt, es darf wohl kein array im switch-statement vorkommen

mapel110
2008-05-23, 09:58:35
Da steht ja auch kein Array, sondern ein konkretes Array-Element. Und das funzt prächtig. =)

Ich freu mich gerade riesig, weil der Code endlich das tut, was er soll. :]
Jetzt nur noch manueller Abgleich mit der Datenbank und dann brauche ich nur noch die finale Anzeige fertigstellen. Dann ist das Projekt beendet. :smile:

(okayokay, ich muss auch noch eine Dokumentation schreiben ;( )

mapel110
2008-06-04, 12:40:50
for ($n=0;$n<=$anzahl_monate;$n++){
if($heute[$n]==unix_time[$i])
$monat_abzug=$heute[$n-1];

}

Wieso meckert er wegen der zweiten Zeile? O_o

Parse error: syntax error, unexpected '[' in

Berni
2008-06-04, 13:09:54
Vor unix_time geht ein $ ab. Wenn unix_time ne Funktion sein soll dann sollten es halt runde Klammern sein anstatt der eckigen...

Crow1985
2008-06-04, 13:10:16
Das ist wahrscheinlich irgendwo eine Klammer zu viel, das muss nicht unbedingt in der 2. Zeile sein. Sondern irgendwo im ganzen Script.
Die Fehlermeldungen sollte man in diesem Fall nicht zu genau nehmen.;)

mapel110
2008-06-04, 13:29:15
Vor unix_time geht ein $ ab. W
:love3::up: