"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP frage

fatmike182 22.02.2008 - 12:17 1558 15
Posts

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
wollt grad ein Preloaddings mit einfachstem php/html machen, aber scheinbar kann ich beides keines von beidem ;)
Ich wills in 1 File machen

Wenn ich ein Form mach mit folgenden Inputs
- file
- submit
& alle davon (sowie das form selbst) einen Namen tragen, welche variablen kann ich dann sinnvoll mit isset (ist das noch die beste Variante? Hab mal gehört, man soll issets vermeiden) abfragen um festzustellen, ob abgesendet wurde oder nocht?
(also in die if (isset) abfrage kommt dann das php-konstrukt rein.; soll logischerweise überm Form stehen)

Ich hätt gesagt:
<? $submit = $_POST['submitbuttonname']; ?>
unter das Form schreiben & darüber kommt dann das
if (isset($submit)) {
mach den PHP-dings, uploads irgendwwohin usw
}

was passt daran nicht?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Den Submit-Button würde ich vermeiden. Mach dir lieber eine eigenen hidden-Feld, das die Aktion für das Formular übernimmt.

Code: PHP
<?php
  if (array_key_exists('szAction',$_POST))
  {
    echo "Form was submitted!";

    // Work with $_FILES here...
  }
?>

<form action="myfile.php" method="post" enctype="multipart/form-data">
  <input type="hidden" name="szAction" value="upload" />
  <input type="file" name="szFile" />

  <button type="submit">Upload!</button>
</form>

Edit: Btw, dein Post ist so hingefetzt, dass es mir normalerweise widerstrebt auf soetwas Antwort zu geben. Bitte bemüh' dich in Zukungt!

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
sry - wollte wegen den 2 Zeilen keinen php-Tag verwenden...
Die Methode mit dem hidden-Feld find ich interessant:
- warum hast du einen value vergeben?
- ist der Vorteil rein hinsichlich Sicherheit zu sehen?

Weiters:
- Warum button-tag, statt input mit type=submit?
- ist array-key-exist immer dem isset vorzuziehen? (ich nehm an, auch Sicherheitsgrund, da keine Variable gefaked werden kann und außerdem nicht unabsichtlich eine Falschaussage auslösen kann)

danke, Michi

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
wenn du ein formular mittels enter abschickst und nicht auf den button klickst, dann wird die variable auch nicht gesetzt. darum ist ein hidden feld besser.

ob array_key_exist oder isset sollt eigentlich recht egal sein.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
- Ist für Multi-Submits mit Javascript geeignet. Dort wird dann per onClick auf einen Submit-Button der Wert für szAction dynamisch gesetzt. Im Php-Code kann man dann ganz einfach mit switch($szAction) den Ablauf steuern. Hier noch ein kleines Hilfsmittel für Multi-Submit:
Code: PHP
function setFormAction(szAction,szForm,szVarString)
{
	if (typeof szVarString == "undefined")
		szVarString = "";

	var form = document.forms[szForm ? szForm : 0];
	if (!form)
	{
		alert("Error: Could not find form ["+szForm+"]");
		return false;
	}

	var nodeAction = form.elements['the_action'];
	if (!nodeAction)
	{
		alert("Error: Could not set action value [form: "+form.name+" ("+szForm+"), action: "+szAction+"], action formelement not found!");
		return false;
	}

	if (szVarString != '' && form.action.match('\\?') == null)
		form.action += '?' + szVarString;

	nodeAction.value = szAction;

	return true;
}
Verwendet man dann ganz einfach so:
Code: PHP
<button type="submit" onclick="setFormAction('my_action','formname','querystring=value')">Submit</button>

- array_key_exists() ist sauberer. In meinen Frameworks habe ich allerdings eine spezielle (statische) Utility-Funktion, die auch das Array per is_array() überprüft.

