Sunday, May 10, 2009

Mail server & register

Το register.php


<html>

<head>

<title>Διαχείριση Βαθμολογίας </title>
<link href="stylesheets/public.css" media="all" rel="stylesheet"
type="text/css" />
</head>

<body>
<div id="header">
<h1>Σύστημα Διαχείρισης Βαθμολογιών και Απουσιών</h1>
</div>

<div id="main">

<table id="structure">
<tr>
<td id="navigation">
<ul>

<li><a href="index.php">Αρχική Σελίδα</a></li>

<li ><a href="login.php"> Σύνδεση</a></li>
</ul>
</td>
<td id="page">
<h2>Εγγραφή</h2>
<form action='verify.php' method='POST' name='register' accept-charset="UTF-8">
<table>

<tr>
<td>
Όνομα χρήστη:
</td>

<td>
<input type='text' name='username'>
</td>

</tr>


<tr>
<td>
Κωδικός:
</td>

<td>
<input type='password' name='password'>
</td>

</tr>

<tr>
<td>
</td>


</tr>

<td>
Πραγματικό όνομα<br>και επίθετο:
</td>

<td>
<input type='text' name='realname'>
</td>

</tr>
<tr>
<td>
email:
</td>

<td>
<input type='text' name='email'>
</td>

</tr>


<tr>
<td>
Διεύθυνση:
</td>

<td>
<input type='text' name='address'>
</td>

</tr>
<tr>
<td>
T.K:
</td>

<td>
<input type='text' name='pobox'>
</td>

<tr>
<td>
Πόλη:
</td>

<td>
<input type='text' name='city'>
</td>

</tr>


<tr>
<td>
Τηλέφωνο:
</td>

<td>
<input type='text' name='phone'>
</td>
</tr>
<tr>

<td> Ιδιότητα:</td> <td>
<input type="radio" name="idiothta" value="secretary"checked> Γραμματέας
<input type="radio" name="idiothta" value="teacher" > Καθηγητής
<input type="radio" name="idiothta" value="student"> Μαθητής/Κηδεμόνας
</td>

<tr>

<td>
<input type="reset" />
</td>

<td><input type="hidden" name="form_submitted" value="1"/>

<input type='submit' name='submit' value='Εγγραφή'>
</td>

</tr>
</table>
</table>
</div>


<div id="footer">

</html>


To valid.php

<?php

include ("config.php");
$con=mysql_connect($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");

mysql_select_db('dbusers');

if ($_POST['form_submitted'] == '1') {
##User is registering, insert data until we can activate it

$activationKey = mt_rand() . mt_rand() . mt_rand() . mt_rand() . mt_rand();


$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$realname= mysql_real_escape_string($_POST['realname']);
$email = mysql_real_escape_string($_POST['email']);
$address = mysql_real_escape_string($_POST['address']);
$pobox=$address = mysql_real_escape_string($_POST['pobox']);
$city= mysql_real_escape_string($_POST['city']);
$phone=mysql_real_escape_string($_POST['phone']);
$idiothta=mysql_real_escape_string($_POST['idiothta']);

mysql_query("set names utf8;");


$sql= "INSERT INTO `dbusers`
(`id` ,`username` ,`password`, `realname`, `email`, `address`, `pobox`, `city`, `phone`, `idiothta`,`activationkey`, `status`)
VALUES
(NULL , '$username', '$password', '$realname', '$email','$address', '$pobox','$city','$phone','$idiothta','$activationKey', 'verify');";


if (!mysql_query($sql))

{

die('Σφάλμα: ' . mysql_error());

}

echo "An email has been sent to $_POST[email] with an activation key. Please check your mail to complete registration.";

##Send activation Email

$to = $_POST[email];

$subject = " registration";

$message = "Welcome to our website!\r\rYou, or someone using your email address, has completed registration at YOURWEBSITE.com. You can complete registration by clicking the following link:\rhttp://www.YOURWEBSITE.com/verify.php?$activationKey\r\rIf this is an error, ignore this email and you will be removed from our mailing list.\r\rRegards,\ YOURWEBSITE.com Team";

$headers = 'From: noreply@ YOURWEBSITE.com' . "\r\n" .

'Reply-To: noreply@ YOURWEBSITE.com' . "\r\n" .

'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

} else {

##User isn't registering, check verify code and change activation code to null, status to activated on success

$queryString = $_SERVER['QUERY_STRING'];

$query = "SELECT * FROM dbusers";

$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){

if ($queryString == $row["activationkey"]){

echo "Congratulations!" . $row["username"] . " is now the proud new owner of an YOURWEBSITE.com account.";

$sql="UPDATE users SET activationkey = '', status='activated' WHERE (id = $row[id])";

if (!mysql_query($sql))

{

die('Error: ' . mysql_error());

}

}

}

}

?>


ΤΟ λάθος που εμφανίζει...:

An email has been sent to 312321 with an activation key. Please check your mail to complete registration.

Warning: mail() [function.mail]: Failed to connect to mailserver at "@localhost" port 30, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\verify.php on line 58


