Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 24 Αύγ 2011 21:13

Καλησπέρα σε όλους,
Είμαι αρχάριος σε PHP και ξεκίνησα να φτιάχνω το πρώτο μου hand-made website. Στη σελίδα register.php έχω φτιάξει μία φόρμα και ενώ με το πάτημα της υποβολής τυπώνεται το αναμενόμενο μήνυμα επιβεβαίωσης, το email ενεργοποίησης δεν έρχεται ποτέ.
Παραθέτω τον κώδικα:

Κώδικας: Επιλογή όλων

<?php # The main page for the website
require_once&#40;'includes/config.inc.php'&#41;; //include the configuration file
$page_title = 'example.gr | Εγγραφή χρήστη';
include&#40;'includes/header.php'&#41;; //include the header
?>


<div id="register_content" class="main_content">
<?php
if &#40;isset&#40;$_POST&#91;'submitted'&#93;&#41;&#41; &#123; // Handle the form.

	include &#40;MYSQL&#41;;
	
	// Trim all the incoming data&#58;
	$trimmed = array_map&#40;'trim', $_POST&#41;;
	
	// Assume invalid values&#58;
	$fn = $ln = $e = $usern = $p = FALSE;
	
	// Check for a first name&#58;
	if &#40;preg_match &#40;'/^&#91;A-Z \'.-&#93;&#123;2,20&#125;$/i', $trimmed&#91;'first_name'&#93;&#41;&#41; &#123;
		$fn = mysqli_real_escape_string &#40;$dbc, $trimmed&#91;'first_name'&#93;&#41;;
	&#125; else &#123;
		echo '<p class="error">Εισάγετε το μικρό σας όνομα.</p>';
	&#125;
	
	// Check for a last name&#58;
	if &#40;preg_match &#40;'/^&#91;A-Z \'.-&#93;&#123;2,40&#125;$/i', $trimmed&#91;'last_name'&#93;&#41;&#41; &#123;
		$ln = mysqli_real_escape_string &#40;$dbc, $trimmed&#91;'last_name'&#93;&#41;;
	&#125; else &#123;
		echo '<p class="error">Εισάγετε το επώνυμό σας.</p>';
	&#125;
	
	// Check for a username&#58;
	if &#40;preg_match &#40;'/^\w&#123;4,20&#125;$/', $trimmed&#91;'username'&#93;&#41;&#41; &#123;
		$usern = mysqli_real_escape_string &#40;$dbc, $trimmed&#91;'username'&#93;&#41;;
	&#125; else &#123;
		echo '<p class="error">Εισάγετε το επιθυμητό όνομα χρήστη.</p>';
	&#125;
	
	// Check for an email address&#58;
	if &#40;preg_match &#40;'/^&#91;\w.-&#93;+@&#91;\w.-&#93;+\.&#91;A-Za-z&#93;&#123;2,6&#125;$/', $trimmed&#91;'email'&#93;&#41;&#41; &#123;
		$e = mysqli_real_escape_string &#40;$dbc, $trimmed&#91;'email'&#93;&#41;;
	&#125; else &#123;
		echo '<p class="error">Εισάγετε μια έγκυρη διεύθυνση email.</p>';
	&#125;

	// Check for a password and match against the confirmed password&#58;
	if &#40;preg_match &#40;'/^\w&#123;4,20&#125;$/', $trimmed&#91;'password1'&#93;&#41; &#41; &#123;
		if &#40;$trimmed&#91;'password1'&#93; == $trimmed&#91;'password2'&#93;&#41; &#123;
			$p = mysqli_real_escape_string &#40;$dbc, $trimmed&#91;'password1'&#93;&#41;;
		&#125; else &#123;
			echo '<p class="error">Ο κωδικός επιβεβαίωσης δεν ταιριάζει με τον αρχικό κωδικό</p>';
		&#125;
	&#125; else &#123;
		echo '<p class="error">Εισάγετε έναν έγκυρο κωδικό!</p>';
	&#125;
	
	if &#40;$fn && $ln && $e && $p&#41; &#123; // If everything's OK...

		// Make sure the email address is available&#58;
		$q = "SELECT user_id FROM users WHERE email='$e'";
		$r = mysqli_query &#40;$dbc, $q&#41; or trigger_error&#40;"Query&#58; $q\n<br />MySQL Error&#58; " . mysqli_error&#40;$dbc&#41;&#41;;
		
		if &#40;mysqli_num_rows&#40;$r&#41; == 0&#41; &#123; // Available.
		
			// Create the activation code&#58;
			$a = md5&#40;uniqid&#40;rand&#40;&#41;, true&#41;&#41;;
		
			// Add the user to the database&#58;
			$q = "INSERT INTO users &#40;email, pass, first_name, last_name, username, active, registration_date&#41; VALUES &#40;'$e', SHA1&#40;'$p'&#41;, '$fn', '$ln','$usern', '$a', NOW&#40;&#41; &#41;";
			$r = mysqli_query &#40;$dbc, $q&#41; or trigger_error&#40;"Query&#58; $q\n<br />MySQL Error&#58; " . mysqli_error&#40;$dbc&#41;&#41;;

			if &#40;mysqli_affected_rows&#40;$dbc&#41; == 1&#41; &#123; // If it ran OK.
			
				// Send the email&#58;
				$body = "Ευχαριστούμε για την εγγραφή σας στο <whatever site>. Για να ενεργοποιήσετε το λογαριασμό σας, κάντε click στον παρακάτω σύνδεσμο&#58;\n\n";
				$body .= BASE_URL . 'activate.php?x=' . urlencode&#40;$e&#41; . "&y=$a";
				mail&#40;$trimmed&#91;'email'&#93;, 'Επιβεβαίωση εγγραφής', $body, 'From&#58; info@example.com'&#41;;
				
				// Finish the page&#58;
				echo '<h3>Ευχαριστούμε για την εγγραφή! Ένα email επιβεβαίωσης έχει αποσταλλεί στη διεύθυνση email που δηλώσατε. Κάντε click στον σύνδεσμο που σας στείλαμε για να ενεργοποιήσετε το λογαριασμό σας.</h3>';

				
			&#125; else &#123; // If it did not run OK.
				echo '<p class="error">Η εγγραφή δεν έγινε λόγω κάποιου σφάλματος. Μπορείτε να επικοινωνήσετε με το τεχνικό τμήμα της Ιστοσελίδας για να λύσουμε τυχόντα σχετικά προβλήματα.</p>';
			&#125;
			
		&#125; else &#123; // The email address is not available.
			echo '<p class="error">Το email που δηλώνετε έχει ήδη καταχωρηθεί σε κάποια εγγραφή χρήστη. Αν έχετε ξεχάσει τον κωδικό σας, χρησιμοποιήστε τον σύνδεσμο στα αριστερά της σελίδας για να σας αποσταλλεί στο email σας.</p>';
		&#125;
		
	&#125; else &#123; // If one of the data tests failed.
		echo '<p class="error">Παρακαλούμε εισάγετε ξανά τους κωδικούς σας και δοκιμάστε ξανά.</p>';
	&#125;


