"We are back" « oc.at

PHP: Problem mit Suchfeld + Button form

daisho 26.02.2011 - 22:16 1499 6
Posts

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19788
Ist mir fast peinlich das zu fragen, aber ich habe null Ahnung von PHP und pfusche gerade in einem phpBB Forum rum:

Code:
			<div id="search-box">
				<fieldset>
				<form action="{U_SEARCH}" method="post" id="search">
					<input name="keywords" id="keywords" type="text" maxlength="128" title="{L_SEARCH_KEYWORDS}" class="inputbox search" value="<!-- IF SEARCH_WORDS-->{SEARCH_WORDS}<!-- ELSE -->{L_SEARCH_MINI}<!-- ENDIF -->" onclick="if(this.value=='{LA_SEARCH_MINI}')this.value='';" onblur="if(this.value=='')this.value='{LA_SEARCH_MINI}';" />
					<input class="button2" value="{L_SEARCH}" type="submit" />
				</form>
                <form action="{U_SEARCH}" method="post" id="advsearch">
                    <input class="button2" value="{L_SEARCH_ADV}" type="submit" title="{L_SEARCH_ADV_EXPLAIN}" /> {S_SEARCH_HIDDEN_FIELDS}
                </form>
                </fieldset>
			</div>

Was ich will, ist einen "Advanced Search" Button nach dem Suchfeld und Search-Button der einfach nur auf die URL /search.php verweist (eben die erweiterte Suche im phpBB Forum).
Jetzt funktioniert der Button ...
Code:
<form action="{U_SEARCH}" method="post" id="advsearch">
                    <input class="button2" value="{L_SEARCH_ADV}" type="submit" title="{L_SEARCH_ADV_EXPLAIN}" /> {S_SEARCH_HIDDEN_FIELDS}
                </form>
... eigentlich genau so wie ich will, allerdings erscheint er immer unter dem Suchfeld und Button wie nach einem <br> Break, stelle ich ihn oben in die andere form action hinein, führt er immer die Suche wie der erste Button aus (irgendwie klar).
Eine Form Action in der Form Action funktioniert irgendwie nicht.

Muss mich vermutlich schon im Vorhinein entschuldigen weils vermutlich eine Babyaufgabe ist ... aber ich versteh es gerade nicht warum der zweite Button immer erst nach einem Zeilenumbruch zu sehen ist (der für mich irgendwie nicht vorhanden ist im Code?)

/Edit: Das Stylesheet für das DIV:
Code:
#search-box {
	color: #FFFFFF;
	position: relative;
	margin-top: 2px;
	margin-right: 0px;
	display: block;
	float: right;
	text-align: right;
	white-space: nowrap; /* For Opera */
}


/Edit: Eh klar ... nachdem ich stundenlang probiere entdecke ich den "style"-tag :o

Habs mal mit ...
Code:
style="display: inline;"
... gelöst. Hoffe das ist eine halbwegs elegante Vorgehensweise.
Bearbeitet von daisho am 26.02.2011, 22:34

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
warum überhaupt so kompliziert? Du willst den Button doch nur als Link, oder? Dann kannst ihn ja auch so einbinden <a href><img /></a>

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
Sollen Informationen aus dem Form mitgenommen werden oder nicht? Wenn nicht, dann mach einfach einen Link, so wie der kleine Chemiker es vorgeschlagen hat. Ansonsten brauchst du eine Javascript-Funktion, um multiple Form-Submits korrekt in jedem Browser auslösen zu können.

Das ganze funktioniert so, dass du eine versteckte Input-Variable (zB szAction) im Form hast, die du bei einem Click auf den Button setzt. Diese verarbeitest du dann im PHP-Skript. Hier ein bisschen Code:

HTML-Formular:
Code:
<form method="POST" name="formBlubb">
  <input type="hidden" name="szAction" value="defaultsubmit" />

  <button onclick="return submitFormAction('formBlubb','action1')">Action 1</button>
  <button onclick="return submitFormAction('formBlubb','action2')">Action 2</button>
</form>

Javascript-Funktion:
Code:
function submitFormAction(szForm,szAction)
{
  var oForm = document.forms[szForm];
  if (!oForm)
  {
    alert('Form not found!');
    return true; // so default event of button is processed
  }

  // *) Set new action
  oForm.elements.szAction = szAction;

  // *) Manually submit form
  oForm.submit();

  return false; // avoid default event of button
}

Im PHP-Form kannst du dann ganz simpel die entsprechenden POST-Variablen auswerten:
Code: PHP
<?php

switch ($_POST['szAction'])
{
  case 'action1':
    break;
  case 'action2':
    break;
}

?>

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
Reicht es nicht sogar, wenn die Buttons unterschiedlich beschriftet sind, weil die Beschriftung als value vom Button mitgesendet wird?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
Das geht nur mit <input type="submit" ... und ich bin persönlich kein Fan davon, weil der value sowohl die Submit-Button-Aufschrift, als auch den übergebenen Wert darstellt. Abgesehen davon, dass es hässlich ist, ist damit zum Beispiel keine geeignete Trennung zwischen Logik und HTML-Code bei Multi-Language-Support möglich.

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19788
Ja, der zweite Button ist ja im Prinzip einfach nur ein Link der auf die (erweiterte) Suchseite des Forums zeigt und muss sonst nichts anderes tun. Habs halt im Moment so gelöst da der Code schon vorhanden war und ein "richtiger" Button auch einen Mouse-Over Effekt hat im Gegensatz zu einem Bild (wobei ich gar nicht weiß ob ein Button bei jedem gleich aussieht!? Sonst würden ja beide ev. unterschiedlich aussehen)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz