Zwei Formulare auf einer Seite - wie unabhängig voneinander machen?

zlep

Banned
Registriert
Feb. 2016
Beiträge
126
Hallo,

ich habe zwei Formulare auf einer Seite. Zum einen ein ganz normales Kontaktformular:

PHP:
<div id="messages_product_view"><?php echo $this->getMessagesBlock()->toHtml() ?></div>
				<div class="page-title">
					<h1><?php echo Mage::helper('contacts')->__('Contact Us') ?></h1>
				</div>
				<form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post">
					<div class="fieldset">
						<h2 class="legend"><?php echo Mage::helper('contacts')->__('Contact Information') ?></h2>
						<ul class="form-list">
							<li class="fields">
								<div class="field">
									<label for="name" class="required"><em>*</em><?php echo Mage::helper('contacts')->__('Name') ?></label>
									<div class="input-box">
										<input name="name" id="name" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Name')) ?>" value="<?php echo $this->escapeHtml($this->helper('contacts')->getUserName()) ?>" class="input-text required-entry" type="text" />
									</div>
								</div>
								<div class="field">
									<label for="email" class="required"><em>*</em><?php echo Mage::helper('contacts')->__('Email') ?></label>
									<div class="input-box">
										<input name="email" id="email" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Email')) ?>" value="<?php echo $this->escapeHtml($this->helper('contacts')->getUserEmail()) ?>" class="input-text required-entry validate-email" type="text" />
									</div>
								</div>
							</li>
							<li>
								<label for="telephone"><?php echo Mage::helper('contacts')->__('Telephone') ?></label>
								<div class="input-box">
									<input name="telephone" id="telephone" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Telephone')) ?>" value="" class="input-text" type="text" />
								</div>
							</li>
							<li class="wide">
								<label for="comment" class="required"><em>*</em><?php echo Mage::helper('contacts')->__('Comment') ?></label>
								<div class="input-box">
									<textarea name="comment" id="comment" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Comment')) ?>" class="required-entry input-text" cols="5" rows="3"></textarea>
								</div>
							</li>
						</ul>
					</div>
					<div class="buttons-set">
						<p class="required"><?php echo Mage::helper('contacts')->__('* Required Fields') ?></p>
						<input type="text" name="hideit" id="hideit" value="" style="display:none !important;" />
						<button type="submit" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Submit')) ?>" class="button"><span><span><?php echo Mage::helper('contacts')->__('Submit') ?></span></span></button>
					</div>
				</form>
				<script type="text/javascript">
				//<![CDATA[
					var contactForm = new VarienForm('contactForm', true);
				//]]>
				</script>

Zum anderen ein Login-Feld:

PHP:
 <div class="registered-users grid12-6">
            <div class="content">
                <h2><?php echo $this->__('Registered Customers') ?></h2>
                <p><?php echo $this->__('If you have an account with us, please log in.') ?></p>
                <ul class="form-list">
                    <li>
                        <label for="email" class="required"><em>*</em><?php echo $this->__('Email Address') ?></label>
                        <div class="input-box">
                            <input type="text" name="login[username]" value="<?php echo $this->escapeHtml($this->getUsername()) ?>" id="email" class="input-text required-entry validate-email" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Email Address')) ?>" />
                        </div>
                    </li>
                    <li>
                        <label for="pass" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
                        <div class="input-box">
                            <input type="password" name="login[password]" class="input-text required-entry validate-password" id="pass" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Password')) ?>" />
                        </div>
                    </li>
                    <?php echo $this->getChildHtml('form.additional.info'); ?>
                    <?php echo $this->getChildHtml('persistent.remember.me'); ?>
                </ul>
                <?php echo $this->getChildHtml('persistent.remember.me.tooltip'); ?>
                <p class="required"><?php echo $this->__('* Required Fields') ?></p>
            </div>
            <div class="buttons-set">
                <a href="<?php echo $this->getForgotPasswordUrl() ?>" class="f-left"><?php echo $this->__('Forgot Your Password?') ?></a>
                <button type="submit" class="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Login')) ?>" name="send" id="send2"><span><span><?php echo $this->__('Login') ?></span></span></button>
            </div>
        </div>
        <?php if (Mage::helper('checkout')->isContextCheckout()): ?>
            <input name="context" type="hidden" value="checkout" />
        <?php endif; ?>
    </form>
    <script type="text/javascript">
    //<![CDATA[
        var dataForm = new VarienForm('login-form', true);
    //]]>
    </script>