- <input type="submit"... ist hässlich, da der value automatisch für den Buttontext verwendet wird. <button> ermöglicht einfach mehr und ist besser zu generalisieren.

- Es sind 2 unterschiedliche Funktionen, die nur richtig verwendet werden müssen. isset($array['key']) ist jedenfalls verboten, wenn du das meinst ;)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
warum ist "isset($array['key'])" verboten? bisher hab ichs nämlich eigentlich immer so gemacht.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Weil es ein Warning verursacht.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
ah, ok.
wieder was gelernt :)
danke

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
Verstehe, verstehe...
werd mir das mit <button> angewöhnen. Macht Sinn; das mit hidden auch (k.A. wie ich das früher immer gelöst hab, meine Formulare waren _immer_ Enter-abschick-geeicht; hab leider keine alten Skripts mehr gedfunden)

Bzgl isset muss ich noch nachdenken, habs noch nicht überrissen (gehts da ums $array oder um was konkret?)
Hab grad geselen, dass man dadurch eben impliziert, dass das Array da ist, aber eben de rgewünschte inhalte (also der key in dem Fall) nicht.
Ich nehme an, dass das das Array, welches von POST generiert wird auch einschließt, nm?
Array_key_exist prüft ja auch nur nach, obs in dem beschriebenen Array das gibt.
Wenn ich aus einer Array-Variablen eine normale Variable mach, ändert das irgendwas an dem Fehler? (also $xxx = $_POST['xxx'])

Wurscht. Danke für die php-Stunde!

edit: schau, deshalb wollt ich kein code/php-tag verwenden ;)
(inoffizielles v5-req: ein wrap auch für solche Sachen, bzw wurde glaub ich eh schon was iframeartiges als Wunsch geäußert, um nicht den ganzen Content scrollen zu müssen)
Bearbeitet von fatmike182 am 22.02.2008, 15:20

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
eien blöde Frage hab ich noch:
in das "or die ();" welches auf den upload folgt, den ich mir copy umgesetzt hab, was kann ich da alles reinschreiben?

darf ich in der Klammer die php Tags zu & wieder auf machen um html zu verwenden? Weder das noch echo hat er akzeptiert.
tia

malu

Big d00d
Avatar
Registered: Aug 2005
Location: vienna/ooe
Posts: 206
du kannst dort einen string reinschreiben, der natürlich auch html code enthalten kann.
die php tags zu schließen und wieder zu öffnen könnte schon funktionieren (hab sowas schon mal wo gsehen) ist aber imho sehr unschöne programmierung.
schreib einfach einen string rein, der deinen code enthält.
ev musst du die doppelten anführungszeichen " mit einem vorstehenden backslash escapen. oder du setzt den string einfach in einfache anführungszeichen.

hth mlu

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Zitat von fatmike182
darf ich in der Klammer die php Tags zu & wieder auf machen um html zu verwenden? Weder das noch echo hat er akzeptiert.
tia
Ja, darfst du. Für größere Projekte solltest du den PHP- und HTML-Code allerdings strikt trennen. Stichwort: Template-System.

Wenn du Konstrukte a la "if" benutzen willst, dann müssen dann müssen diese mit Doppelpunkt versehen werden:
Code: PHP
<?php if (1 == 1): ?>
<div class="cl">html here</div>
<?php endif; ?>

Das, und auch deine Frage bezüglich die() - einfach nur eine, von vielen erklärten Funktionen in der Funktionsreferenz von PHP - sind eh schon wissen wo nachlesbar.

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
in der api hab ich das mitn Doppelpunkt nicht gefunden. thx!

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Steht alles da: http://php.net/manual/en/control-st...tive-syntax.php
HTH

ps: leute verlinken oft auf die .de mirror .. bin ich also nicht der einzige der das Gefühl dass die .at mirror einfach zu langsam sind? Oder Zufall? :)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
langsam nicht unbedingt, aber ich hatte öfters das problem daß sie nicht erreichbar waren :(
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz