post[ ] übergabe problem in verbindung mit array

seomaniac

Grünschnabel
hallo liebe tutorials.de community
ich hoffe das ich hier ein paar nüztliche antworten von kompetenten usern erhalte
und ein teil von euch werde ;)

hier mein problem:

PHP:
//in dem vorigem formular ist ein dropdown was 'typ' übergibt entweder $d1 oder $d2


$d1 = array( 'd1.php', 'd2.php', 'd3.php');
$e1 = array( 'e1.php', 'e2.php', 'e3.php');

$typ = $_POST['typ']; // so kommt ein error = Uninitialized string offset: 1 in dieser php zeile der includes
// $typ = $d1; // so geht es komischerweise

include $typ[1];

//hier ist noch rechen content

include $typ[3];

//bitte um hilfe wie ich den typ übernehmen kann ohne einen error zu erzeugen
// vielen dank :) ;
 
Hallo,

bist du dir sicher, dass das Formular wirklich fehlerfrei versendet wird und es auch ein Formularelement mit dem Namen "typ" gibt?

Poste mal die Ausgabe des folgenden Codes:
PHP:
var_dump($_POST);
 
PHP:
array(5) { ["typ"]=> string(5) "de_w3" ["sex"]=> string(1) "M" ["vorname"]=> string(3) "max" ["name"]=> string(5) "power" ["gebname"]=> string(0) "" }

danke für die schnelle hilfsbereitschaft :)

/e:

das hauptproblem ist eig das ich eine haupt vor auswahl treffe in noch einem formular vorher in der der typ per dropdown schon übernommen wird diese per post dann an das nächste formular gegeben wird und ich diese ja dann wieder laden und neu posten muss.

gibt es da vielleicht noch eine einfachere lösung?

lg
 
Zuletzt bearbeitet:
Bitte achte auf Groß- und Kleinschreibung ;)

Also entweder kannst du bei deinem 2. Formular ein verstecktes Input-Feld mit dem vorher ausgewähltem Typ hinzufügen:
HTML:
<input type="hidden" name="typ" value="<?php GetTypeFromCurrentPOST(); ?>" />
Oder du kannst den Wert auch in der Session speichern:
PHP:
$_SESSION['form1_typ'] = GetTypeFromCurrentPOST();
 
danke für deine schnellen antworten :)

Ich habe es nun mit dem Hidden getestet:

PHP:
<input type="hidden" name="typ" value="$<?php echo $_POST['typ'];?>" />

es wird auch nun laut dem vardump übergeben:

PHP:
array(5) { ["typ"]=> string(6) "$de_1"

aber erstens Gefällt mir das nicht das der Hidden im Quelltext sichtbar ist und
zweitens gibt es dennoch einen Error in der kommenden php.

PHP:
Notice: Uninitialized string offset: 1 in ...php on line 109
das ist wiedermal die include zeile :-/

ich habe es mit if else getestet vor include:

PHP:
if ( $typ == "de_1" ) {
	$typ = $de_1;
} else {
	$typ = $typ;
}

dann funktioniert es Komischerweise, hat wohl wirklich etwas mit dem dollar Zeichen zutun :-/

wenn ich $typ = '$'.$typ; anstatt des ifs gebe dann tritt der Uninitialized string wieder auf.

gibt es denn evtl noch einen Besseren weg? da ich nicht immer wenn ich neue dinge integriere vorher ein neues if in die datei schreiben möchte.

lg
 
Was willst du denn genau machen?

Zuerst sollte man überhaupt nicht Daten von außen für eine Include-Zeile benutzen. Aber auch das einfache Ausgeben des Strings aus $_POST kann gefährlich sein!

Siehe auch mein Tutorial: Sicherheit in PHP-Codes schaffen

aber erstens Gefällt mir das nicht das der Hidden im Quelltext sichtbar ist und
zweitens gibt es dennoch einen Error in der kommenden php.
Ist jetzt der Fehler beim Zugriff auf $_POST['typ'] oder bei $typ[1]?


Probiere mal folgendes:
PHP:
//in dem vorigem formular ist ein dropdown was 'typ' übergibt entweder $d1 oder $d2 


$de_1 = array( 'd1.php', 'd2.php', 'd3.php'); 


if ( isset($_POST['typ']) )
{
  $typ = $_POST['typ'];
  if ( $typ == 'de_1' )
    $typ = $de_1;
  else
    exit('Falscher Wert für Typ-Parameter!');


  include($typ[3]);  // Sicher, dass es 3 heißen muss?
  // Denn im Array $de_1 gibt es dieses Element nicht.
  // Die Indizes fangen bei 0 an!
}
else
{
  exit('Typ-Parameter nicht übergeben.!');
}
 
Danke für deine Hilfe mein guter,
ich habe leider noch nicht all zu große Ahnung von php, das ist für mich eher noch Neuland ;)

habe es jetzt so Gelöst das ich die Arrays die ich vor verpackt hatte nun
anstatt
PHP:
$d1 = array( 'd1.php', 'd2.php', 'd3.php');
$e1 = array( 'e1.php', 'e2.php', 'e3.php');

$typ = $_POST['typ'];

direkt so verpacke:
PHP:
$typ = $_POST['typ'];
if ( $typ == 'd1' ) {$typ = array( 'd1.php', 'd2.php', 'd3.php');}
if ( $typ == 'e1' ) {$typ = array( 'e1.php', 'e2.php', 'e3.php');}

ist ein Schritt gespart, denn ob ich nun oben vorher was Anlege oder diese hier heraus Definiert wird ist doch Wurst oder gibt es da ein paar Sicherheitsbedenken?

lg

/e: das ist nur ein Musterbeispiel was ich hier zur Veranschaulichung genommen habe, natürlich funktionierte es auch schon zum Test als ich es noch ohne Post einfach übernommen hatte :)
 
Zuletzt bearbeitet:
Zurück