Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα έχω δημιουργήσει μια φόρμα επικοινωνίας στην οποία όταν ο χρήστης κάνει submit όλα τα δεδομένα της φόρμας αποστέλνονται στο e-mail μου και αν ο χρήστης δεν συμπληρώσει κάποιο απαραίτητο πεδίο του εμφανίζεται το αντίστοιχο μήνυμα, η φόρμα είναι η εξής :

 

>
<div id="text">
	      	<div id="formcontent">
	      	<h3 class="contform">Φόρμα Επικοινώνιας</h3>
	      	<div id="sympl">Συμπληρώστε την παρακάτω φόρμα επικοινωνίας  και θα <br /> επικοινωνήσουμε μαζί σας το συντομότερο δυνατόν.<br />
	        </div>
	      	<div id="form1">
	      	<form name="cform" id="cform" method="post" action="submitcform.php">
	      				<label for="name">Όνομα:<font color="#800000">*</font></label>
	      		        <input type="text" name="name" id="name" tabindex="1" />
	      		        <label for="surname">Επώνυμο: <font color="#800000">*</font></label>
	      		        <input type="text" name="surname" id="surname" tabindex="2" />    
	      		       <label for="email">E-mail: <font color="#800000">*</font></label>
	      		        <input type="text" name="email" id="email" tabindex="3" /> 
	      		        <label for="subject">Θέμα:<font color="#800000">*</font></label>
	      		        <input type="text" name="subject" id="subject" tabindex="4" />
	      		        <label for="message">Mήνυμα:<font color="#800000">*</font></label>
	      		        <textarea name="message" id="message" tabindex="5"></textarea>
	      		   	<button type="submit" name="submit" class="apostoli">Αποστολή</button>
	        </form>
	        <div id="req">
	         Τα πεδία με * είναι υποχρεωτικά.
	        </div>
	      	</div>
	      	</div>
	        </div>

 

το PHP script είναι το εξής:

 

