Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 1021
Jeg begynner og bli veldig rusten på web stuff etter hvert, men sitter her nå og jobber med et lite kontaktskjema for en enkel side til et entreprenørfirma.
Kontaktskjema er laget på helt vanlig måte med php (og html/css), og har for tiden denne "avslutningen":

Kode

// Sending av mail
	if(mail ($mottaker, $subject, $innhold, $headers)) {
	echo 'Din melding er mottatt!'; 
} else {
	echo 'FEIL!';
}
Her åpnes altså en ny, helt blank side, med "Din melding er mottatt" på. Det er ingen pen løsning. Jeg har lyst på en liten delikat popup som forteller brukeren at meldingen er sendt (eller evt. ikke). Dette tenkte jeg jeg kunne bruke jQuery til. Er det en god idé?

Jeg har fra før av "Bassistance jQuery Validation Plugin" og Highslide (til et lite bildegalleri). Jeg tenkte kanskje det var mulig å bruke Highslide til dette, men finner ingenting når jeg googler. Har søkt rundt i to dager snart, og begynner å bli lei.

Noen som har noen tips? Jeg tenkte det enkleste ville kanskje være hvis jeg mekka to bilder - et for "Din melding er mottatt" og et for "Feil"?

Oppsummert: Jeg vil ha en popup av et bilde når folk trykker "Submit" på skjemaet. Så kan jo siden reloade til hovedsiden, alternativt - istedenfor popup - så kan selve kontaktskjema forsvinne, og beskjeden dukke opp istedenfor.

Tips?
Ser du har planer om å bruke bilder som en del av popup-meldingen?

Slenger likevel ut et forslag:
Hva med å bruke JQuery UI og Modal message for dette?
http://jqueryui.com/demos/dialog/#modal-message

Gjør et kall til JQ-funksjonen så fort PHP-funksjonen returnerer true/false.
Sist endret av s1gh; 13. april 2011 kl. 19:48.
Du vil bruke Javascript (jQuery) til å sende form-submit som en ajax-spørring, i stedet for at brukeren går til siden som det postes til?

Kode

$('form').submit(function(e) {
  e.preventDefault(); // Hindrer at nettleseren faktisk submitter formen
  evt = $(this);
  $.ajax({ //Sender formen som ajax-request
    type: "POST",
    url: evt.attr('action'), // Hvor skal data sendes?
    data: evt.serialize(), // Hva skal sendes?
    success: function(data) { //Hva skal skje når du får svar?
      //Det som skal skje når du får svar, data-variabelen inneholder hele siden som du poster til, f.eks.
      $('body').append(data); //Legger til data på slutten av body-taggen
    }
  });
});
Som du ser, kan da hele den siden som er "confirmation" puttes inni en div eller liknende som du kan plassere hvor du vil.
Sist endret av akselsm; 13. april 2011 kl. 19:57. Grunn: scope-feil
n5k
Rokkukyu
n5k's Avatar
Trådstarter
Dette ble jækla avansert for meg, merker jeg.
Jeg satt og knota litt med det nå nettopp, helt fra scratch via diverse manualsider. Problemet er at jeg roter det til, og klarer aldri konsentrere meg om alt på en gang, siden jeg ikke kan mye av verken PHP eller JS.

Slik ser det ut nå...

HTML:

HTML-kode

<!-- Skjult div (via display: none; i CSS) med feedback som "unhides" med JS -->
<div id="feedback"><h3>Takk!</h3><p>Din melding er mottatt. Du hører fra oss så snart som mulig.</div>

	<form action="mail.php" method="POST" id="contactForm">
	
			<p>Fullt navn: <span class="req">*</span><br />
			<input type="text" name="navn" value="" /></p>
			
			<p>E-post: <span class="req">*</span><br />
			<input type="text" name="epost" value="" /></p>
		
			<p>Telefon: <span class="req">*</span><br />
			<input type="text" name="telefon" value="" /></p>
			
			<p>Emne: <br />
			<select name="emne">
				<option value="Generel henvendelse">Generell henvendelse</option>
				<option value="Bestilling">Bestilling</option>
				<option value="Reklamasjon">Reklamasjon</option>
			</select></p>
		
			<p>Melding: <span class="req">*</span><br />
			<textarea name="melding"></textarea></p>
			
			<input type="submit" id="submit" name="submit" value="SEND SKJEMA" class="button" />
		
	</form>
PHP:

Kode

// Hvem skal mailen sendes til?
	$mottaker = "xxxx@xxxx.xx";

// Variablene fra skjemaet
	$navn = $_POST['navn'];
	$epost = $_POST['epost'];
	$telefon = $_POST['telefon'];
	$emne = $_POST['emne'];
	$melding = $_POST['melding'];

// Bevaring av linjeskift fra meldingsfeltet
	$ferdig = nl2br($_POST['melding']);
	
// Mailens emne
	$subject = "Melding fra WEB :: $emne";
	