Die Seite hatte vorher nur das Login-Feld und sah so aus: http://ultimo.infortis-themes.com/demo/default/customer/account/login/

Mein Ziel ist es, den "Create an account"-Button los zu werden und stattdessen mein Kontaktformular einzufügen (User sollen sich um einen Zugang bewerben).

Problem: Die beiden Formulare schießen sich gegenseitig ab:
1.) Sende ich das Kontaktformular ab, bekomme ich die Meldung, dass ich die beiden Felder des Login-Formulars ausfüllen muss.
2.) Das Login-Formular funktioniert leider gar nicht mehr :freak:

Frage: Seht ihr eventuell auf den ersten Blick, warum die beiden Formulare auf einer Seite nicht funktionieren?

Vielen Dank bereits im Voraus.
 
Ich kann in deinem Code-Salat nicht so richtig durchblicken, aber am saubersten wäre die Verwendung von zwei getrennten Form-Tags. Es werden dann jeweils nur die input Felder der jeweilig abgesendeten Form übermittelt.
 
Hi, danke schon mal und sorry für den verunstalteten Code. Irgendwie bekomme ich den hier nicht sauber ins Forum.

Das mit den zwei verschiedenen Form-Tags ist ein guter Hinweis, allerdings dachte ich, dass ich das bereits durch <form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post"> habe?

Sorry für meine Unwissenheit, aber bei PHP bin ich etwas verloren :/
 
Hallo, du musst vor jedes Formular und nach jedem Formular ein solchen <form action="Blablabla" method="blablabla"> sowie nach jedem Formular ein </form> machen.
 
Ich denke du solltest erstmal einen einfachen Prototypen bauen, ich habe den Eindruck, dass du mit HTML/PHP noch anfängst.

Grundsätzlich ist es so (einfach skizziert):
1) Browser sendet Anfrage an Webserver
2) Optional: Webserver führt PHP aus, das HTML generiert
3) Webserver sendet HTML, Javascript und CSS an Browser
4) Browser stellt HTML/CSS/JS dar
5) Nutzer füllt HTML-Formular in Browser aus
6) Browser sendet Formular an Webserver
7) (ab jetzt wieder Schritt 1)

Wenn du in PHP zwei unterschiedliche Abläufe haben willst in Abhängigkeit davon, ob der User ein Kontakt oder Loginformular ausgefüllt hat, muss: a) der Browser bei der Formular-Übermittlung (Schritt 6) an an den Webserver angeben, welche Formular abgesendet wurde, und b) der Server bzw. PHP (Schritt 7) dann schauen, welches Formular abgeschickt wurde. Das kannst du über unterschiedliche Formular-Ziel-URL (unterschiedliche Ziel-PHP, eins für Login, eins für Kontakt) machen oder über ein Hidden-Feld (das von PHP dann geprüft wird und PHP entscheidet dann, Login oder Kontakt auszuführen).

Fehler 1: Wenn ich dein Code richtig verstehe, hast du zwar ein Formular-Ziel im Kontaktformular (<form action=...) aber keins im Loginformular (daher wird es nicht abgesendet). Oder aber du hast das Loginformular im Form-Tag des Kontaktformulars.

Fehler 2 dürfte sein, dass die Zielseite des Kontaktformulars (was steht da in form action?) die Validierung für das Loginformular durchführt. D. h. entweder hat du im Kontaktformular die falsche form action oder im PHP-Skript die falsche Weiche (Login oder Kontakt abgesendet?).
 
Hallo, danke. Ich war tatsächlich mit dem Kontaktformular im Form-Tag des Login-Formulars. Nach Korrektur dieses Fehlers bin ich nun einen Schritt weiter. Der Login funktioniert wieder.

Leider geht das Kontaktformular jedoch nicht. Wenn ich deiner Erläuterung folge, müsste es aber eigentlich passen, oder?

Die Form-Action ist <form action="<?php echo $this->getFormAction(); ?>" id="contactForm" method="post">. Nach meinem Verständnis ist die Ziel-Url richtig, denn ich habe das Kontaktformular vom Standard-Formular kopiert (es handelt sich um ein Magento-Shop, daher auch die komplizierte Code-Schreibweise).

Edit : Ich habe mal testweise nur das Kontaktformular auf die "Login-Seite" gemacht. Das funktioniert auch nicht. Also wird wahrscheinlich die URL falsch sein?

Danke noch mal.
 
Zurück
Oben