Problem mit einem Script

SantaCruze

Erfahrenes Mitglied
Hallo allerseits :) Und zwar habe ich mal wieder ein kleines Problem. Fehlerausgabe:

Notice: Undefined index: action in C:\xampp2\xampp\htdocs\buildclass\bauscript.php on line 286
PHP:
switch($_POST["action"])
{
   case 'bauen':
      bauAuftrag($uid,$status,$planet);
      index($uid,$status,$planet);
      break;
   default:
      index($uid,$status,$planet);
      break;
}


Nun existiert aber dieser Index Action und zwar bei

HTML:
            <form method="post" action="user.php?tmp=entwicklung&status='.$status.'">
            <input name="typ" type="hidden" value="'.$data['name'].'">
            <input name="action" type="submit" value="bauen"></form></div></td>';

welches vorher im Script aufgerufen wird. Aber die Fehlermeldung kommt trotzdem zustande.
 
Hallo,
in den zwei CodeSchnipseln, die du gepostet hast ist kein Fehler zu sehen - dh du kannst maximal die Bestätigung deiner Verwunderung bekommen. Da es aber offensichtlich einen Fehler gibt, solltest du vielleicht mehr vom code zeigen um dir helfen zu können.
 
Okay also ich hab jetzt mal den letzten Teil des ganzen Scripts kopiert und füge ihn hier bei. Am Anfang stehen nur einige Berechnungsfunktionen und halt Include Anweisungen.

PHP:
function index($uid,$status,&$planet)
{
   require('connect.php');
   
   if($planet->{$status.'Art'} && $planet->{$status.'Time'}>0)
    {
       switch($status)
        {
           case 'g':
              $anzeige = 'Bau';
              break;
        }
        print '<b>'.$anzeige.'projekt</b>: '.strtoupper($planet->{$status.'Art'}{0}).substr($planet->{$status.'Art'},1);
        print ' <b>Fertigstellung</b>: ';
        $countStatus = 'status='.$status;
         //habe eine funktion für einen countdown
        //einen countdownscript müsst ihr euch selbst anschaffen
        //meine funktion macht einen countdown zu einem timestamp
        #countdown($planet->{$status.'Time'});
    }
   //man holt die techs auf der datenbank der art='$status',
   //in unserem fall ist ja $status='g', da wir ja gebäude bauen wollen
   $sql=mysql_query("SELECT name,art,anforderung FROM bg_techs WHERE art = '$status'");
   
    while($data=mysql_fetch_array($sql))
    {
       $checkAnf=$planet->checkAnforderung($data['name'],$uid);
       
       //farbenzuweisung
       switch($checkAnf[0])
       {
          case 'false':
             $farbe=' color="red"';
             break;
          case 'true':
             $farbe=' color="green"';
             break;
       }
       
      //da die technamen klein in der datenbank stehen, wird einfach der erste buchstabe großgeschrieben
      $gName=strtoupper($data['name']{0}).substr($data['name'],1);
      
      //wieder alles kleingeschrieben, für die spätere verarbeitung
      $gTotalName=strtolower($gName);

      //wenn die tech sindbar sein soll
      if($checkAnf[0]!='unsichtbar')
      {
      
            //da die technamen klein in der datenbank stehen, wird einfach der erste buchstabe großgeschrieben
            $gName=strtoupper($data['name']{0}).substr($data['name'],1);
           
            //wieder alles kleingeschrieben, für die spätere verarbeitung
            $gTotalName=strtolower($gName);
           
           
            //meldung ist die gebanzeige
            $meldung = '<table width="532" border="0">
            <tr>
            <td colspan="8">
            <table width="400" border="0">
            <tr>
            <td width="250"><font'.$farbe.'><strong>'.$gName.'</strong> [Level: '.$planet->$gTotalName.']</font></td>';
           
            //formular für den bauauftrag
            $meldung .= '<td width="75"><div align="center"></div></td>
            <td width="75"><div align="center">
            <form method="post" action="user.php?tmp=entwicklung&status='.$status.'">
            <input name="typ" type="hidden" value="'.$data['name'].'">
            <input name="action" type="submit" value="bauen"></form></div></td>';
         
         //wenn die rohstoffe in der anforderung nicht stehen,
         //dann ist die anforderung 0
         if(!isset($checkAnf['holz']))
         {
            $checkAnf['holz'] = 0;
         }
         if(!isset($checkAnf['stein']))
         {
            $checkAnf['stein'] = 0;
         }
         if(!isset($checkAnf['gold']))
         {
            $checkAnf['gold'] = 0;
         }
         if(!isset($checkAnf['eisen']))
         {
            $checkAnf['eisen'] = 0;
         }
         
         //anforderung anzeige
         //muss grafisch angepasst werden
            $meldung .= '</tr>
            </table> </td>
            </tr>
            <tr>
            <td width="50"><div align="center"><img name="HOLZ" src="" width="25" height="25" alt=""></div></td>
            <td width="83"><div align="center">'.$checkAnf['holz'].'</div></td>
            <td width="50"><div align="center"><img name="stein" src="" width="25" height="25" alt=""></div></td>
            <td width="83"><div align="center">'.$checkAnf['stein'].'</div></td>
            <td width="50"><div align="center"><img name="stein" src="" width="25" height="25" alt=""></div></td>
            <td width="83"><div align="center">'.$checkAnf['gold'].'</div></td>
            <td width="50"><div align="center"><img name="eisen" src="" width="25" height="25" alt=""></div></td>
            <td width="83"><div align="center">'.$checkAnf['eisen'].'</div></td>
            </tr>';
         
            $meldung .= '</tr>
            </table>';
           
            print $meldung;
           
            print '<br>';
      }
    }
	
	function bau($uid,$status,&$planet)
{

    require('connect.php');

    $time=time();
    if($planet->{$status.'Art'} && $planet->{$status.'Time'}>0 && $planet->{$status.'Time'}<=$time)
    {
        $planet->plusRes($planet->{$status.'Art'}.':1',$uid);
        switch($status)
        {
           case 'g':
              $aktion = 'gebaut';
              break;
        }
        print strtoupper($planet->{$status.'Art'}{0}).substr($planet->{$status.'Art'},1).' wurde '.$aktion.'!<br><br>';
        $planetId = $planet->planetId;
        mysql_query("UPDATE bg_karte Set ".$status."Art='',".$status."Time='0' WHERE id='$planetId'");
        $planet->setData($uid);
    }

}

 //bei $plus muss die anforderungssyntax angewendet werden, das ist eine methode der klasse "Planet"
   function plusRes($plus,$uid)
   {
      require('connect.php');

      $plus = explode("|", $plus);
      $c=count($plus);
      for($i=0;$i<$c;$i++){
         $p = explode(":", $plus[$i]);

            $neueAnzahl = $this->$p[0] + $p[1];
            mysql_query("UPDATE bg_karte Set ".$p[0]." = '".$neueAnzahl."' WHERE id = '$this->inselId'")
                        or die(mysql_error());

        }
   }
}

