• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Modulo Operator

xXxPeterPanxXx

Neues Mitglied
Hi,
ich bins mal wieder ich habe eine Problem mit dem Modulo Operator (%).

Code:
<?php
for ($e = 0; $e <= 100; $e++);
$l = $l % $e 
if (boolean = TRUE); {
echo '<td>
     <tr class="gruen"></tr>'
     } else {
echo '<tr class="gelb"></tr>
      </td>'
?>
Der Code wird erst garnicht im Browser angezeigt wei ich ein Fehler gemacht habe(wahrscheinlich noch viele mehr). Ich bin noch extrem schlecht in php.

Das ist die Fehlermeldung:

Parse error: parse error in C:\xampp\htdocs\projects\php-training\fragen-uebungen-2-8.php on line 43

Danke im Voraus!
xXxPeterPanxXx
 
Werbung:
Werbung:
oh...

man sollte dann doch besser lesen.

Naja, dann anders:
Das ; hinter dem if gehört da nicht hin, genausowenig hinter die for-Schleife, dafür aber hinter alle anderen Befehle. Hinzu kommt (und das ist deine error-message), dass du einem Variablentyp keinen Wert zuweisen kannst, wie du es in der if-Clause versuchst.
Keine Ahnung, was du versuchst mit dem Code zu machen (mal davon abgesehen, dass eine Tabellenzelle keine Tabellenreihe enthalten kann), aber so sollte er zumindest von der Syntax her stimmen:

Code:
<?php
for ($e = 0; $e <= 100; $e++)
    $l = $l % $e; 
if ($boolean == TRUE) {
    echo '<td>
     <tr class="gruen"></tr>';
} else {
    echo '<tr class="gelb"></tr>
      </td>';
}
?>
 
Also, ich erkläre mal was ich vor habe. Ich will die Zahlen von 1 -100 mit dem Modulo Operator (%)überprüfen wenn es einen Restbetrag gibt will ich eine andere Tabellenfarbe haben, als wenn es keine Rest gibt. Ich habe deinen Code genommen und leich verändert trotzdm erscheint noch eine Fehlermeldung.
Code:
<?php
for ($e = 0; $e <= 100; $e++)
    $l = $l % $e; 
if ($l == FALSE) {
    echo '<table>
    <tr>
     <td class="gruen"></td>';
} else {
    echo '<td class="gelb"></td>
      </tr>
      </table>';
}
?>
 
Die Fehlermeldung sagt doch "Division by zero". Sie lügt dich nicht an, du darfst ihr glauben. ;ugl
Beim ersten Durchlaufen der for-Schleife ist $e = 0. In der Schleife versuchst du dann, den Rest, der bei der Division des Inhalts von $l durch Null herauskommt, zu finden. Das kann nicht gehen, wenn $l nicht auch null ist. Du solltest am besten bei 1 anfangen, wenn das möglich ist.
Aber wozu dient überhaupt die for-Schleife vor der Abfrage? Du willst doch vermutlich 100mal überprüfen, dann sollte die Abfrage auch in der Schleife stehen. Sonst machst du 100mal $l = $l % $e; und fragst dann ein einziges Mal mit dem Wert, der dabei rauskommt, ab.
Unter diesen Gesichtspunkten bearbeiteter Code also:
Code:
<?php
for ($e = 1; $e <= 100; $e++)
{
    $l = $l % $e;
    if ($l == FALSE) {
        echo '<table>
        <tr>
         <td class="gruen"></td>';
    } else {
            echo '<td class="gelb"></td>
          </tr>
          </table>';
    }
}
?>
Dann ist aber immer noch für alle nach dem ersten Durchlauf folgenden Durchläufe $l = 0, weil es bei der Division einer Ganzzahl durch 1 (das ist $e beim ersten Schleifendurchlauf) nie einen Rest gibt (und damit wird $l auf alle Fälle Null) und bei der Division von 0 (was $l ja dann ist) durch "was auch immer $e jeweils ist" auch nicht. Das liegt an $l = $l % $e;. Muss $l sich denn die ganze Zeit verändern? Ich bin mir nicht zu 100% sicher, was du jetzt wirklich mit dem if überprüfen willst. Wenn du ein immer gleiches $l auf einen Rest bei der Division durch 1 bis 100 überprüfen willst, dann sollte es auch gleich bleiben. Nimm einfach was anderes, um den Rest zu "merken":
Code:
for ($e = 1; $e <= 100; $e++)
{
    $p = $l % $e;
    if ($p == FALSE) {
        echo '<table>
        <tr>
         <td class="gruen"></td>';
    } else {
            echo '<td class="gelb"></td>
          </tr>
          </table>';
    }
}
Was am Schluss dabei rauskommen soll, ist mir jetzt trotzdem noch nicht klar. Ein 100zellige Tabelle oder wie oder was? :shock:
Der Code wird auf alle Fälle weder valide noch irgendwie sinnvoll werden. Bist du sicher, dass du selber weißt, was du vorhast? :mrgreen:
 
Werbung:
Hi,
als erstes danke für eure Hilfe!
Nun meine Frage kann man das acuh anders lösen abwechselnd verscheidenfarbige Tabellenzellen zu machen, weil so richtig funkrionieren tut das nicht.
 
Hab mir jetzt nicht alles durchgelesen, aber

PHP:
for ($i = 0; $i < 10; $i++) {
  if ($i % 2 == 0) {
    $colour = 'ff0000';
  } else {
    $colour = '00ff00';
  }
  echo '<span style="color:#' . $colour . '">Text</span>';
}
 
Werbung:
Hmm,

also irgendwo muss der Farbcode ja auch rein, nicht wahr?

Du machst das über Klassen, in meinem Beispiel wechsel ich einfach den Farbwert für jede neue Zeile.

Du kannst es natürlich auch so machen:

PHP:
echo '<table>';
for ($i = 0; $i < 10; $i++) { 
  if ($i % 2 == 0) {
    $class = 'green';
  } else {
    $class = 'red';
  }
  echo '<tr><td class="' . $class . '">Text</td><td class="' . $class . '">Text</td></tr>'; 
}
echo '</table>';

Wie man eben lustig ist. ;)
 
