Globale Variablen Teil II

T

ThaHammer

Aktives Mitglied
Thread Starter
Dabei seit
01.06.2004
Beiträge
3.303
Reaktionspunkte
13
So mittlerweile weiß ich ja wie ich meine Globalen variablen bekomme. Das funktioniert jetzt auch. Nur ein Problem besteht bei mir gerade noch:
Und zwar der Return Wert des Arrays feldname ist immer 0, die Größe immer 1. Das liegt daran das ich Sie am Anfang mit $feldname=""; angelegt habe.


PHP:
function schleife($start,$menge)
	{
		global $resultf,$feldname;
		for ($i=$start;$i<$menge;$i++)
		  {
		  $meta = mysql_fetch_field($resultf, $i);
		  $lang = $meta->max_length+2;
		  $typen = $meta->type; // Typ des Feldes ermitteln
		  if($lang>=30)  // Wenn die Felder zu breit sind auf 30 setzten
			  {
			  	$lang = 30;
			  } 
		  $feldname[$i] = "Feld" . $i; 
		  echo "<td><input type="\.$typen.\" name="\.$feldname[$i].\" size="\.$lang.\" /></td>"; 
		  }	
	  echo "</tr>";
	  return $GLOBALS[feldname];
	}

Wie übergebe ich das Array feldname richtig?
 
hi!

return $feldname;

aber das array $feldname ist sowieso global und damit ist die rückgabe nicht nötig.
 
du kannst feldname auch ohne zähler per html übergeben!
einfach name="feldname[]" verwenden ...
 
Ihr könnt ja tolle Sachen! :eek:


kopfkratz
 
broxx schrieb:
hi!

return $feldname;

aber das array $feldname ist sowieso global und damit ist die rückgabe nicht nötig.

Hmm? Dann frage ich das Ergebnis falsch ab! :rolleyes:
 
Für solche Problemfälle bietet sich

PHP:
print_r($feldname);

an, hier kann man genau sehen, ob arrays das enthalten was sie sollen. Achtung, Betrachtung im Quelltext des HTML-Output ist aussagekräftiger, als es sich im Browser direkt anzusehen! Der RETURN eines GLOBALS ist nat. widersinnig. Auch die SPACES vor und nach "." sind unzulässig, aber ich nehme an, das ist nur hier im Beispiel so!?
 
Zuletzt bearbeitet:
wegus schrieb:
Für solche Problemfälle bietet sich

PHP:
print_r($feldname);

an, hier kann man genau sehen, ob arrays das enthalten was sie sollen. Achtung, Betrachtung im Quelltext des HTML-Output ist aussagekräftiger, als es sich im Browser direkt anzusehen! Der RETURN eines GLOBALS ist nat. widersinnig. Auch die SPACES vor und nach "." sind unzulässig, aber ich nehme an, das ist nur hier im Beispiel so!?

Ja, das meiste im Quelltext gibt nur den Inhalt der Variablen wieder aus. Ich will ja erst einmal sehen ob es überhaupt geht, bevor ich das ganze an MYSQl übergebe! Weißt Du wenn ich das Leerzeichen vor size raus mache geht es nicht mehr richtig.

Mein Probelem ist die Übergabe von der Funktion zurück ans Programm. Das Array ist dann immer leer!
PHP:
  $feldname[]="";

So habe ich den feldnamen definiert. Das mit den Globals unten war nur zum testen. ich kann doch auf den Inhalt des array mit $feldname[$i] zugreifen, oder?
 
Natürlich kannst Du so zugreifen!

PHP:
$feldname[$zaehler]=27

ist völlig korrekt!
Ich meinte die Leerzeichen in
PHP:
= "Feld" . $i;
// muss sein:
="Feld".$i;

Der return des GLOBAL-Arrays ist mit Sicherheit nicht richtig und die Frage spannend, was da denn wohl passiert, schließlih dürfte das Array $GLOBALS Readonly sein!

was passiert denn bei

PHP:
$feldname=array();

function test ()
{
 global $feldname;
 $feldname[3]=7;
 $feldname[4]=12;
 $feldname[6]=8;


}
test();
print_r($feldname);

Mehr ist nämlich eigentlich gar nicht nötig! Sollte das Array nach der Funktion leer sein, dann guck mal ob es in der PHP.ini nicht vielleicht bei Zeiten auch dafür einen Switch gibt
 
Das Skript hier geht, er bringt den Inhalt des Arrays!

Machen zwei Formulare eigentlich was aus? Mit dem ersten lese ich die Tabellennamen der Datenbank und baue daraus ein Menu. Die Auswahl wird weiter gegeben und im nächsten Formular wird die Tabelle angezeigt. Dort soll später was zu ändern sein. Der nächste Post schreibt dann alles in die Tabelle. Sobald ich im zweiten die Funktion aufrufe, bekomme ich keine Feldnamen zurück.
 
Gibst Du denn das array mit? Dann solltest Du es zunächst URL-encoden ( siehe dazu urlencode bei PHP-Manual) und die serialize-Funktion für die Übertragung!
 
wegus schrieb:
Gibst Du denn das array mit? Dann solltest Du es zunächst URL-encoden ( siehe dazu urlencode bei PHP-Manual) und die serialize-Funktion für die Übertragung!

Die Variable feldname war nur weil er die Variable name nicht übergab!
ich wollte heute eh das Skript wieder so umschreiben das nur noch name verwendet wird. Der Grund ist, das im Array name die Spaltennamen der tabelle stehen! Und diese brauche ich hernach wieder um in die tabelle zu schreiben oder etwas zu ändern. Ich will das Skript so haben, das nur geändert wird, was auch eingetragen wurde im Formular, oder wenn das leer ist eben gar nichst!

URL-encoden? Gut werde mir das mal anschauen, wenn ich das Skript wieder umgebaut habe!
serialize-Funktion ?? keine Ahnung was das ist, muß mich da erst einlesen!

Danke schon mal, einen Schritt weiter bin ich ja schon gekommen! :)
 
Also, ich habe das Skript wieder so umgebaut, das es nur ein Array gibt ($name).
Das array enthält die Spaltennamen, die ich später für die MYSQL Anweisung brauche. (z.B. INSERT ID INTO table) wobei ID = $name[0] usw.

Funktioniert soweit alles, bis zu dem Punkt wo der zweite Post passiert!
PHP:
echo "<form method='post' action='$PHP_SELF?mengef=$mengef&name=$name&table_name=$table_name' name='form' >";

// Weiter unten dann die if Anweisung, gesendet1 ist ein hidden Formularfeld

if (!empty($_POST['gesendet1']))

Hier werden meine variablen weiter gegeben! $table_name macht er nachdem ich noch in einer if Anweisung Teste ob gepostet wurde. Innerhalb der selben if Anweisung gebe ich dann noch $name aus. Aber als Ergebnis bekomme ich nur Size = 0 und wenn ich mit $name[$i] alles ausgebe, kommt A R R A Y.
Also $i=0 kommt A, bei $i=1 kommt R usw.

Irgendwo wird doch da beim Post das Array nicht richtig übergeben?
 
wegus schrieb:
Gibst Du denn das array mit? Dann solltest Du es zunächst URL-encoden ( siehe dazu urlencode bei PHP-Manual) und die serialize-Funktion für die Übertragung!

serialize war genau das richtige! :D

Jetzt habe ich die Spaltennamen auch unten. Man hätte ich doch erst was einfacheres angefangen! :p
 
Zurück
Oben Unten