ΚΑΙ Η ΛΥΣΗ ΓΙΑ ΑΥΤΟ :


http://www.freestuff.gr/forums/viewtopic.php?p=407343#407343

Saturday, May 9, 2009

3 σε 1 σώζει ζωές (PHP+mySql+Apache)

Προτού κάνετε οτιδήποτε εγκαταστήσετε αυτό εδώ το πακετάκι και ακολουθήστε τις οδηγίες για το σετάρισμα του.

http://www.wampserver.com/en/

Περιηγηση στο site από τον browser



Δεν είναι ολοκληρωμένη μορφή αλλά δίνει μια γενική ιδέα.

η βαση και τα tables

Τα tables για τη βάση dbusers :









Περιήγηση στο table Ek8esh:



To table για το μάθημα της Εκθεσης :




















Table απουσίες το Α1a = Α έτος Α τετραμηνο αδικαιολόγητες και ούτω καθεξης

Notepad ++ (για να γράφετε τον κώδικα σας)

Για να γράφετε τον κώδικα σας ένα πρόγραμμα που βοηθάει ιδιαίτερα είναι το Notepad ++.
Δίνει τη δυνατοτητα για αποφυγή παρατράγουδων με τα ελληνικά να σώζετε σε UTF-8. Αυτό συστήνετε ανεπιφύλακτα.



http://sourceforge.net/project/showfiles.php?group_id=95717&package_id=102072

Monday, May 4, 2009

Λύση για το κολοCollation/κωδικοποίηση στην SQL

------------


Στέλνετε από PHP στη βάση και σας τα βγάζει ερωτηματικά/κινέζικα ;
Όταν όμως κάνετε εγγραφή από το Phpmyadmin σας τα βγάζει μια χαρά ;
Αλλάξατε τα πάντα σε UTF-8 unicode ci στη βάση και δεν είδατε φως ;
Είστε ένα βήμα πριν το Δαφνί ;

------------
Υπάρχει λύση και είναι η εξής :

