02-12-2009, 21:46
|
|
|
חבר מתאריך: 17.10.05
הודעות: 161
|
|
עזרה עם ajax+php+דרך פעולה(מעוניין לבנות מייל)
שלום לכולם .
זה הולך להיות קצת ארך אז אני מקווה שיש לכם סבלנות .
בניתי טבלה שמכילה הודעות שמשתמשים שולחים לי מהאתר שלי(הצעות , הערות וכו').
אני מעוניין לבנות סוג של מייל פנימי באתר שניתן לגשת אליו רק ע"י סיסמה ולכן בניתי את דף ההתחברות הבא(login.html):
קוד:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> </title>
<style type="text/css">
.adg {COLOR:#0066CC; FONT-SIZE: 14px;font-weight:bold;font-family:arial; text-decoration: none; }
BODY { margin:0px;padding:0px;background-color:transparent;}
</style>
</head>
<body >
<br><br>
<form method="POST" action="mail.php">
<table align=center cellpadding=1 cellspacing=0 style="vertical-align:top;width:200px;height:100px;border: 1px solid #26679E;">
<tr>
<td align=center>
<font class="adg">כניסת מנהל</font>
</td>
</tr>
<tr>
<td align=center>
<INPUT TYPE="PASSWORD" name="pw" SIZE=20 >
</td>
</tr>
<tr>
<td align=center>
<input type="submit" value="שלח">
</td>
</tr>
</table>
</form>
</body>
</html>
לאחר שהוכנסה סיסמה המידע מועבר לדף mail.php וזהו הדף:
קוד PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>פישפיק-fishpic.atwebpages.com</title> <style type="text/css"> .adg {COLOR:#0066CC; FONT-SIZE: 14px;font-weight:bold;font-family:arial; text-decoration: none; } .piska {COLOR: #033763; FONT-SIZE: 15px;font-family:arial; text-decoration: none; } BODY{margin:0px;padding:0px;} </style> <SCRIPT type="text/javascript"> var xmlhttp; function ajaxFunction(x) { alert(x); var x=x if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if(xmlhttp.readyState==4) { var data=xmlhttp.responseText; alert(data); document.getElementById("divp").innerHTML = data; } } var url="deletmail.php"; url += "?id=" + encodeURIComponent(x); url += "&ignoreMe=" + Math.random(); // Random string xmlhttp.open("GET",url,true); xmlhttp.send(null); }; function hs(x) { var x="tafn"+x if (navigator.appName=='Netscape') if (document.getElementById(x).style.visibility == "hide") document.getElementById(x).style.visibility="show" ; else document.getElementById(x).style.visibility="hide"; else if (document.getElementById(x).style.display=="none") document.getElementById(x).style.display="block"; else document.getElementById(x).style.display="none"; }; </script> </head> <body > <?php $con= mysql_connect(*****,**********,'***********'); if(!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("*************", $con); $encoding = 'utf-8'; mb_detect_order($encoding); mb_internal_encoding($encoding); mysql_query("SET NAMES utf8;"); $password=mysql_query("SELECT password FROM mailpassword"); $password=mysql_fetch_array($password); $password=$password['password']; $userpassword=$_POST['pw']; if($userpassword==$password) { $result=mysql_query("SELECT firstname ,id,lastname,email,subject,details FROM mail"); echo '<div id="divp" >'; echo '<table align=center border=0 style="width:600px;">'; echo '<tr><td colspan=2 align=right><font style="COLOR: #26679E; FONT-SIZE: 45px;font-family:arial;font-weight:bold;text-decoration: none;">פישפיק</font><font style="COLOR: #ACACAC; FONT-SIZE: 40px;font-family:arial; text-decoration: none;">דואר</font> </td></tr>'; echo '</table>'; echo '<table align=center cellspacing=0 cellpadding=0 border=0 style="width:600px;border-left: 1px solid #26679E;border-right: 1px solid #26679E;border-bottom: 1px solid #26679E;">'; while($row = mysql_fetch_array($result)) { echo '<tr>'; echo '<td align=center style="height:25px;border-top:1px solid #26679E;"> <form method="get" action="" onsubmit="ajaxFunction(id.value)"> <input type="hidden" id="id" name="id" value="'.$row['id'].'"/> <input type="submit" value="מחק"/> </form> </td> <td onClick="hs('.$row['id'].')" style="height:25px;border-top:1px solid #26679E;"> <table align=right style="width:100%;"> <tr> <td align=right> <font class="adg">'.$row['email'].'</font> </td> <td align=right style="width:100px;"> <font class="adg">'.$row['subject'].' </font> </td> <td align=right style="width:140px;"> <font class="adg">'.$row['firstname'].' '.$row['lastname'].' </font> </td> </tr> </table> </td>'; echo '</tr>'; echo '<tr><td></td><td><table align=right style="width:100%;"><td></td><td align=right dir="rtl" style="width:400px;"><div id="tafn'.$row['id'].'" style="display:none;"> <p class="piska">'.$row['details']. '</p></div></td> </table></td></tr>'; } echo '</table>'; echo '</div>'; mysql_close($con); } else { echo '<br><br>'; echo '<table align=center cellpadding=1 cellspacing=0 style="vertical-align:top;width:200px;height:100px;border: 1px solid #26679E;"> '; echo '<tr><td align=center> <font> סיסמה שגוייה</font> <a href="login.html" class="adg">נסה שנית</a></td></tr>'; echo '</table>'; } ?> </body> </html>
מה שלמעשה ממבצע דף זה הוא בודק אם הסיסמה שהוזנה נכונה (משווה אותה לסיסמה ב-db) אם נכונה מדפיס את כל המיילים (שורה שורה בדומה למייל של וואלה כאשר יש אפשרות ללחוץ על המייל להרחבה. אם סיסמה שגוייה נותן פלט סיסמה שגוייה עם לינק לדף login.html.
עד פה הכל תקין הבעייה נוצרה כאשר ליד כל שורה יצרתי כפי שניתן לראות form שמכיל כפתור "מחק" המטרה היא שכאשר אני לוחץ על כפתור זה אותה שורה תמחק .כמובן שישנו input מוסתר שמכיל id של השורה בהתאם ל-id בטבלה מעבר לכך אני מעוניין שהשורה תמחק ללא רענון הדף (כאן נכנס השימוש ב-ajax).
ניתן לראות שהטבלה שיצרתי למיילים כתובה בתוך div המטרה שלי הייתה שכאשר תבוצע לחיצה על מחק ישלח id לפונקצייה ajaxFunction פונקצייה זאת קוראת לדף deletmail.php שלמעשה מוחק את השורה (המייל) מהטבלה ובנוסף כותב שוב את הטבלה כדי שבבעזרת ajax נוכל להכניס את הפלט לdiv ללא רענון הדף.
הבעיות שנוצרו:
1.לא מגיע לי לdeletmail.php פשוט מרענן לי את הדף ופולט את הפלט כאילו נכנסתי לדף ללא סיסמה.
(אני מנחש שזה בגלל השיטה של ה-form )
2.נניח שהכל עובד כיצד אני יכול לוודא ששתשים לא יוכלו להגיע לdelete מייל ע"י הכנסת לינק ישיר בשורת בכתובות של הדפדפן.
עכשיו אני יודע שחפרתי,אני יודע שזה ארוך וקשה להבנה, אבל למדתי php וכו' רק לפניי שבוע ואני ממש לא יכול להירדם בלילה עד שאני לא פותר את זה.
במידה ויש למישהו רעיון טוב יותר מהדרך בה ביצעתי את זה על מנת להגיע לאותה תוצאה אני אשמח לשמוע
נערך לאחרונה ע"י borbabeten בתאריך 02-12-2009 בשעה 21:52.
|