php if-Bedingung wird nicht eingehalten

codc

codc

/dev/null
Hi, ich schreibe gerade ein php-Script ohne wirklich davon Ahnung zu haben.

Code:
<?php

echo "<table border=\"1\">";

$Zeilen = 1;
$Dateizeiger = fopen("test.csv", "r");
$Formel = 8;

while(($Daten = fgetcsv($Dateizeiger, 1000, ";")) !== FALSE)
{
    $AnzahlDerFelder = count($Daten);

echo "<tr valign=\"top\">";

    $Zeilen++;

    for($i = 0; $i < $AnzahlDerFelder; $i++)
    {
        echo "<td>";
        
        if ($i = $Formel){
		echo "<img src=\"",$Daten[$i],"\">";
            }

	else {
		echo $Daten[$i];
            }

        echo "</td>";
    }
    echo "</tr>";
}
fclose($Dateizeiger);
echo "</table>";
?>
Hier wird die if-Bedingung nur für $Formel=8 ausgeführt aber nicht das else später. Vielleicht hat ja jemand eine Idee was der Fehler ist.
 
Hi,

dass müßte
Code:
if ($i [B]==[/B] $Formel){
heißen, zumindest wenns Copy&Paste ist.

mfg
HeadCrash
 
Jetzt wird nur die else-Bedingung ausgeführt auch wenn $i=8 ist :(
 
Fakt ist nur wenn du in einer if mit "=" arbeitest wird in deinem Beispiel $i immer der Wert von $Formel zugewiesen.

Hast du mal die test.csv als beispiel?
 
Code:
Number;Name;Mass;Amoung;Price;Remark;Availible;Structure
1;rhamnopyranosid;520,59;10 g;10000,-;rhamnosylation;n.a.;./images/formula1.png
 
Zuletzt bearbeitet:
Hi,

kann es sein dass du eventuell $i == 7 meintest? ;)
Wenn ich gut gezaehlt hab, hat die Datei nur 8 Datenfelder, ergo geht die Schleife von 0 bis 7.

mfg,
bytepool
 
Versuchs mal mit $Formel=7

die Ausgabe print_r($Daten) direkt am anfang der While-Schleife erzählt dir wieso.

mfg
HeadCrash
 
oh ja Tomaten auf den Augen 8) ich sollte Feierabend machen - zu viel heute mit der Webseite zugebracht ...

Danke
 
Kleine Randnotiz: Ich wuerde die Kommas aus
PHP:
echo "<img src=\"",$Daten[$i],"\">";
durch Punkte ersetzen... (Waehre mir zumindest neu, das das Komma konkateniert)
 
Nachtrag - so läuft das Script wie gewünscht:

PHP:
<?php

echo "<table border=\"1\">";

$Zeilen = 1;
$Dateizeiger = fopen("test.csv", "r");
$Formel = 7;

while(($Daten = fgetcsv($Dateizeiger, 1000, ";")) !== FALSE)
{
    $AnzahlDerFelder = count($Daten);

echo "<tr valign=\"top\">";

    $Zeilen++;

    for($i = 0; $i < $AnzahlDerFelder; $i++)
    {
        echo "<td align=\"center\" valign=\"middle\">";
        
        if (($i == $Formel) && ($Zeilen !=2)) {
			echo "<img src=\"",$Daten[$i],"\">";
            }

	else {
		echo $Daten[$i];
		}

        echo "</td>";
    }
    echo "</tr>";
}
fclose($Dateizeiger);
echo "</table>";
?>
 
Es gibt allerdings einen Unterschied zwischen Punkt und Komma.
Beim Aneinanderhängen wird zuerst jeder Teil evaluiert. Während bei mehreren durch Kommata getrennten Ausdrücken, jeder evaluiert und ausgeführt wird:
PHP:
function foo (){
echo "in \n";
return "bar \n";
}

echo "\nKomma:\n";
echo foo (),foo (),foo ();
echo "\nPunkt:\n";
echo foo ().foo ().foo ();
echo "\n";

Ausgabe:
Komma:
in
bar
in
bar
in
bar

Punkt:
in
in
in
bar
bar
bar
 
Warum nicht
PHP:
<?=$variable ?>
oder so ähnlich? Gibbet das nich in php?
 
Doch gibt's. Aber ich seh gerade den Sinn (hier in diesem Fall) nicht?
 
Naja, war auf die echo-Diskussion bezogen. Aber in dem konkreten Skript wohl eher genauso aufwändig, hast schon Recht.
 

Ähnliche Themen

Queue für copy Script

Shellskript - Fehler in Cron

in_array Problem

Bash Skript: [[: not found Fehler

Escaping-Problem

Zurück
Oben