2012-03-29 12 views
2

Fehler bei dieser Zeile: $an = explode(";", $f[$i]); Auch diese: if ($wasone) (undefinierte Variable) Jede Hilfe? Vielen Dank.Undefined offset: 9, undefinierte Variable

<? 

    if ($_POST["submit"]) 
    { 
     $a = answer(); 
     $out = "Q: $ask<br>A: ".$a; 
     $tile = ($cfg["scrolling"]) ? $tile : ""; 
     echo "$out<br>$tile"; 
     echo "<input name='tile' type='hidden' id='tile' value='$out<br>$tile'>"; 
    } 

    // answers 
    function answer() 
    { 
     global $cfg, $ask; 
     $ask = (empty($ask)) ? "<empty>" : $ask; 
     $kick = array("?","\n"); 
     $ask = str_replace($kick,"",$ask); 
     $f = file($cfg["answersfile"]); 
     for ($i=0; $i<=count($f); $i++) 
     { 
      $an = explode(";", $f[$i]); 
      $a = $an[0]; 
      if (strstr($a,trim($ask))) 
      { 
       if ($wasone) 
       { 
        return("Please be more concrete"); 
       } 
       array_shift($an); 
       array_pop($an); 
       $ai = rand(0, count($an)-1); 
       // answering 
       $wasone = true; 
       $retval = $an[$ai]; 
      } 
     } 
     $retval = (empty($retval)) ? "I dont understand you. Please try again." : $retval; 
     return $retval; 
    } 
    ?> 
+1

Kristina, siehe meinen Kommentar unter msonsonas Antwort. Es kann sich für zukünftiges PHP-Skriptdesign als hilfreich erweisen. – Blake

Antwort

2

die Bedingung in der for-Schleife sollte

$count = count($f); 
for ($i=0; $i<$count; $i++) 

ohne '=' sein, um sicherzustellen, dass nur Indizes zugegriffen Bereich von 0 bis count-1

+0

Danke, aber was soll ich mit dem anderen Fehler machen? Die undefinierte Variable? –

+0

sollten Sie es vor der for-Schleife – msonsona

+0

auf false initialisieren, es ist immer noch ein Fehler, immer noch der gleiche. –

1

Die Linie

for ($i=0; $i<=count($f); $i++) 

sollte wahrscheinlich

01 sein

count() gibt die Anzahl der Elemente von $ f zurück, die um eins größer ist als der Index des letzten Elements von $ f (in diesem Fall neun). Sie möchten stoppen, bevor $ i über den Index des letzten Elements hinausgeht

+1

Und das Zählen jedes Mal in einer Schleife ist sehr schlecht, also: 'for ($ i = 0, $ c = zählen ($ f); $ i <$ c; $ i ++)' – hamczu

1

Standardmäßig wird das Array Indizes von 0 gestartet. Wenn count($f) === 9, dann bedeutet dies, dass Ihr Array dort Indizes 0, 1, 2 ... 8 hat. Wenn Sie in der Schleife $i <= 9 durchlaufen, dann versuchen Sie, auf das Element mit Index 9 zuzugreifen, das nicht da ist.