Variablen werden nicht übergeben.

Feyladil

Grünschnabel
Hallo,

ich bastele momentan an einem Konfigurator, mit dem man Fahrräder zusammenstellen kann. Die benötigten Datensätze sind in einer MySQL-Datenbank hinterlegt und werden per PHP ausgewertet.

Der Ansatz ist wie folgt: Jedes Rad besteht aus mehreren Baugruppen ("Sattel", "Rahmen", "Gabel", usw.). Pro Gruppe können mehrere Modelle zur Verfügung stehen. Ist mehr als ein Modell vorhanden, kann genau eines über ein Option-Menü gewählt werden. Ansonsten wird die entsprechende Komponente eingegraut aufgelistet.

Bis hier hin funktioniert bereits alles so wie ich mir das vorstelle. Hier das dazugehörige Script in verkürzter Fassung:

PHP:
<html>
  <body>
   <form action="ausgabe.php" method="post">
     <table>

<?php
  $var_sortierung = array ("Rahmen", "Rahmengröße", "Rahmenfarbe", "Dämpfer", "Steuersatz", "Gabel", "Vorbau", "Lenker", "Lenkergriffe", "Sattel", "Sattelstütze", "Kurbel", "Innenlager", "Kette", "Kassette", "Umwerfer", "Schaltwerk", "Schalthebel", "Bremsen", "Felgen", "Reifen");

  for ($i=0; $i<21; $i++)
  {
    $var_sql = "SELECT
                    config_bikes.position,
                    config_bikes.biketitel,
                    config_bikes.bike,
                    config_bikes.bikegruppe,
                    config_components.komponententitel,
                    config_components.komponentengruppe,
                    config_bike_component.bike,
                    config_bike_component.bikegruppe,
                    config_bike_component.komponententitel,
                    config_bike_component.komponentengruppe,
                    config_bike_component.komponentengewicht,
                    config_bike_component.komponentenpreis
                    FROM
                    config_bikes,
                    config_components,
                    config_bike_component
                    WHERE config_components.komponentengruppe LIKE '" . $var_sortierung [$i] . "' AND
                    config_bikes.bike LIKE '" . $var_bike . "' AND
                    config_bikes.bikegruppe LIKE '" . $var_bikegruppe . "' AND
                    config_bikes.bike LIKE config_bike_component.bike AND
                    config_bikes.bikegruppe LIKE config_bike_component.bikegruppe AND
                    config_components.komponententitel LIKE config_bike_component.komponententitel AND
                    config_components.komponentengruppe LIKE config_bike_component.komponentengruppe
                    ORDER BY config_components.komponententitel";
    $var_ergebnis = mysql_query ($var_sql, $_SESSION ["var_link"]) or die ($var_sql . " erzeugte folgenden Fehler: " . mysql_error () );
    $var_anzahl = mysql_num_rows ($var_ergebnis);

    if ($var_anzahl > 1)
    {
      echo '      <tr>' . "\n";  
      echo '        <td rowspan="' . $var_anzahl . '"><b>' . $var_sortierung [$i] . '</b></td>' . "\n";

      while ($var_datensatz = mysql_fetch_array ($var_ergebnis))
      {
        echo '        <td><input name="' . $var_sortierung [$i] . '" type="radio" value="' . $var_datensatz ["komponententitel"] . '">' . $var_datensatz ["komponententitel"] . '</td>' . "\n";
        echo '      </tr>' . "\n";
      }
    }
    else
    {
      while ($var_datensatz = mysql_fetch_array ($var_ergebnis))
      {
        echo '      <tr>' . "\n";  
        echo '        <td><b>' . $var_sortierung [$i] . '</b></td>' . "\n";
        echo '        <td><input name="' . $var_sortierung [$i] . '" type="text" value="' . $var_datensatz ["komponententitel"] . '" size="50" maxlength="50" readonly></td>' . "\n";
        echo '      </tr>' . "\n";
      }
    }
  }
?>

        <tr>
          <td style="height:35px; vertical-align:bottom;"><input name="var_abschicken" type="image" src="images/content_button_absenden.jpg"></td>
        </tr>
      </table>
    </form>
  </body>
<html>
?>


Jetzt zu dem Part, der nicht funktioniert: Sind alle Komponenten gewählt, soll noch einmal eine Auflistung aller gewählten Teile angezeigt werden. D.h. es wird ein entsprechendes Formular abgeschickt und dann dessen Daten ausgegeben.

Und genau an dieser Stelle hapert es. Es gelingt mir nämlich nicht, die Variablen zu übergeben bzw. auszulesen.

Nach meinem Verständnis sollte durch obiges Skript unter anderem ein Input-Feld namens "Gabel" (sowie "Rahmen, "Sattel", usw.) existieren. Dessen Inhalt sollte ich somit über ein

PHP:
<?php echo $Gabel; ?>

ausgeben können. Ich kriege allerdings lediglich die Fehlermeldung:

Notice: Undefined variable: Gabel in ...\ausgabe.php on line 16

Ich habe mich daraufhin näher mit dem Thema beschäftigt und habe folgendes herausgefunden:

"register_globals" steht auf "off", "error_reporting" steht auf "E_ALL". Die PHP-Version ist 5.0.3, MySQL ist Version 4.1.7.

Mi diesem Wissen habe dann versucht, die Variablen sauberer anzusprechen und zwar mit:

PHP:
echo $_POST ["Gabel"];

Dies produziert dann leider nur die folgende Fehlermeldung:

Notice: Undefined index: Gabel in ...\ausgabe.php on line 16

Übergebe ich die Daten aber mit einem "mailto" werden diese korrekt in die eMail geschrieben.

Rahmen=SL+5.0&Steuersatz=Ritchey&Vorbau=Ritchey&Lenker=Ritchey&Lenkergriffe=Ritchey&Sattel=Selle+Italia+C2&Sattelst%FCtze=Ritchey&Kurbel=Shimano+Deore&Innenlager=Shimano+Deore&Kette=Shimano+HG53&Kassette=Shimano+Deore&Umwerfer=Shimano+Deore&Schaltwerk=Shimano+XT&Schalthebel=Shimano+Deore&Bremsen=Shimano+Deore+V-Brake&Felgen=Mach1+M210&Reifen=Conti+Explorer&var_abschicken.x=28&var_abschicken.y=8

Fazit: Ich weiß nicht mehr weiter. Für Hilfe wäre ich mehr als dankbar.

Gruß
Feyladil
 
Das hat leider nichts gebracht. Die Fehlermeldung bleibt die gleiche.

Was bedeutet denn die Fehlermeldung Undefined index:.

Bzw. wie kriege ich dieses Problem in den Griff? Ich habe an anderen Stelle mit "if isset" gearbeitet. Nur weiß ich hier nicht, ob und wie das gehen soll...
 
es liegt evtl. daran, dass du mehrere eingabefelder mit einem identischen Namen hast.

Hier prüfst du, ob mindestens zwei Datensätze vorhanden sind
PHP:
 	if ($var_anzahl > 1)

Hier gibst du jeweils einem Inputfeld jedes Datensatzes den selbem Namen
PHP:
 	 while ($var_datensatz = mysql_fetch_array ($var_ergebnis)) 
	 { 
		echo '		<td><input name="' . $var_sortierung [$i] . '" type="radio" value="' . $var_datensatz ["komponententitel"] . '">' . $var_datensatz ["komponententitel"] . '</td>' . "\n"; 
		echo '	 </tr>' . "\n"; 
	 }

Probier mal folgendes:
PHP:
while ($var_datensatz = mysql_fetch_array ($var_ergebnis)) 
{ 
echo ' <td><input name="' . $var_sortierung [$i] . '['.$i.']" type="radio" value="' . $var_datensatz ["komponententitel"] . '">' . $var_datensatz ["komponententitel"] . '</td>' . "\n"; 
echo ' </tr>' . "\n"; 
}

Dannach prüfst du es so ab:
PHP:
for($i=0; $i<count($_POST["Gabel"]); $i++){
	echo $_POST["Gabel[".$i."]"];
}
 
Zuletzt bearbeitet:
Es ist richtig, dass mehrere Eingabefelder den gleichen Namen haben. Es handelt sich hierbei aber um Radio-Buttons.

Bsp.: Für ein Rad gibt es 3 verschiedene Gabeln. Folglich gibt es drei Datensätze hierzu, die untereinander aufgelistet werden. Alle haben den gleichen Namen, nämlich "Gabel". Nur das value ist ein anderes.

Nach meinem Verständnis muss das auch so sein, da immer nur eine Gabel ausgewählt sein darf. D.h. die Gabeln müssen einer Gruppe angehören und das wird über den Namen des input-Feldes gemacht.

Ich habe die Änderung trotzdem mal probiert. Allerdings kriege ich den gleichen Fehler wie zuvor.

Ich nehme an, dass ich die Variable in ausgabe.php initialisieren muss. Ich weiß nur leider nicht wie.

Gruß
Feyladil
 
Hier mal ein verkürzter Auszug des Quellcodes, so wie er im Browser erzeugt wird:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Config Components</title>
    <link rel="Stylesheet" type="text/css" href="stylesheets.css">
  </head>
  <body>
    <form action="ausgabe.php" method="post">
    <table cellpadding="0px" cellspacing="0px">
      <tr>
        <td rowspan="2"><b>Rahmengröße</b></td>
        <td><input name="Rahmengröße" type="radio" value="15''">15''</td>
      </tr>
      <tr>
        <td><input name="Rahmengröße" type="radio" value="17''">17''</td>
      </tr>
      <tr>
        <td rowspan="2"><b>Rahmenfarbe</b></td>
        <td><input name="Rahmenfarbe" type="radio" value="hi-tech silber matt">hi-tech silber matt</td>
      </tr>
      <tr>
        <td><input name="Rahmenfarbe" type="radio" value="schwarz matt">schwarz matt</td>
      </tr>
      <tr>
        <td><b>Steuersatz</b></td>
        <td><input name="Steuersatz" type="text" value="Ritchey" size="50" maxlength="50" readonly></td>
      </tr>
    </table>
  </body>
</html>

Vielleicht kann man daraus ja den entscheidenen Fehler ersehen. :)

Gruß
Feyladil
 
Zuletzt bearbeitet:
Feyladil hat gesagt.:
Ich nehme an, dass ich die Variable in ausgabe.php initialisieren muss. Ich weiß nur leider nicht wie.

In PHP brauchst du keine Variablen initialieseren.
Es könnte daran liegen, dass kein Textfeld Namens "Gabel" existiert. Zumindest finde ich keins in deinem HTML auszug
 
Okay, schlechter Auszug von mir.
Genau wie "Rahmenhöhe" gibt es ein entsprechendes Input-Feld für "Gabel".



PHP:
     <tr>
        <td><b>Gabel</b></td>
        <td>
          <table cellpadding="0px" cellspacing="0px">
            <tr>
              <td><input name="Gabel" type="radio" value="Manitou Axel Super">Manitou Axel Super</td>
            </tr>
            <tr>
              <td><input name="Gabel" type="radio" value="Rock Shox Pilot SL">Rock Shox Pilot SL</td>
            </tr>
          </table>
        </td>
      </tr>

Die Abweichung des Codes vom obigen Auszug rührt daher, dass ich eine kleine Änderung machen musste, da ansonsten an einer Stelle ein <tr> Tag fehlen würde.
 
Zuletzt bearbeitet:
Zurück