Πριν από κάθε mysql_query ("INSERT INTO μπλα μπλα μπλα ή οτιδήποτε....

ΠΡΟΣΘΕΣΤΕ ΤΟ ΕΞΗΣ ΟΜΟΡΦΟ :

mysql_query("set names utf8;");

και δουλεύει μια χαρά....

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




-

Video tutorials για PHP (αγγλικά)

Multimedia δοσολογία

Τα δοκιμάσαμε όλα... είναι ο καλύτερος ... Από την Ακαδημία στο Άσυλο :


"PHP Academy"


Ειδικά για τα script για login και register ξεκινήστε εδώ :

PHP Tutorials: Register & Login: User login (part1)

http://www.youtube.com/watch?v=4oSCuEtxRK8&feature=PlayList&p=7C9AFC3942AC8E40&index=0&playnext=1



Υ.Γ. Με το email confirmation πάντως έχουμε ακόμα απορίες.

E books για PHP στα αγγλικά

Για την καθημερινή σας δόση:

http://professionalstudents.blogspot.com/search/label/PHP

στη λίστα υπάρχει και το βιβλίο του
Larry Ullman :

http://professionalstudents.blogspot.com/2009/04/php-for-world-wide-web-visual.html

(σημείωση: χρησιμοποιεί XHTML έτσι ώστε να παρατείνει τη διαμονή στο ευαγές μας ίδρυμα ισόβια)

Απορία:Καθηγητής ->επεξεργασία των στοιχείων των μαθητών του

ZHTOYMENO : "Οι Καθηγητές θα έχουν γενική πρόσβαση σε όλους τους μαθητές της τάξης τους και σε όλα τα πεδία που αφορούν καταχώρηση, μεταβολή και διαγραφή. Επίσης μπορεί να έχουν πρόσβαση και σε όλους τους μαθητές του σχολείου, μόνο ως προς την ενημέρωση και όχι ως προς οποιαδήποτε μεταβολή των στοιχείων τους."


ΤΙ ΕΧΩ ΚΑΝΕΙ :

Ο πίνακας (sql) 'apousies' για τις απουσίες για τα μαθήματα θα δημιουργήσω άλλο πίνακα. Οπως φαίνεται στο phpmyadmin.

Image and video hosting by TinyPic

όπου Α1a --> Α(=Α έτος) 1(1ο τετράμηνο) a(αδικαιολόγητες απουσίες)

Α2d-> Α έτος 2ο τετράμηνο δικαιολογημένες απουσίες

...και ούτω καθεξής


ΤΙ ΕΜΦΑΝΙΖΕΙ Ο BROWSER:


Image and video hosting by TinyPic
  • (με τα input name της φόρμας... το "submitted" είναι το hidden για να εφαρμόσω μετά if function για όταν κάνει submit/αλλαγή ο χρήστης)


Image and video hosting by TinyPic


Ο ΚΩΔΙΚΑΣ ΓΙΑ ΤΟ ΚΟΜΜΑΤΙ:


---------------

if ($teacherclass=="e") // αν επιλέξει ο χρήστης "teacher" από dropdownmenu την επιλογή με
//value=e δηλαδή να μπορεί να επεξεργαστεί το απουσολόγιο των μαθητών της τάξης του
{
include ("config.php"); // σύνδεση με τη βάση
$con=mysql_connect($dbhost,$dbuser,$dbpass)
or die("Cannot connect to database");
mysql_select_db('dbusers'); // η βάση λέγεται dbusers
mysql_query("set names utf8;"); // για να δέχεται κωδικοποιήση utf8


echo "<br>Το τμήμα σας:";

$myclass= $_SESSION['myclass']['class']; // Αυτό είναι το sessesion που ξεκινάει όταν κάνει login ο χρήστης

echo $myclass; //π.χ. Β1
echo "<br>";
echo "<br>";


$query = "SELECT * FROM apousies WHERE class = '$myclass' " ; //διαλέγει όλες τις καταχωρήσεις από το table 'απουσίες' όπου στη στήλη
//τάξη/class ισούται με την τάξη του καθηγητή δηλ : $myclass
$result = mysql_query($query);



while ($row= mysql_fetch_array($result)){
// εμφανίζει κάθε μαθητή με το ονομα του και τις απουσίες του σε κάθε τετράμνο δικαιολογημένες και αδικαιολόγητες

//

echo "<table width=800 border=1 cellpading=1>
<tr>
<td><b>Όνομα χρήστη :</b></td>
<td>".$row['realname']."</td>

</tr>
<tr>
<td>αδικαιολόγητες απουσίες Α έτους Α τετραμήνου:</td>
<td>".$row['A1a']."</td>
<td>

<form action='apousies.php' method='POST' accept-charset='UTF-8'>

<input type='hidden' name='submitted' value=1>

<input type='text' name='A1a'>
<input type='submit' name='submit1' value='Αλλαγή'></td>

</tr>
<tr>
<td>δικαιολογημένες απουσίες Α έτους Α τετραμήνου:</td>
<td>". $row['A1d']."</td>
<td><input type='text' name='A1d'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>αδικαιολόγητες απουσίες Α έτους Β τετραμήνου:</td>
<td>".$row['A2a']."</td>
<td><input type='text' name='A2a'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>δικαιολογημένες απουσίες Α έτους Β τετραμήνου:</td>
<td>".$row['A2d']."</td>
<td><input type='text' name='A2d'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>αδικαιολόγητες απουσίες B έτους Α τετραμήνου:</td>
<td>".$row['B1a']."</td>
<td><input type='text' name='B1a'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>δικαιολογημένες απουσίες B έτους Α τετραμήνου:</td>
<td>".$row['B1d']."</td>
<td><input type='text' name='B1d'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>αδικαιολόγητες απουσίες B έτους Β τετραμήνου:</td>
<td>".$row['B2a']."</td>
<td><input type='text' name='B2a'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>δικαιολογημένες απουσίες B έτους B τετραμήνου:</td>
<td>".$row['B2d']."</td>
<td><input type='text' name='B2d'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>αδικαιολόγητες απουσίες Γ έτους Α τετραμήνου:</td>
<td>".$row['C1a']."</td>
<td><input type='text' name='C1a'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>δικαιολογημένες απουσίες Γ έτους Α τετραμήνου:</td>
<td>".$row['C1d']."</td>
<td><input type='text' name='C1d'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>αδικαιολόγητες απουσίες Γ έτους Β τετραμήνου:</td>
<td>".$row['C2a']."</td>
<td><input type='text' name='C2a'><input type='submit' name='submit' value='Αλλαγή'></td>
</tr>
<tr>
<td>δικαιολογημένες απουσίες Γ έτους B τετραμήνου:</td>
<td>".$row['C2d']."</td>
<td><input type='text' name='C2d'><input type='submit' name='submit' value='Αλλαγή'></form></td>
</tr>
</table> ";

echo "<br>";
echo "<br>";


if ($_POST['submitted']==1) {

// ΕΔΩ ΠΡΕΠΕΙ ΝΑ ΜΠΕΙ ΜΕ ΤΙΣ ΕΝΤΟΛΕΣ ΓΙΑ ΤΗΝ SQL UPDATE κλπ


}



}
}

ΤΙ ΖΗΤΑΩ :

Πως θα γίνει έτσι ώστε η αλλαγή που θα βάλω να μην περάσει σε όλες τις σειρές/rows/μαθητές αλλά μόνο σε αυτόν που θα διαλέξω ;

Πως θα τροποποιήσω την form/φόρμα και τα input boxes ;

Μπορεί να εμφανίζονται μια χαρά μέσω του while και fetch array

αλλά πως θα γίνει λειτουργική η δυνατότητα αλλαγής κάθε σειράς (π.χ. αδικαιολόγητες απουσίες για Β τετράμηνο τη Γ χρονιά για 1 συγκεκριμένο μαθητή ;).




ΚΑΙ ΕΔΩ ΜΕΡΙΚΕΣ ΛΥΣΕΙΣ ΚΑΙ ΠΡΟΤΑΣΕΙΣ


http://www.freestuff.gr/forums/viewtopic.php?p=406502