2016-04-09 16 views
-1

Ich versuche, eine Klasse zu verwenden, um Zahlen zu berechnen und sie auf dem Bildschirm auszugeben. Der Benutzer gibt Zahlen ein und berechnet und gibt dann auf dem Bildschirm über dem Formular aus.Das Ergebnis einer Klasse in PHP ausgeben

Ich benutze die Post-Methode, um die Formularergebnisse auf die Seite, auf der ich bin, und dann versuchen, das in der Fibonacci-Klasse zu verwenden.

Die Zahlen müssen durch die Klasse gehen und dann das Ergebnis basierend auf dem, was der Benutzer eingeben. I denke, das meiste davon ist richtig, aber etwas hält mich auf, dass ich nicht ganz herausfinden kann.

Vielen Dank im Voraus.

Hier ist mein Code:

<?php 

class Fibonacci { 

    //method to check numbers 
function checkFibo(){ 

     $n1 = $_POST["n1"]; 
     $n2 = $_POST["n2"]; 
     $output = ""; 
     if($n1!=0 && $n2!=0){ 
      if($n2<$n1){ 
       echo "Your second number must be greater than the first. Try again";   
       $output="Your second number must be greater than the first. Try again"; 
      } 
      else if($n1<0 || $n2<0){ 
       echo "Please enter only positive numbers"; 

       $output = "Please enter positive numbers"; 
      } 
      else if (!(is_numeric($n1)) || !(is_numeric($n2))){ 
       echo "Please only enter positive numbers"; 
       $output=""; 
      } 
      else{ 
       echo "The result of your request is shown below."; 
       $output=$fibo->getFibo($n1,$n2); 
       echo $output; 
      } 
     } 
     else{ 
       echo "<p>Please enter good values</p>"; 
     } 


    } 

    // Method to calculate fibonacci 
    function getFibo($n1 = 0, $n2 = 0) { 
     $max=$n2 * 100; 
     $output = ""; 
     while($z<=$max){ 
       $z = $n1 + $n2; 
       $output.=($z."<br />"); 
       $n1 = $n2; 
       $n2 = $z; 
     } 
     return $output; 
    } 


} // End of Fibonacci class. 


?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
    <title>Fibonacci</title> 
</head> 
<body> 

<?php 
if (!empty($_POST)){ 
    $fib = new Fibonacci(); 
    echo "hello"; 
    echo $output; 
} 


echo "<h2> Fibonacci Example </h2>"; 
echo "<form method=\"post\" action=\"index.php\">"; 
echo "<table>"; 
echo "<tr>"; 
echo "<td>First Number</td>"; 
echo "<td><input type=\"text\" name=\"n1\"/></td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td>Second Number</td>"; 
echo "<td><input type=\"text\" name=\"n2\"/></td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td>&nbsp;</td>"; 
echo "<td><input type=\"submit\" value=\"go!\"/></td>"; 
echo "</table>"; 
echo "</form>"; 





?> 
</body> 
</html> 
+1

'aber etwas hält mich auf 'ist keine gültige Frage. Beschreibe, was du erwartest und was tatsächlich passiert! – John3136

Antwort

1

Ich denke, ich sehe das Problem.

$output=$fibo->getFibo($n1,$n2); 

Ich denke, sollte sein:

$output = $this->getFibo($n1,$n2); 

Um zu testen, setzen Sie ein Echo-Anweisung in der getFibo Funktion, wenn etwas druckt, um zu sehen. Sie können auch var_dump von $ output ausführen und sehen, was zurückgegeben wird.

Auch die Zeile:

$fib = new Fibonacci(); 
echo "hello"; 
echo $output; 

Sollte sein:

$fib = new Fibonacci(); 
echo "hello"; 
$fib->getFibo(); 

Sie jedoch ein anderes Problem. Es erstellt eine Endlosschleife. Sie möchten sicherstellen, dass $ z immer mehr als $ max ist, oder legen Sie eine maximale Anzahl von Schleifen fest und brechen Sie eine aus, die maximal erreicht wurde.

+0

Ich frage mich, ob echo $ Ausgabe im HTML-Teil Echo das richtige Ding Echo wäre oder nicht. Wenn es eine Funktion wäre, würde ich $ output und dann $ fib zurückgeben, aber da es eine Klasse ist, bin ich mir nicht sicher, wie ich das machen soll. –

+0

Wenn die Funktion echo $ output hat, brauchen Sie beim Aufruf der Funktion kein Echo. Sie rufen einfach die Funktion an. – cypher2012

+0

Ich habe es! Ich danke dir sehr! Ich musste $ fib-> checkFibo() verwenden; und es funktioniert wie gewünscht. Ich habe mir schon seit einer Woche den Kopf dagegen gedreht. –

1

auf den Code der Suche, es sieht aus wie die Variable $ Ausgabe ein Problem sein könnte.

$output.=($z."<br />"); 

Sie tun, um eine Verkettung zu $output ohne sie tatsächlich erklärt oder eingestellt wird, mit zu beginnen.

Also versuchen Sie vielleicht $output = "" vor der While-Schleife.

+0

Ich bekomme "Hallo" nach dem Schlagen, was ich im Grunde genommen nur für mich in der Lage war zu sehen, dass die Form in der Tat post. Allerdings bekomme ich keine andere gewünschte Ausgabe. Ich habe meinen Code aktualisiert und oben angegeben, ohne die gewünschten Ergebnisse zu erzielen. –

Verwandte Themen