// Generering av mail	
	$innhold = '<html><body>';
	$innhold .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
	$innhold .= "<tr style='background: #eee;'><td><strong>Fra:</strong> </td><td>" . $_POST['navn'] . "</td></tr>";
	$innhold .= "<tr><td><strong>Telefon:</strong> </td><td>" . $_POST['telefon'] . "</td></tr>";
	$innhold .= "<tr><td><strong>E-post:</strong> </td><td>" . $_POST['epost'] . "</td></tr>";
	$innhold .= "<tr><td><strong>Emne:</strong> </td><td>" . $_POST['emne'] . "</td></tr>";
	$innhold .= "<tr><td><strong>Melding:</strong> </td><td>" . $ferdig . "</td></tr>";
	$innhold .= "</table>";
	$innhold .= "</body></html>";

// Mailheaders
	$headers = "From:" . $navn . "\r\n";
	$headers .= "MIME-Version: 1.0" . "\r\n";
	$headers .= "Content-type: text/html; charset=utf-8" . "\r\n";

// Sending av mail
	if(mail ($mottaker, $subject, $innhold, $headers)) {
		echo 'TAKK!';
	}
		 else {
		echo 'FEIL!';
	}
?>
JS fra index.php:

Kode

<!-- jQuery -->
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
		
		<!-- Validering av kontaktskjema -->
		<script type="text/javascript" src="jquery.validate.js"></script>
			<script type="text/javascript">			
			// initiate validator on load
			$(function() {
				// validate contact form on keyup and submit
				$("#contactForm").validate({
					// set the rules for the field names
					rules: {
					navn: {
					required: true,
					minlength: 4
					},
					epost: {
					required: true,
					email: true
					},
					telefon: {
					required: true,
					number: true
					},
					melding: {
					required: true,
					minlength: 6
					},
					},
					// set messages to appear inline
					messages: {
					navn: "<br />&nbsp;Vennligst oppgi fullt navn",
					epost: "<br />&nbsp;Vennligst oppgi en gyldig e-postadresse",
					telefon: "<br />&nbsp;Vennligst oppgi telefonnummer",
					melding: "<br />&nbsp;Du har glemt å skrive meldingen!"
					}
				});
			});
			</script>

			<script type="text/javascript">			
			// vis feedback div			
			$(function() {
				$('#submit').click(function(){
					$('#feedback').slideDown();
					});
			});
			</script>
Som dere ser her, så er det et salig rot.

Jeg har ikke lyst til å kødde med mailscriptet. Ja, jeg vet det ikke er hackersafe og spamsafe, og alt det der, men det driter vi i. Som dere ser så sender scriptet mailen som html, noe som er ønskelig.
Valideringen er veldig enkel, og gjøres med en ferdig plugin jeg fant. Husker ikke navnet nå, men det står i førsteposten.

Problemet nå er følgende: hvis jeg bruker

HTML-kode

<input type="submit" id="submit" name="submit" value="SEND SKJEMA" class="button" />
på skjemaet, så får jeg mailen, og alt er vel bortsett fra at jeg får opp en blank side med "TAKK!" på som bekreftelse. Hvis jeg derimot bruker

HTML-kode

<input type="button" id="submit" name="submit" value="SEND SKJEMA" class="button" />
i skjemaet, så funker jquery-slidein-bekreftelses-greia helt nydelig, men da får jeg ingen mail.

Jeg ser, hvis jeg bruker type="submit", at slidein-greia funker, men istedenfor å få se hele, så popper denne blanke siden opp istedenfor siden jeg er på - altså ikke en ny, blank side, men siden reloades og blir blank. Get it? Jeg er dårlig på å forklare, men håper dere skjønner.

Så - hva må jeg gjøre for å kunne motta mail (med akkurat det designet jeg har satt opp) men samtidig ha slidein-effekten? (og evt. som tillegg - at skjemaet blir blankt igjen når man får bekreftelsen på at det er sendt)?

Beklager igjen for rotete og lang post, men klokka er tre, jeg er frustrert, og skal opp på jobb kl. 7. God natt!
Tester du i ie? Hvordan ser det ut i FF?

Flere ganger har jeg måttet legge inn

HTML-kode

<input type="hidden" id="submit" name="submit" value="SEND SKJEMA" />
i tillegg til type=button, en identisk kopi men av typen hidden, fordi ie ikke følger w3.org i alle versjoner av nettleseren sin.
Det som skjer, er at når du bruker type=submit, så submittes faktisk formen (du går til en ny side, og innholdet i formen blir sendt med. Det er slik forms fungerer.). Når du ikke bruker submit, så får du "bekreftelse", men siden du ikke går til en ny side, kan umulig data ha blitt sendt, med mindre du bruker AJAX. Se min post ovenfor for å se hvordan du kan "avskjære" submit-knappen, og sende inn formen "i bakgrunnen" med AJAX. Du vil da plassere #feedback.slideDown-greia inni success-funksjonen i stedet for på #submit.click.
n5k
Rokkukyu
n5k's Avatar
Trådstarter
Jeg gikk helt i koma når jeg satt og jobba med dette. Fikk ikke til en drit, og ingenting fungerte, hehe. Gikk og la meg kl. 3, og sto opp igjen kl. 6. Hadde fem minutter tilgjengelig før jeg måtte på jobb, og tok en rask titt. Da gikk det plutselig opp et lys for meg. Det hele endte med at jeg la inn "jQuery Form plugin", og smekket inn slideDown-greia (og clearForm) der, og VIPS - alt fungerte som smurt, hehe.
Takker for gode forslag og hjelp!