>		
<?php
	if(isset($_POST['submit']))
       {
		if(empty($_POST['name']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το όνομά σας!</font>";
		}
		if(empty($_POST['surname']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το επώνυμό σας!</font>";
		}
		if(empty($_POST['email']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το e-mail σας!</font>";
		}
		if(empty($_POST['subject']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το θέμα του μηνύματος σας!</font>";
		}
		if(empty($_POST['message']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το μήνυμα σας!</font>";
		}
	}
	?>

	<?php
	
		$to="[email protected]";
		$subject=$_POST['subject'];
		$name_field=$_POST['name'];
		$email_field=$_POST['email'];
		$message=$_POST['message'];
		$headers="From: $email_field";
		$send=mail($to, $subject, $message, $headers);	
	

	if($send)
	{
		header("Location:index.php");
	}
	else 
	{
		print "We encountered an error sending your e-mail.Please try again.";
	}
	?>

 

όταν πατήσω submit στην φόρμα μου εμφανίζει το εξής μήνυμα:

 

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\Ptyxiaki Ergasia\submitcform.php on line 35

We encountered an error sending your e-mail.Please try again.

 

αυτό από ότι κατάλαβα το βγάζει όχι επειδή έχω κάνει κάποιο λάθος στον κώδικα αλλά επειδή δεν έχω εγκατεστημένο mail server στο pc σωστά?

 

και επίσης όταν κάνω submit και δεν έχω συμπληρώσει κάποιο απαραίτητο πεδίο το μήνυμα το βγάζει έτσι:

 

52921133.png

 

 

αυτό που θέλω εγώ είναι το μήνυμα να το εμφανίζει στην σελίδα της φόρμας κάτω από κάθε πεδίο το οποίο δεν έχει συμπληρωθεί, όπως εδώ:

 

53354264.png

Δημοσ.

Το warning σου το βγάζει γιατί προσπαθείς να στείλεις mail από localhost.

 

Για να κάνεις τον έλεγχο της φόρμας πριν την αποστολή, θα πρέπει να φτιάξεις μια function σε javascript και να την καλείς κάθε φορά πριν στείλεις τα δεδομένα της φόρμας.

 

Ψάξε στο google για form validation και πιστεύω θα βρεις χιλιάδες αποτελέσματα.

Δημοσ.

Το warning σου το βγάζει γιατί προσπαθείς να στείλεις mail από localhost.

 

Για να κάνεις τον έλεγχο της φόρμας πριν την αποστολή, θα πρέπει να φτιάξεις μια function σε javascript και να την καλείς κάθε φορά πριν στείλεις τα δεδομένα της φόρμας.

 

Ψάξε στο google για form validation και πιστεύω θα βρεις χιλιάδες αποτελέσματα.

σίγουρα δεν μπορεί να γίνει και με PHP το form validation? (θα προτιμούσα αν γινόταν με PHP γιατί την javascript μπορεί μερικά άτομα να την έχουν απενεργοποίηση από τον browser τους)

Δημοσ.

σίγουρα δεν μπορεί να γίνει και με PHP το form validation? (θα προτιμούσα αν γινόταν με PHP γιατί την javascript μπορεί μερικά άτομα να την έχουν απενεργοποίηση από τον browser τους)

Σου τροποποίησα τον κώδικα να κάνει το validation μεσα στην php (validation πρέπει να γίνεται ΠΑΝΤΑ μέσα ΚΑΙ στην php) και αν δεν υπάρχουν κενά πεδία, τότε κάνει προσπάθεια αποστολής του email.

 

Το μήνυμα λάθους είναι λόγω php-mailserver.

 

Κάτι ακόμα σημαντικό. ΜΕΣΑ στην php πρέπει πάντα να κάνεις escape τα πεδία που συμπληρώνουν οι χρήστες. Είναι θέμα ασφάλειας. google it για περισσότερες λεπτομέρειες.

 

>
<?php
	$dummyflag=22;
	if(isset($_POST['submit']))
       {
		if(empty($_POST['name']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το όνομά σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['surname']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το επώνυμό σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['email']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το e-mail σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['subject']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το θέμα του μηνύματος σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['message']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το μήνυμα σας!</font>";
			$dummyflag=44;
		}
	}
	?>

	<?php
	//τωρα ελέγχουμε αν συμπλήρωσε ολα τα πεδία και αν ΝΑΙ προσπαθούμε να στείλουμε email, 
	//ενω αν δεν τα συμπλήρωσε του δείχνουμε ενα μύνημα λάθους
	if ($dummyflag == 22)
	{
					$to="[email protected]";
					$subject=$_POST['subject'];
					$name_field=$_POST['name'];
					$email_field=$_POST['email'];
					$message=$_POST['message'];
					$headers="From: $email_field";
					$send=mail($to, $subject, $message, $headers);	
				
			
				if($send)
				{
					header("Location:index.php");
				}
				else 
				{
					print "We encountered an error sending your e-mail.Please try again.";
				}
	} else {
		echo "<font color=#ff0000>Παρακαλούμε πατήστε back και διορθώστε τις παραπάνω παραλείψεις!</font>";
	}
	?>

Δημοσ.

>
<?php
	$dummyflag=22;
	if(isset($_POST['submit']))
       {
		if(empty($_POST['name']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το όνομά σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['surname']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το επώνυμό σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['email']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το e-mail σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['subject']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το θέμα του μηνύματος σας!</font>";
			$dummyflag=44;
		}
		if(empty($_POST['message']))
		{
			echo "<font color=#ff0000>Παρακαλώ εισάγετε το μήνυμα σας!</font>";
			$dummyflag=44;
		}
	}
	?>

	<?php
	//τωρα ελέγχουμε αν συμπλήρωσε ολα τα πεδία και αν ΝΑΙ προσπαθούμε να στείλουμε email, 
	//ενω αν δεν τα συμπλήρωσε του δείχνουμε ενα μύνημα λάθους
	if ($dummyflag == 22)
	{
					$to="[email protected]";
					$subject=$_POST['subject'];
					$name_field=$_POST['name'];
					$email_field=$_POST['email'];
					$message=$_POST['message'];
					$headers="From: $email_field";
					$send=mail($to, $subject, $message, $headers);	
				
			
				if($send)
				{
					header("Location:index.php");
				}
				else 
				{
					print "We encountered an error sending your e-mail.Please try again.";
				}
	} else {
		echo "<font color=#ff0000>Παρακαλούμε πατήστε back και διορθώστε τις παραπάνω παραλείψεις!</font>";
	}
	?>

Αυτός ο κώδικας να υποθέσω μπαίνει στο submitcform.php. Αυτό που λέει όμως ο TS είναι ότι ο έλεγχος θέλει να γίνεται πριν την αποστολή των δεδομένων και τα μηνύματα να βγαίνουν κάτω από τα αντίσοιχα πεδία της φόρμας. Αυτό δεν μπορεί να γίνει με php, γιατί η php είναι server side γλώσσα και άρα τα δεδομένα θα πρέπει να σταλούν στο server ώστε να γίνει ο έλγχος. Αυτό που ζητάει ο TS είναι τα πεδία να ελέγχονται πριν την αποστολή. Αυτό μπορεί να γίνει μόνο με μία client side γλώσσα, ώστε ο έλεγχος να γίνεται στην ουσία από τον browser και μόνο εάν είναι όλα τα πεδία συμπληρωμένα να στέλενει data στον server. Άρα ο έλεγχος μπορεί να γίνει ΜΟΝΟ με javascript.

Δημοσ.

Αυτός ο κώδικας να υποθέσω μπαίνει στο submitcform.php. Αυτό που λέει όμως ο TS είναι ότι ο έλεγχος θέλει να γίνεται πριν την αποστολή των δεδομένων και τα μηνύματα να βγαίνουν κάτω από τα αντίσοιχα πεδία της φόρμας. Αυτό δεν μπορεί να γίνει με php, γιατί η php είναι server side γλώσσα και άρα τα δεδομένα θα πρέπει να σταλούν στο server ώστε να γίνει ο έλγχος. Αυτό που ζητάει ο TS είναι τα πεδία να ελέγχονται πριν την αποστολή. Αυτό μπορεί να γίνει μόνο με μία client side γλώσσα, ώστε ο έλεγχος να γίνεται στην ουσία από τον browser και μόνο εάν είναι όλα τα πεδία συμπληρωμένα να στέλενει data στον server. Άρα ο έλεγχος μπορεί να γίνει ΜΟΝΟ με javascript.

Σωστή η παρατήρηση αλλά θα επιμείνω στη χρήση της php για σωστό και ολοκληρωτικό validation (γενικά μιλώ γιατί εδω απλώς ελέγχουμε για κενά πεδία) διότι είναι πολύ δύσκολο να την ξεγελάσεις ή να την παρακάμψεις.

 

Ο εύκολος τρόπος είναι να χρησιμοποιηθεί javascript στην σελίδα της φορμας και στην σελίδα submitcform.php να υπάρχει νεος έλεγχος (που έτσι κι αλλιώς πρέπει να υπάρχει). Η js ειναι ιδανική για θέματα «εμφάνισης» αλλά άκρως επικίνδυνη για θέματα validation

 

Ο δύσκολος τρόπος που ικανοποιεί το ζητούμενο του χρήστη ειναι να φτιαχτεί μια σελίδα php που να εμπεριέχει τις σελιδες forma.php και submitcform.php και η forma.php απλώς θα στέλνει τα δεδομένα στον ίδιο τον εαυτό της. Αν τα πεδία είναι κενα θα «ζωγραφίζει» τη φόρμα με τα μηνύματα λάθους, ενώ αν ολα ειναι γεμάτα θα στέλνει το email. Είναι αρκετά κοινό για advanced περιπτώσεις αλλά δύσκολο για βασικό επίπεδο.

 

Συμπέρασμα προς ts. Διάβασε για javascript forms validation και εφάρμοσε το στην σελίδα με την φόρμα. Μετα χρησιμοποίησε το διορθωμένο κώδικα που σου έδωσα για να κάνεις επιπλεον έλεγχο στην php.

Δημοσ.

δεν είπα πουθενά ότι τα πεδία θέλω να ελέγχονται πριν την αποστολή, το μόνο που θέλω είναι τα μηνύματα να εμφανίζονται κάτω από τα πεδία της φόρμας και όχι σε κάποια καινούργια σελίδα.

 

η λύση του isay ναι μεν είναι σωστή αλλά δεν κάνει αυτό που θέλω καθώς και πάλι το μήνυμα το εμφανίζει σε καινούργια σελίδα

Δημοσ.

δεν είπα πουθενά ότι τα πεδία θέλω να ελέγχονται πριν την αποστολή, το μόνο που θέλω είναι τα μηνύματα να εμφανίζονται κάτω από τα πεδία της φόρμας και όχι σε κάποια καινούργια σελίδα.

 

η λύση του isay ναι μεν είναι σωστή αλλά δεν κάνει αυτό που θέλω καθώς και πάλι το μήνυμα το εμφανίζει σε καινούργια σελίδα

Γράψαμε την ίδια ώρα. Δες την απαντηση μου ακριβώς πάνω απο τη δική σου

Δημοσ.

Και όμως αυτό που θέλω να κάνω (να εμφανίζει το μήνυμα κάτω από κάθε πεδίο της φόρμας το οποίο δεν έχει συμπληρωθεί) δεν χρειάζεται καν Javascript,

 

http://www.youtube.com/watch?v=tRHma2JTiL4

 

το συγκεκριμένο παράδειγμα όμως είναι για registration form και δεν ξέρω ακριβώς πως να γράψω τον κώδικα ώστε να δουλεύει στην φόρμα μου

Δημοσ.

Και όμως αυτό που θέλω να κάνω (να εμφανίζει το μήνυμα κάτω από κάθε πεδίο της φόρμας το οποίο δεν έχει συμπληρωθεί) δεν χρειάζεται καν Javascript,

 

Εάν δεν σε ενδιαφέρει ο έλεγχος των στοιχείων να γίνεται μετά την αποστολή, εννοείται ότι δεν χρειάζεται javascript. Η javascript είναι γλώσσα που εκτελείται στον browser. Αν καταφέρεις να το καταλάβεις αυτό και να καταλάβεις ποια είναι η διαφορά της από μία server side γλώσσα προγραμματισμού όπως η php, τότε θα μπορέσεις να βρεις και εσύ τι ακριβώς χρειάζεσαι να κάνεις.

Στο παράδειγμα που δείχνει στο video (δεν το είδα όλο) ο έλεγχος γίνεται από την php. Σε αυτήν την περίπτωση υπάρχουν 1002 τρόποι να κάνεις έλεγχο για το validation των δεδομένων. Δεν υπάρχει πεπατημένη. Κοιτάς τις δυνατότητές σου και τις γνώσεις σου και πράττεις ανάλογα.

Δημοσ.

αυτό που θέλω ακριβώς να κάνω είναι αυτό που δείχνει στο video δηλαδή αν δεν συμπληρώσω κάποιο απαραίτητο πεδίο να μου βγάλει το μήνυμα ότι δεν το έχω συμπληρώσει σωστά Π.Χ το όνομα (Παρακαλώ εισάγετε το όνομά σας!) κάτω από το πεδίο της φόρμας,επειδή είμαι νέος στην PHP δεν κατάφερα να το κάνω αυτό (το μόνο που έχω καταφέρει είναι αυτό που λέω στο αρχικό post το μήνυμα το εμφανίζει σε νέα σελίδα) προσπάθησα να τροποποιήσω τον κώδικα που είχε στο video αλλά δεν τα κατάφερα καθώς μόνο error μου έβγαζε.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...