$time=time();
if($planet->{$status.'Art'} && $planet->{$status.'Time'}>0 && $planet->{$status.'Time'}<=$time)
{
   bau($uid,$status,$planet);
}

switch($_POST["action"])
{
   case 'bauen':
      bauAuftrag($uid,$status,$planet);
      index($uid,$status,$planet);
      break;
   default:
      index($uid,$status,$planet);
      break;
}
 
Die Fehlermeldung sagt eigentlich schon alles aus:
Notice: Undefined index: action

In dem Array gibt es den Schlüssel action nicht.

Schreib davor doch mal
PHP:
if(isset($_POST['action'])) {
 
stimmt natürlich, wenn du das Script auch ausführst ohne, dass das formular abgesendet wird solltest du vor deiner switch case Anweisung noch mit isset() überprüfen ob die Variable wirklich existiert.

Ich verstehe allerdings deine Fehlerbeschreibung so, dass obwohl das Formular abgesendet wird - also $_POST['action'] existieren sollte, dies eben nicht der Fall ist.
 
Nun der Isset und das Formular sind in einem. Problem ist allerdings, beim aufrufen des Scriptes kommt der Fehler als erstes zur Schau, davon abgesehen habe ich aber keine Option betätigt , also kein Submit von nem Button gemacht so das beim reinen aufruf des Scriptes schon der Fehler kommt. Vielleicht hab ich die Sache auch falsch eingebunden. Werde mich später nochmal damit befassen und das Script auseinanderflücken und neu aufbereiten.
 
Zurück