Hi@all!
Ich habe ein kleines Prob. Und zwar habe ich diesen Code:
1 | <html>
2 | <head>
3 | <title>Testseite</title>
4 | </head>
5 | <body>
6 |
7 |
<?php
8 |
9 | error_reporting
(E_ALL);
10 |
11 |
12 |
if (!isset($_GET['nullgleichung']) or $_GET['nullgleichung']=="") {}
13 |
else
14 |
{
15 |
16 |
17 |
$potenzen=substr_count($_GET['nullgleichung'],'^'); //Anzahl der Cirkoflexe(=Potenzen)
18 |
$variablen=substr_count($_GET['nullgleichung'],'x'); //Anzahl der X (=Variablen)
19 |
20 |
$varpos[-1]=-2; //wichtig für die for-Schleife, definiert eine Variable
21 |
$xnull2[-1]=$_GET['nullgleichung']; //wichtig für die for-Schleife, definiert eine Variable
22 |
for ($a=0;$a<$variablen;$a++) //Die for-Schleife
23 |
{
24 |
$varpos[$a]=strpos($xnull2[$a-1],'x',$varpos[$a-1]+2); //Position der Variable x
25 |
$grundstring[$a]=substr($xnull2[$a-1],$varpos[$a]-1,1); //Das Zeichen, das vor x steht
26 |
27 |
if (ord($grundstring[$a])!=43 and ord($grundstring[$a])!=42 and ord($grundstring[$a])!=45 and ord($grundstring[$a])!=47) //prüft, ob vor dem x eine Grundrechenart steht
28 |
{
29 |
$xnull2[$a]=substr_replace($xnull2[$a-1],'*x',$varpos[$a],1); //ersetzt x durch *x
30 |
}
31 |
32 |
}
33 |
34 |
35 |
$xnull1=preg_replace("/x/i",'$null',$xnull2[$a-1]); //Ersetzt alle x durch $null
36 |
$xnull=str_replace($xnull1,$xnull1.'+0-0/1*1',$xnull1); //fügt am Ende der Gleichung ein +0-0/1*1 hinzu, wichtig für Zeile 56, sonst gibt es undefined.
37 |
38 |
$grundposition[-1]=-6; //wichtig für die for-Schleife, definiert eine Variable
39 |
$grundpos[-1]=-6; //wichtig für die for-Schleife, definiert eine Variable
40 |
$xpotenz[-1]=$xnull; //wichtig für die for-Schleife, definiert eine Variable
41 |
42 |
43 |
for ($i=0;$i<$potenzen;$i++) //for-Schleife
44 |
{
45 |
46 |
$nullpos[$i]=strpos($xpotenz[$i-1],'$null^',$grundpos[$i-1]+6); //Position von $null^
47 |
48 |
$pluspos[$i]=strpos($xpotenz[$i-1],'+',$nullpos[$i]); //Position des nächsten Pluszeichens
49 |
$minuspos[$i]=strpos($xpotenz[$i-1],'-',$nullpos[$i]); //Position des nächsten Minuszeichens
50 |
$malpos[$i]=strpos($xpotenz[$i-1],'*',$nullpos[$i]); //Position des nächsten Mal-Zeichens
51 |
$geteiltpos[$i]=strpos($xpotenz[$i-1],'/',$nullpos[$i]); //Position des nächsten Geteilt-Durch-Zeichens
52 |
53 |
$grundarray=array(1=>$pluspos[$i],2=>$minuspos[$i],3=>$malpos[$i],4=>$geteiltpos[$i]); //Array aus den Positionen
54 |
55 |
56 |
$grundpos[$i]=min($grundarray); //kleinste Position einer Grundrechenart
57 |
58 |
$potenzpos[$i]=strpos($xpotenz[$i-1],'^'); //Position der Potenzen hinter dem Cirkoflex
59 |
$potenz[$i]=substr($xpotenz[$i-1],$potenzpos[$i]+1,$grundpos[$i]-1-$potenzpos[$i]); //Die Potenz als Teilstring
60 |
61 |
$xpotenz[$i]=str_replace('$null^'."$potenz[$i]",'pow($null,'.$potenz[$i].')',$xpotenz[$i-1]);//Umwandlung der Potenz in PHP-Code
62 |
63 |
}
64 |
65 |
echo $_GET['nullgleichung']."........".$xnull."..........".$xpotenz[$i-1;
66 |
}
67 |
?>
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | <span class='normal'>Hier können Sie die Nullstelle einer beliebigen Gleichung mit einer Variablen berechnen. Die Variable muss X heißen. Potenzen werden als x^y angegeben</span>
76 | <form action='405.php' method='get'>
77 | <table border='0' cellpadding='0' cellspacing='4'>
78 | <tr>
79 | <td align='right'>Gleichung:</td>
80 | <td><input class='mOFF' name='nullgleichung' type='text' size='20' maxlength='160'></td>
81 | </tr><tr>
82 | <td align='right'><input type='submit' value='Berechnen!'></td>
83 | </tr>
84 | </table>
85 | </form>
86 |
87 | </body>
88 | </html>
Der soll für eine Gleichung, die ich eingebe, die x durch $null ersetzen und davor ein* hinzufügen, falls da kein +-*/ steht. Leider kriege ich immer, wenn ich ihn ausführe, einige Warnungen und Notizen, dass in Zeile soundso (je nach Gleichung) der Offset undefiniert ist und in der Funktion strpos() der Offset nicht im String enthalten ist. Wenn ich in Zeile 27 die and durch or ersetze, kriege ich keine Meldungen, aber dann fügt der in jedem Fall ein * vor dem x ein, auch wenn da ein+-*/ steht.
Kann mir jemand helfen?
Greetz, Ilinsekt
/edit: Problem gelöst, kann geclosed werden.