&#125; // End of the main Submit conditional.
?>

<div id="registration_form" class="main_content_block">	
<h2>Εγγραφή χρήστη</h2>
<form action="register.php" method="post">
	<fieldset>
	
	<p><b>Όνομα&#58;</b> <input type="text" name="first_name" size="20" maxlength="20" value="<?php if &#40;isset&#40;$trimmed&#91;'first_name'&#93;&#41;&#41; echo $trimmed&#91;'first_name'&#93;; ?>" /></p>
	
	<p><b>Επώνυμο&#58;</b> <input type="text" name="last_name" size="20" maxlength="20" value="<?php if &#40;isset&#40;$trimmed&#91;'last_name'&#93;&#41;&#41; echo $trimmed&#91;'last_name'&#93;; ?>" /></p>
	
	<p><b>Όνομα Χρήστη &#40;username&#41;&#58;</b> <input type="text" name="username" size="20" maxlength="30" value="<?php if &#40;isset&#40;$trimmed&#91;'username'&#93;&#41;&#41; echo $trimmed&#91;'username'&#93;; ?>" /> <small>Χρησιμοποιήστε μόνο λατινικούς χαρακτήρες, αριθμούς και κάτω παύλα. Το μήκος του username μπορεί να είναι από 8 έως και 20 χαρακτήρες.</small></p>
	
	<p><b>Διεύθυνση email&#58;</b> <input type="text" name="email" size="30" maxlength="80" value="<?php if &#40;isset&#40;$trimmed&#91;'email'&#93;&#41;&#41; echo $trimmed&#91;'email'&#93;; ?>" /> </p>
		
	<p><b>Κωδικός&#58;</b> <input type="password" name="password1" size="20" maxlength="20" /> <small>Χρησιμοποιήστε μόνο λατινικούς χαρακτήρες, αριθμούς και κάτω παύλα. Το μήκος του κωδικού πρέπει να είναι από 4 έως και 20 χαρακτήρες.</small></p>
	
	<p><b>Επιβεβαίωση κωδικού&#58;</b> <input type="password" name="password2" size="20" maxlength="20" /></p>
	</fieldset>
	
	<div align="center"><input type="submit" name="submit" value="Register" /></div>
	<input type="hidden" name="submitted" value="TRUE" />
