2016-04-15 3 views
0

Ich habe seit Tagen daran gearbeitet und kann nicht herausfinden, was los ist, es ist für den Unterricht. Es führt immer wieder 'Syntax Fehler unerwartet Ende der Datei, die ich denke, ich verpasste eine Klammer irgendwo, aber ich sehe nicht wo? Jede Hilfe wäre willkommen. Ich habe zwei Dateien und ich versuche, eine Multiplikationstabelle in PHP zu machen.Ich arbeite seit Tagen an diesem Tisch

Seite 1:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Make a Multiplication Table!</title> 
    </head> 
    <body> 
     <form action="./timestable.php" method="POST"/> 
      <input type="number" value="1" name="a"/> 
      <input type="number" value="1" name="b"/> 
      <input type="submit"/> 
     </form> 
    </body> 
</html> 

<?php 

$n = $_POST; // TODO what should $n really be? Replace the 10 with the user-supplied value from the form 

// if we don't have a number, redirect back to the form page 
if (isSet($n)) { 
    header("Location: ./mult_form.php"); 
    exit; 
} 

?> 

Seite 2:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Your Table is Ready</title> 
    </head> 
    <body> 
     <table> 
      <?php 
      $a = $_POST['a']; 
      $b = $_POST['b']; 
      for ($i = 0; $i <($a)+1; $i++): 
      { 
       $output.='<tr>'; 

        for($j=1;$j<($b)+1;$j++) 

         { 

          $output.= '<td>'.($i*$j).'</td>'; 

         } 


      $output.='<tr>'; 

      } 

     $output.='</table>'; 




      ?> 

    </body> 
</html> 
+1

'für ($ i = 0; $ i <($ a) +1; $ i ++):' -> 'für ($ i = 0; $ i <($ a) +1; $ i ++)' –

+0

entferne die ./ amd die/am Ende – svanderwoude

+0

Verbessere deinen Fragetitel, so dass er das Problem beschreibt. –

Antwort

1

Neben wie 10 Dinge, die Sie könnte/sollte die auf den Punkt ändern lassen. Sie geben niemals die $output Variable aus. Verwenden Sie:

echo $output; 

direkt nach der $output.='</table>'; und Sie sollten in Ordnung sein.


EDIT: korrigierte Code wie in den Kommentaren erläutert.

Das ist die vollständig korrigiert Seite 1:

<?php 

if (!isset($_POST['n'])) { 
    header("Location: mult_form.php"); 
    exit; 
} 

?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Make a Multiplication Table!</title> 
    </head> 
    <body> 
     <form action="timestable.php" method="POST"/> 
      <input type="number" value="1" name="a"/> 
      <input type="number" value="1" name="b"/> 
      <input type="hidden" value="<?php echo $_POST['n'];?>" name="n"/> 
      <input type="submit"/> 
     </form> 
    </body> 
</html> 

Beachten Sie, dass, wenn Sie mit header() ein Kopffeld festlegen mögen Sie einen klaren Ausgangspuffer haben müssen. Dies bedeutet, dass noch kein einzelnes Zeichen ausgegeben wurde. Andernfalls wird der HTTP-Header automatisch geschlossen und der HTTP-Body beginnt. Dies bedeutet, dass die header() zu spät kommt und tatsächlich ignoriert wird. Also, keine Umleitung, wenn die PHP nach einem HTML-Zeichen ist. Deshalb stelle ich es am Anfang des Codes.

Sie müssen mult_form.php implementieren, die das Feld n veröffentlicht.

Die zweite Seite ist dies:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Your Table is Ready</title> 
    </head> 
    <body> 
     <table> 
      <?php 
      $a = intval($_POST['a']); 
      $b = intval($_POST['b']); 
      $n = intval($_POST['n']); 
      $output = ''; 
      for ($i = 1; $i <= $a; $i++) 
      { 
       $output .= '<tr>'; 
       for ($j = 1; $j <= $b; $j++) 
       { 
        $output .= "<td>{$i * $j * $n}</td>"; 
       } 
       $output .= '</tr>'; 
      } 
      echo $output; 
      ?> 
     </table> 
    </body> 
</html> 

beachte, dass die $output als leere Zeichenfolge initialisiert wird, so dass die ersten .= Verkettungs tatsächlich Saite zu Saite und nicht einen undefinierten Wert Zeichenfolge verkettet, die möglicherweise mess up das ganze Verkettungsdrama, das hier vorgeht :)

Das sollte es tun.

Wenn dies nicht funktioniert genauer zu sein, vielleicht eine andere Frage mit Ihrem neuen Code. Diese Frage sollte jetzt vollständig beantwortet werden.

Einen schönen Tag noch!

+0

yeah? das funktioniert immer noch nicht? Gibt es andere Fehler, die ich nicht sehe? – orangutat

+0

Mal sehen. Es gibt ein falsches ':' nach der ersten 'for() Anweisung. Sie können auch 'intval ($ _ POST ['a'])' 'verwenden, um auf der sicheren Seite des Lesens der Post-Variablen zu sein. Das erste 'for()' beginnt bei 0, nicht bei 1.Was falsch sein sollte, weil Multiplikationstabellen von 1 beginnen. Die zweite ' 'sollte eine schließende Markierung sein (' '). Es sieht auch so aus, als ob du einen Multiplikator '$ n' willst. Dann sollten Sie auf der ersten Seite nach '! Isset ($ n)' (alles klein und führend nicht '!') Testen. Entfernen Sie auch die führenden '. /' In den Weiterleitungen. Wenn Sie das '$ n' in' timestable.php' benötigen, müssen Sie es weitergeben. – pid

+0

Um es weiterzugeben, fügen Sie dieses zum Formular hinzu: ''. Als nächstes lesen Sie es in 'timestable.php':' $ n = intval ($ _ POST ['n']); '. Schließlich multipliziere es mit '$ i * $ j * $ n' in alle Zellen. Das ist nicht alles nur ein guter Schritt voraus. Sie brauchen offensichtlich die erste Seite, auf der Sie '$ n' eingeben. Ich weiß nicht, warum du es nicht schon in die Form bringen würdest, aber das ist deine Entscheidung. – pid

Verwandte Themen