Hmm,

also irgendwo muss der Farbcode ja auch rein, nicht wahr?

Du machst das über Klassen, in meinem Beispiel wechsel ich einfach den Farbwert für jede neue Zeile.

Du kannst es natürlich auch so machen:

PHP:
echo '<table>';
for ($i = 0; $i < 10; $i++) { 
  if ($i % 2 == 0) {
    $class = 'green';
  } else {
    $class = 'red';
  }
  echo '<tr><td class="' . $class . '">Text</td><td class="' . $class . '">Text</td></tr>'; 
}
echo '</table>';
Wie man eben lustig ist. ;)


Super!

Ich danke euch allen!
 
ich weiß nicht ob es bei dir auch so klappt, aber normalerweise musst du innerhalb eines echos bei php sonderzeichen, wie z.B. anführungszeichen, maskieren.
d.h. du setzt davor einfach einen backslash "\"
wenn es bei dir auch ohne geht, ist das gut und schön, kann ich mir dann allerdings nicht erklären ;-)

grüße hokage
 
Werbung:
ich weiß nicht ob es bei dir auch so klappt, aber normalerweise musst du innerhalb eines echos bei php sonderzeichen, wie z.B. anführungszeichen, maskieren.
d.h. du setzt davor einfach einen backslash "\"
wenn es bei dir auch ohne geht, ist das gut und schön, kann ich mir dann allerdings nicht erklären ;-)

grüße hokage
Echt,
also bei mor funktioniert es, aber ich habe den Code auch leicht verändert:
Code:
<?php
for ($i = 0; $i < 10; $i++) {
  if ($i % 2 == 0) {
    $class = 'green';
  } else {
    $class = 'red';
  }
  echo '<table>
  <tr><td class="' . $class . '">Hallo</td></tr>
  </table';
} 
?>
Und den border habe ich mit Css gemacht:
Code:
td.green {border: 1px solid green;}
td.red {border: 1px solid red;}
P.s:Normalerweise mache ich die Farbangaben mit hex Codes.
 
ich weiß nicht ob es bei dir auch so klappt, aber normalerweise musst du innerhalb eines echos bei php sonderzeichen, wie z.B. anführungszeichen, maskieren.
d.h. du setzt davor einfach einen backslash "\"

Nein, dann hast du die Sache mit dem Escapen nicht ganz richtig verstanden.
In folgenden Situationen musst du escapen.

PHP:
echo "\"";
echo "<td class=\"" . $class . "\">Text</td>";
d.h., immer auf die gewählten Anführungszeichen achten.

PHP:
echo '"';
//funktioniert!
//genauso wie:
echo '<td class="' . $class . '">Text</td>';

//escapen nur wieder bei gleichen Anführungszeichen
echo '\'';

Nur ein paar Beispiele zum Verständis!

Ich schreibe daher echo-Ausgaben grundsätzlich mit Hochkommas, da kann ich mir das Escapen sparen, wenn innerhalb des Strings Attribute in HTML-tags vorkommen wie style="" oder class="" :)
 
Werbung:
Zurück
Oben