Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Variablenübergabe

Code:                   In Zwischenablage kopieren (nur IE)
1">

erhalte dabei folgende fehlermeldung:

Notice: Undefined index: filename in

filename wird also nicht übergeben!
woran liegt das bloß`??

vielen dank und grüße,

Strugge
Hier gehts zum Orginal Eintrag "Variablenübergabe" im Forum

Antworten

wie definierst du denn $filename

Code:                   In Zwischenablage kopieren (nur IE)
2">

in dieser deiner zeile 2 rufst du den wert von $filename schon auf gesetzt ist er aber noch nicht wirklich...


2.

doch! $filename und $language kommen aus einem formular eines scripes zuvor! die existieren also!


3.

Dann greiff mit $_POST['filename'] bzw. $_POST['language'] darauf zu.

Wenn es dein Problem nicht löst ist es dennoch die bessere Schreibweise...


4.

habe ich geändert, macht aber keinen unterschied! die variablen filename, language sind VOR dem formular sichtbar und funktinieren erst nach dem formular nicht mehr!


5.

$_POST['word'] z.B. übernimmt er problemlos...

noch andere ideen??


vielen dank!!!


6.

hier noch mal der aktuelle code:

Code:                   In Zwischenablage kopieren (nur IE)
3">




7.

Dann gib mal den Code vom Formular.


8.

meine das formular welches ich gepostet habe...das zwischen den beiden PHP tags!

das vorgeschaltete funktioniert ja!

Hier dennoch:

<form action="new_2.php" method="post">

<table align="center" border="0">
<tr>
<td>Please enter name for this unit:</td>
<td><input type="text" name="filename" size="25" maxlength="25"></td>
</tr><tr></tr><tr></tr>
<tr>
<td><p>Please choose language:</p></td></tr><tr>
<td><input type="radio" name="language" value="English"> English</td></tr><tr>
<td><input type="radio" name="language" value="French"> French</td></tr><tr>
<td><input type="radio" name="language" value="Italien"> Italian</td></tr><tr>
<td><input type="radio" name="language" value="Spanish"> Spanish</td></tr><tr>
</tr><tr></tr><tr></tr>

<td><input type="submit" name="confirm" value="Confirm your choice"></td>
</tr>
</table>

</form>


9.

und danach wird dann das bereits gepostete script aufgerufen!


10.

In welcher Zeile wird der Fehler gemeldet?


11.

Notice: Undefined index: filename in C:\Dokumente und Einstellungen\Matthias\Desktop\Vocabulary\new_2.php on line 110


12.

Ehm, leider kann ich nicht hellsehen und weiss nicht welches Zeile 110 ist... ABER:

Zitat:
$file = fopen($_POST['filename'], "a");
Hier greifst du wieder auf den ursprünglich übermittelten Wert des Dateinamens ohne Pfad, Sprache und Endung zu... das willst du sicher nicht...?


13.

wieso denn der ursprüngliche? gleioch zu beginn des 2. scripts steht doch:
$filename = "units/".$_POST['filename']."-".$_POST['language'].".unit";
dort weise ich doch wieder alles zu!


14.

oder gilt die übergabe immer nur für im formular festgelegte variablen und nicht für im php code definierte?


15.

aber dies ist die zeile 110: $file = fopen($_POST['filename'], "a");


16.

Also:

Aus Sicherheitsgründen sollte man register_globals ausschalten. Das heisst dass Variablen aus POST und GET Abfragen nicht automatisch in der Form $variable zur Verfügung stehen sondern eben als $_POST['variable'] oder $_GET['variable'].

Gleich zu Beginn gibst du den Befehl $filename mit den Daten des Formulars zusammenzusetzen. Selbst wenn bei dir register_globals noch on sind, ist der Wert der Variable $filename jetzt überschrieben. Den Wert von $_POST['filename'] hast du aber nie geändert (würde ich auch nie tun) und beinhaltet immer noch den Wert der aus dem Formular kam. $filename ist nicht gleich $_POST['filename']!

Da du ja den kompletten Dateinamen mit Pfad und Endung schon $filename zugewiesen hast (gib der Variablen vielleicht mal einen komplett anderen Namen, dann wird's verständlicher), tust du

Code:                   In Zwischenablage kopieren (nur IE)
4">

So, jetzt sollt's klappen. Ich hätt's schon eher sehen sollen.... vorübergehende Blindheit... hoffentlich.

Zum Thema register_globals:
11.1. Wie übergebe ich Variablen aus einem Formular an ein PHP-Script?
[url]http://www.dclp-faq.de/q/q-formular-variablen.html[/url]


17.

nein, das bringt auch nichts... es geht doch um den zuletzt an $filename zugewiesenen wert im script!
den will ich übergeben wieder an sich selber! also müsste ich doch "nur" genau wie vorher bei $filename
und $language mit $_POST['var'] zugreifen...
vom 1. zum 2. script gehts doch! nur vom 2. auf sich selber nicht mehr!


18.

So, jetzt ändere mal den Namen von $filename z.B. in $filename_cmpl. Überall wo du den kompletten Dateinamen inkl. Pfad usw. haben willst, gibst du dann $filename_cmpl an. Überall wo du nur die Bezeichnung der Datei willst ohne Pfad, Endung usw. gibst du $_POST['filename'] an.

Zitat:
<input type="hidden" name="filename" value="<?php echo $filename; ?>">
Hier würde der komplette Dateiname gesendet.... du willst aber sicher nur die Bezeichnung...

Zitat:
$file = fopen($_POST['filename'], "a");
Hier gibst du nur die Bezeichnung der Datei an...

Mach das wirklich im ganzen Skript, sonst gibt's nur Folgefehler.
Schalte register_globals OFF (wenn du kannst) und verwende nur noch $_GET und $_POST. Das hat meiner Meinung nach einen entscheidenden Vorteil: du siehst auf den ersten Blick ob du nun mit Formulardaten hantierst oder mit internen Variablen.


19.

macht keinen unterschied!
komisch ist auch wenn ich die folgenden beiden zeilen vertausche kommt derselbe fehler!

if(!isset($_POST['word'])) {
$filename = "units/".$_POST['filename']."-".$_POST['language'].".unit";

$filename wird also einfach nicht übertragen!!!


20.

$file = fopen($_POST['filename'], "a");
auch hier brauche ich den kompletten Namen der Datei mit ohne Pfad, Endung usw. !!!
das is schon richtig so! den namen an sich brauche ich nie!


21.

Deine Datei hat mindestens 110 Zeilen, da warst du aber extrem schnell!
Zitat:
komisch ist auch wenn ich die folgenden beiden zeilen vertausche kommt derselbe fehler!

if(!isset($_POST['word'])) {
$filename = "units/".$_POST['filename']."-".$_POST['language'].".unit";
Sie tun ja auch immer noch dasselbe, warum sollte das den Fehler beheben?

Zitat:
$filename wird also einfach nicht übertragen!!!
Wollen wir ja auch nicht! Allerhöchstens $_POST['filename'].

Zitat:
$file = fopen($_POST['filename'], "a");
auch hier brauche ich den kompletten Namen der Datei mit ohne Pfad, Endung usw. !!!
das is schon richtig so! den namen an sich brauche ich nie!
Du willst also ernsthaft eine Datei öffnen/erstellen ohne Angabe von Pfad und Dateiendung? Meinetwegen.

Poste den Code nochmal, verwende dabei den Button PHP...


22.

Code:                   In Zwischenablage kopieren (nur IE)
5">




23.

wir reden aneinander vorbei!

Zitat:
komisch ist auch wenn ich die folgenden beiden zeilen vertausche kommt derselbe fehler!

if(!isset($_POST['word'])) {
$filename = "units/".$_POST['filename']."-".$_POST['language'].".unit";

Sie tun ja auch immer noch dasselbe, warum sollte das den Fehler beheben?

->hier meinte ich dann tritt derselbe fehler ZUSÄTZLICH auch hier auf


Zitat:
$file = fopen($_POST['filename'], "a");
auch hier brauche ich den kompletten Namen der Datei mit ohne Pfad, Endung usw. !!!
das is schon richtig so! den namen an sich brauche ich nie!

-> natürlich MIT Pfad und Endung!!!
genau wie beim erstellen auch!!


24.

es geht ja nur datum dass ich nach dem senden des formulars weiter zugriff auf die datei habe!
schöner wäre also sogar noch nur den filedescriptor des offenen datei zu übergeben!


25.

also so:


<input type="hidden" name="file" value="<?php echo $file; ?>">
</td>
</tr>
</table>
</form>


<?php

if(isset($_POST['word'])) {

//$file = fopen($_POST['filename_cpl'], "a");

fwrite($_POST['file'], $word);
/*fwrite($file, "=");
fwrite($file, $german);
fwrite($file, "=");
fwrite($file, $text);
fwrite($file, "\n");*/

fclose($file);

}

?>


dann wird aber auch $_POST['file'] nicht übergeben


26.

... Ein Zitat macht man mit Quote ...

Du gibst mir widersprüchliche Aussagen. Den Code hast du richtig geändert, gibst aber immer noch Beispiele aus dem alten Code. Wie dem auch sei, jetzt solltest du Dir diese Zeile ansehen:

<input type="hidden" name="filename_cpl" value="<?php echo $filename_cpl; ?>">

Übermittle nicht den ganzen Dateinamen! Da sind ja Sonderzeichen wie ein Strich und Punkt drin. Sende nur die Bezeichnung und die Sprache. Dann kannst du den Dateinamen wieder zusammensetzen. Nimm dazu die Anweisung für $filename_cpl=blabla noch vor die Abfrage ob $_POST['word'] vorhanden ist , du brauchst sie ja in beiden Fällen...

Das mit dem Filedescriptor (Handle ID) klappt nicht, lass dir den Inhalt von $file mal ausgeben. Die wird sowieso ungültig wenn das Script beendet ist.


27.

das macht doch keinen unterschied ob ichs gleich komplett schicke oder hinterher zusammen baue!

hier noch mal der code: (ändert aber natürlich nix!)

[PHP]

<?php


if(!isset($_POST['word'])) {

$filename_cpl = "units/".$_POST['filename']."-".$_POST['language'].".unit";

if ( file_exists($filename_cpl) ) {
echo "<center> warning: unit <i>$filename</i> in this language already exists! </center>";
echo "<center> Please go back and change name or delete unit in the EDIT UNIT menu! </center>";
exit;
}


$file = fopen($filename_cpl, "w");

$datum = date("d.m.y H:i:s")."\n";
$language = $_POST['language']."\n";

if (!$file) {
echo "Error creating file <i>$filename_cpl</i>!";
exit;
}

fwrite($file, $datum);
fwrite($file, $language);
fwrite($file, "___\n");

fclose($file);

}

?>

<form action="new_2.php" method="POST">
<table align="center" border="0" cellpadding="5" cellspacing="0" bgcolor="#C2D7F0">
<tr>
<td align="right">Word:</td>
<td><input name="word" type="text" size="40" maxlength="40"></td>
</tr><tr>
<td align="right">German:</td>
<td><input name="german" type="text" size="40" maxlength="40"></td>
</tr><tr>
<td align="right" valign="top">comment:</td>
<td><textarea name="text" rows="2" cols="50"></textarea></td>
</tr><tr>
<td align="right"></td>
<td>
<input type="submit" value=" Save ">
<input type="reset" value=" Clear ">
<input type="button" name="end" value=" End Session " onClick="self.location.href='end.php'>
<input type="hidden" name="filename" value="<?php echo $_POST['filename']; ?>">
<input type="hidden" name="language" value="<?php echo $_POST['language']; ?>">
</td>
</tr>
</table>
</form>


<?php

if(isset($_POST['word'])) {

$filename_cpl = "units/".$_POST['filename']."-".$_POST['language'].".unit";

$file = fopen($_POST['filename_cpl'], "a");

fwrite($_POST[$file], $word);
fwrite($file, "=");
fwrite($file, $german);
fwrite($file, "=");
fwrite($file, $text);
fwrite($file, "\n");

fclose($file);

}

?>

[/PHP]


28.

gibts noch alternativen/ideen?
kann doch echt nich schwer sein, das problem sollte klar sein,
aber ich sehe bald echt den wald vor lauter bäumen nicht mehr!


DANKE!!!


29.

Code:                   In Zwischenablage kopieren (nur IE)
6">

Ich hoffe, das tut was es soll....


30.

hatte ich auch schon, gleicher fehler...so bräuchte ich ja auch die hidden buttons nicht!
kannst den code doch mal bei dir ausführen!


31.

Was denkst du was ich so lang getan habe? Der Code funktioniert bei mir.

Selbstverständlich brauchst du die hidden Felder, woher soll sonst das Script wissen welche Datei zu bearbeiten ist?

Hast du meine Code komplett kopiert? Bei dir hatte es nämlich noch einen ganz fiesen Fehler drin, den habe ich auch kurz suchen müssen... ich sag nur soviel: es fehlt ein doppeltes Anführungszeichen.


32.

meinste wir kriegen das noch hin?

nun kommt halt : Notice: Undefined index: filename in C:\Dokumente und Einstellungen\Matthias\Desktop\Vocabulary\new_2.php on line 51

das ist zeile: $filename_cpl = "units/".$_POST['filename']."-".$_POST['language'].".unit";

genau das meinte ich damit wenn man die beiden zeilen tauscht!


33.

Hehe, ja das ist dieser fiese Fehler.... versuch ihn gar nicht erst in der Zeile 51 zu suchen.... wir wissen ja dass diese funktioniert....

wir haben im prinzip jetzt gleich mal alle fehler ausgebügelt die dann noch gekommen wären, den ursprünglichen Fehler (eben dieses Anführungszeichen) habe ich auch erst am Schluss gefunden...

Noch nen Tipp: such in der Zeile in der du ausser HTML und PHP noch eine andere Sprache verwendest...


34.

puh...verrate es mir doch... ;)


35.

Hier, am Schluss des JS-Befehl...

Code:                   In Zwischenablage kopieren (nur IE)
7">




36.

sauber keine fehlermeldung mehr!!! ;)
aber wegen des "else" über das formular hinweg fehlt dieses natürlich beim 2. aufruf!
also dass mich ich wieder ändern!


37.

unglaublich! es lag alles komplett an dem sch... anführungszeichen!!!
das meinte ich mit schlechter fehlermeldung bei PHP!!


Hier gehts zum Orginal Eintrag "Variablenübergabe" im Forum
 
phpforum.de | Impressum | Handy Bundles