fatmike182
Agnotologe
|
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
AdministratorLegends never die
|
Den Submit-Button würde ich vermeiden. Mach dir lieber eine eigenen hidden-Feld, das die Aktion für das Formular übernimmt. <?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
|
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
|
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
AdministratorLegends never die
|
- 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: 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: <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
|
warum ist "isset($array['key'])" verboten? bisher hab ichs nämlich eigentlich immer so gemacht.
|
mat
AdministratorLegends never die
|
Weil es ein Warning verursacht.
|
kleinerChemiker
Here to stay
|
ah, ok. wieder was gelernt danke
|
fatmike182
Agnotologe
|
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
|
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
|
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
AdministratorLegends never die
|
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: <?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
|
in der api hab ich das mitn Doppelpunkt nicht gefunden. thx!
|
Rektal
Here to stay
|
|
kleinerChemiker
Here to stay
|
langsam nicht unbedingt, aber ich hatte öfters das problem daß sie nicht erreichbar waren
|