</form>
</div>
</div>

<!-- αριστερή μπάρα ξεκινά εδώ -->
<div id="right_sidebar">
	<p>αριστερή sidebar</p>
	<a href="index.php" title="Επιστροφή στην αρχική σελίδα">Επιστροφή στην αρχική σελίδα</a><br/>
	<?php
	if &#40;isset&#40;$_SESSION&#91;'user_id'&#93;&#41;&#41; &#123;
		echo '<a href="logout.php" title="Αποσύνδεση χρήστη">Αποσύνδεση χρήστη</a><br/>
			  <a href="change_password.php" title="Αλλαγή κωδικού χρήστη">Αλλαγή κωδικού χρήστη</a><br/>';
					if &#40;$_SESSION&#91;'user_level'&#93; == 0&#41; &#123;
						echo 'χρήστης 0 δίχως δικαιώματα διαχειριστή <br/>';
							  
					&#125;
					elseif &#40;$_SESSION&#91;'user_level'&#93; == 1&#41; &#123;
						echo 'χρήστης 1, με δικαιώματα διαχειριστή<br/>;
						<a href="view_users.php" title="επισκόπηση χρηστών">Επισκόπηση χρηστών</a><br/>
						<a href="#">σελίδα admin 1</a><br/>
					    <a href="#">σελίδα admin 2</a><br/>';
					&#125;
	&#125;
	else &#123; 
		echo '<a href="register.php" title="Δημιουργία λογαριασμού">Δημιουργία λογαριασμού</a><br/>
			  <a href="login.php" title="Είσοδος χρήστη">Είδοδος χρήστη</a><br/>
			  <a href="forgot_password.php" title="Επανάκτηση κωδικού">Επανάκτηση κωδικού</a><br/>';
	&#125;
	?>
	<a href="#">σελίδα 1</a><br/>
	<a href="#">σελίδα 2</a><br/>
</div>
<!-- αριστερή μπάρα τελειώνε εδώ -->


<!-- το περιεχόμενο του main div τελειώνει εδώ -->


<?php
include&#40;'includes/footer.php'&#41;; //include the footer
?>
Τι κάνω λάθος?
| I am now |

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από fafos » 24 Αύγ 2011 21:25

1. to dokimazeis se kanoniko server h topika sto pc sou?

2. dokimases diaforetika emails?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

sagan_gr
Δημοσιεύσεις: 4
Εγγραφή: 07 Οκτ 2009 13:45

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από sagan_gr » 24 Αύγ 2011 21:28

1. τοπικά
2. διαφορετικά emails? Με ένα δοκιμαστικό gmail δοκιμάζω το script.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από fafos » 24 Αύγ 2011 21:32

sagan_gr έγραψε:1. τοπικά
2. διαφορετικά emails? Με ένα δοκιμαστικό gmail δοκιμάζω το script.
to 1 arkei.. den stelnei emails topika... psakse edo gia kapoies lyseis..
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από korgr » 24 Αύγ 2011 22:07

Στέλνει και τοπικά αρκεί να ορίσεις στο php.ini SMPT server (συνήθως του provider σου πχ για conn-x είναι mailgate.otenet.gr).

Για παράδειγμα σε τοπικό server που έχω εγκατεστημένο σε Windows το php.ini μου έχει μεταξύ άλλων και το:
[mail function]
; For Win32 only.
SMTP = mailgate.otenet.gr
smtp_port = 25
sendmail_from = korgr123@otenet.gr

web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 25 Αύγ 2011 12:48

Ποιος είναι ο πιο ορθός τρόπος χρήσης του php.ini? Κάνω αντίγραφο απ'το εγκατεστημένο php.ini στο root του website μου και κατόπιν αλλάζω κατά βούληση ότι θέλω για το website που αναπτύσσω? Μπορώ δλδ να έχω διαφορετικά php.ini για κάθε site?
Αυτό τι συνέπειες μπορεί να έχει σχετικά με το αντίστοιχο configuration της php του online hosting που χρησιμοποιώ? Εννοώ, υπάρχει πιθανότητα να παραβλέπονται κάποιες απαραίτητες ρυθμίσεις που ίσως δεν υπάρχουν στο "custom" php configuration αρχείο μου?

@korgr Στο php.ini άλλαξα τη ρύθμιση από localhost που είχε σε smtp.hol.gr. Στο sendmail_from έβαλα την επιθυμητή διεύθυνση αποστολέα. Επανεκίνησα τον local server, υποβάλλω τη φόρμα ξανά μα το email δεν στέλνεται... Τι άλλο θα μπορούσε να φταίει..?
| I am now |

web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 31 Αύγ 2011 16:04

anybody? 8)
| I am now |

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από jpk » 02 Σεπ 2011 03:41

Θέλεις απόψεις για το ποιος είναι ο πιο ορθός τρόπος χρήσης του php.ini με τον κώδικα που προέβαλες; ??? Αυτό είναι το πρόβλημά σου το php.ini ?

web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 02 Σεπ 2011 10:54

Ακόμη και έτσι να είναι, εσύ γιατί το κάνεις δικό σου πρόβλημα αντί να μου απαντήσεις στο ερώτημα σχετικά με τη φόρμα?? Αφιέρωσες χρόνο για να ρωτήσεις κάτι τόσο γενικό αντί να απαντήσεις στη ερώτηση που έθεσα εξαρχής... anyway! Ναι, παρεπιπτόντως έχω θέμα και με το php.ini...!
| I am now |

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από gvre » 02 Σεπ 2011 11:33

Θα σου πρότεινα να χρησιμοποιήσεις κάποιο library όπως πχ το Swift Mailer.

web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 02 Σεπ 2011 13:02

Έχω κάνει όλες τις απαραίτητες αλλαγές στο php.ini και δεν αποστέλλεται το email... δεν θέλω να χρησιμοποιήσω Swift Mailer, ένα από email θέλω να δω να στέλνεται για να προχωρήσω παρακάτω στο script μου...

Κώδικας: Επιλογή όλων

&#91;mail function&#93;
SMTP = smtp.hol.gr
smtp_port = 25
sendmail_from = example@hol.gr
Καμιά συμβουλή?
| I am now |

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1952
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από vassilism » 02 Σεπ 2011 15:50

web0ptim έγραψε:Καμιά συμβουλή?
Υπάρχει περίπτωση το smtp_port να μην είναι το 25 για την hol, επομένως πρώτα πρέπει να σιγουρευτείς αν όντος είναι το 25.
Επίσης υπάρχει περίπτωση να υπάρχει και κάποια επιπλέον ρύθμιση από το rooter σου.
Και μην ξεχάσεις να κάνεις restart τον apache αφού κάνεις τις αλλαγές από το php.ini
jpk έγραψε:Θέλεις απόψεις για το ποιος είναι ο πιο ορθός τρόπος χρήσης του php.ini με τον κώδικα που προέβαλες; ??? Αυτό είναι το πρόβλημά σου το php.ini ?
Είναι κακό να ρωτάει για κάτι που δεν ξέρει? Θα μπορούσες πολύ απλά να μην δώσεις καμιά απάντηση παρά να ειρωνεύεσαι κάποιον που λέει από την αρχή ότι είναι αρχάριος.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από gvre » 02 Σεπ 2011 16:08

Είναι πιθανό να χρειάζεται authentication για να στείλει email.

Άβαταρ μέλους
Argyris88i
Δημοσιεύσεις: 60
Εγγραφή: 10 Απρ 2010 13:53
Τοποθεσία: Athens
Επικοινωνία:

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από Argyris88i » 02 Σεπ 2011 16:41

Δες εδώ : http://pear.php.net/manual/en/package.m ... xample.php για να στέλνεις + html emails, από οποιοδήποτε mail provider θέλεις εσύ. Το να στέλνεις τοπικά email αλλάζοντας το php.ini ορίζοντας τις κατάλληλες τιμές, εμένα μου έχει αποδειχθεί πολύ προβληματικό, ειδικά όταν θές να κάνεις μεταφορά του project σε άλλο Server ( χώρια ότι εάν είσαι σε shared server δεν έχεις τέτοια δυνατότητα ).
Prosilis - Chatzitofis & Co.
Web,Social & Marketing Games!
http://www.sdsgames.com/

web0ptim
Δημοσιεύσεις: 18
Εγγραφή: 24 Αύγ 2011 21:02

Αποστολή email ενεργοποίησης από φόρμα εγγραφής χρήστη

Δημοσίευση από web0ptim » 02 Σεπ 2011 19:41

Ευχαριστώ παιδιά για τις απαντήσεις σας, πολύ χρήσιμες στο ψάξιμό μου :)
Κατάλαβα ότι μάλλον πρέπει να χρησιμοποιήσω κάποια λύση τύπου PEAR αλλά μπορείτε να μου προτείνετε λύσεις για το πρόβλημα που περιγράφω? Δοκίμασα διάφορα ports, επαννεκινούσα τον server πάντα, τα smtp πιστεύω είναι σωστά (δοκίμασα από διάφορες συνδέσεις) κτλ.
Τι άλλο μπορεί να φταίει? Γιατί είναι τόσο "προβληματική" η συνάρτηση mail() της PHP???
| I am now |

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης