פורסם 2015 ביולי 1310 שנים שלום אני מתכנת php מתחיל והחלטתי לקחת על עצמי פרוייקט ולהקים פורום מאפס בנתיים בניתי מסד נתונים קטן וכמה דפים ב php html אפשר בפורום בנתיים להירשם לפורום לעשות כניסה ליצור הודעה חדשה בפורום וכול ארבע הודעות הוא פותח דף חדש להודעה אחרונה וככה אלה למשל a b c d e f g h i j אז יהיו 4 דפים שבדף אחרון יש רק הודעה אחת שהיא aוגם אפשר להיכנס להודעות ולהגיב עליהם לערוך כול הודעה שהגבת ושייכת לך או למחוק אותה וגם אני בהתחלה של שליחת הודעות בין משתמשים באתר בנתיים מצליח לי עד כו אני מצרף פה את הקוד של המסד נתונים ולדוגמא את הקוד של הphp בדף שמגיבים על הודעות ויוצרים הודעות אני רוצה לציין כול המשתנים שלי נתתי להם כול מיני שמות מוזרים וגם לא השתמשתי כמעט בפונקציות כול הקוד מסורבל אבל הוא עובד מצויין ! אז מה דעתכם?הבעיה שיש לי קצת ידע ואין לי מושג איך בונים פורום הכול כאן מאולתר מאפס בנתיים אני מצליח לשלב את php עם mysql שזה יעבוד אבל אני בטוח שאפשר לשפר מלאה וככה לא באמת מתכנתים פורום ואיזה עוד פרוייקטים אתם ממליצים לי עוד לנסות לעשות כדי להשתפר ולהבין את השפה?ומסדי הנתונים.זה המסד נתונים והקוד שמגיבים על הודעותcreate database middlenews;use middlenews;create table users(user_id int NOT NULL auto_increment ,user_name varchar(30),first_name varchar(30),last_name varchar(30),email varchar(30),password1 varchar(30),primary key(user_id));create table forum(forum_id int,forum_name varchar(30),primary key(forum_id));create table comments(comment_id int not null auto_increment,forum_id int,user_id int,head_comment varchar(30),comment varchar(100),times varchar(40),primary key(comment_id));create table pages(page_id int not null auto_increment ,comment_id int,primary key(page_id));create table tguva(tguva_id int not null auto_increment,comment_id int,user_id int,tguva1 varchar (30),times1 varchar(30),primary key(tguva_id));create table mailbox(mail_id int auto_increment,user_id int,user_name varchar(30),messager varchar(30),toh varchar(30),timer varchar(30),primary key(mail_id));create table mailtalk(talk_id int auto_increment,mail_id int,user_id int,talk_comment varchar(30),timer1 varchar(30),primary key(talk_id));ALTER TABLE commentsADD CONSTRAINT FK_user_idFOREIGN KEY (user_id) REFERENCES users(user_id),add constraint FK_forum_idforeign key(forum_id)references forum(forum_id);insert into forum(forum_id,forum_name)values(1,'Middle East');insert into forum(forum_id,forum_name)values(2,'Public');ALTER TABLE tguvaADD CONSTRAINT FK_comment_idFOREIGN KEY (comment_id) REFERENCES comments(comment_id),ADD CONSTRAINT FK_user_id1FOREIGN KEY (user_id) REFERENCES users(user_id);ALTER TABLE mailboxADD CONSTRAINT FK_uszFOREIGN KEY (user_id) REFERENCES users(user_id);alter table mailtalkadd constraint fk_usforeign key (user_id)references users(user_id),add constraint fk_mailforeign key (mail_id)references mailbox(mail_id)<?php$servername = "localhost";$username = "root";$password = "dsad1234";$dbname = "middlenews";// Create connection$conn = new mysqli($servername, $username, $password,$dbname);// Check if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}session_start(); date_default_timezone_set('Israel/Jerusalem');$time = date('m/d/Y h:i', time());$user=$_SESSION['id'];$id = $_GET['id'];$name12 ="select user_name from users where user_id='$user'";$ft11=$conn->query($name12);$comment='';while($row=$ft11->fetch_assoc()){ $user1 = $row['user_name'];}if(isset($_POST['sub'])){ $title = $_POST['tit']; $msg = $_POST['msg']; $comment1 = "insert into tguva(comment_id,tguva1,user_id,times1) values('$id','$msg','$user','$time')"; $conn->query($comment1);}$f = "select user_name,comment,times from comments,users where comment_id='$id' and comments.user_id = users.user_id";$fl=$conn->query($f);if($fl->num_rows>0){while($row=$fl->fetch_assoc()){ $tg=$row['user_name']; $tg1=$row['comment']; $tg2=$row['times'];}$comment=$comment."<div id='boxer2'> <div id='blue'> <div id='date'>$tg2</div> <div id='name'>By $tg</div> </div> <br> <div id='msg''> $tg1</div> </div> ";}$tguva = "select user_name,tguva1,times1,tguva_id from tguva,comments,users where tguva.comment_id='$id'and tguva.comment_id=comments.comment_id and tguva.user_id = users.user_id";$small = $conn->query($tguva);if($small->num_rows>0){ while($row=$small->fetch_assoc()) { $tid = $row['tguva_id']; $us = $row['user_name']; $tguva1= $row['tguva1']; $time1=$row['times1']; $comment = $comment."<div id='boxer'> <div id='blue'> <div id='date'>$time1</div> <div id='name'>$us</div> </div> <br> <div id='msg'> $tguva1</div><div id='edit'><a href='edit.php?id=$tid'>Edit Message</a></div><div id='delete'><a href='delete.php?id=$tid'>Delete Message</a></div> </div> "; }}?>- - - תגובה אוחדה: - - -זה הדף שיוצרים הודעה בפורום<?php$servername = "localhost";$username = "root";$password = "***";$dbname = "middlenews";// Create connection$conn = new mysqli($servername, $username, $password,$dbname);// Check if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}session_start();$page = $_GET['id'];$kts = FALSE;$userid = $_SESSION['id']; date_default_timezone_set('Israel'); $time = date('m/d/Y h:i', time());if(isset($_POST['sub'])){ $title = $_POST['tit']; $msg = $_POST['msg']; $comment = "insert into comments(forum_id,user_id,head_comment,comment,times) values(1,'$userid','$title','$msg','$time')"; $conn->query($comment);}$ft = $_SESSION['id'];$name ="select user_name from users where user_id='$ft'";$ft1=$conn->query($name);while($row=$ft1->fetch_assoc()){ $user = $row['user_name'];}$fk = "select user_name,comment_id, head_comment,times from comments,users where comments.user_id = users.user_id order by comment_id DESC";$ts = $conn->query($fk);$sum=0;$tgk=FALSE;$sum1=0;$page1 = $page*3;$ftr='';$page = $page *3;$page1 =$page1-3;$pages =0;$pages1=0;$yesh=0;$ftp = 0;$ps=0;$sumer=0;$rows1=$ts->num_rows;for($kj=0;$kj<=$rows1;$kj++){ $ps=$ps+3; if($ps>$rows1) { $ftp = 1; } if($ps==$rows1) { $kj=$kj*$rows1+100; }}if($ts->num_rows>0){ while($row=$ts->fetch_assoc()) { $pages=$pages+1; if($pages==3) { if($ftp>0) { $ftp= 0; $pages1=$pages1+1; $pages2 = $pages2."<a href='talk.php?id=$pages1'>$pages1</a>"; } $pages1=$pages1+1; $pages2 = $pages2."<a href='talk.php?id=$pages1'>$pages1</a>"; $pages=0; } $sum=$sum+1; if($sum>$page1 && $sum<=$page) { $sum1=$sum1+1; $us = $row['user_name']; $kr = $row['comment_id']; $lt =$row['head_comment']; $tim = $row['times']; $ftr=$ftr."<div id='boxer'> <div id='blue'> <div id='date'>$tim</div> <div id='name'>By $us</div> </div> <br> <div id='msg''> <a href='message.php?id=$kr'>$lt</a> </div> </div> "; if($sum1==3) { $kts = TRUE; } } if($kts==true) { $sum=-5; } $us = $row['user_name']; $kr = $row['comment_id']; $lt =$row['head_comment']; $tim = $row['times']; }}?> נערך 2015 ביולי 1310 שנים על-ידי Daniel Fogel
פורסם 2015 ביולי 1310 שנים כמה סימני פיסוק, ירידות שורה והפרדה לפסקאות בהודעה שלך זה יהיה התחלה טובה.אם אפשר גם בבקשה בלי code dumps. אי אפשר להבין מדבר כזה כלום. אם יש לך שאלה ספציפית על קטע קוד כלשהו לך על זה, אבל לזרוק את כל הקוד שלך לעמוד ולשאול איך זה - זה קצת בעייתי.ויש לי עוד 2 מילים בשביל - mysql injection. תשתמש ב- prepared statements כדי למנוע את זה.
פורסם 2015 ביולי 1410 שנים מחבר כן תודה בקשר לsql injection אני עדין לא הגעתי לשלב של אבטחה אני רק לומד לבנות את המערכת עכשיו יש לי שאלה קטנה בקש לטבלה של הודעות בין מישתמשים כמו מייל כזה בתוך אתר. אז יש לי table mailsmail id primary key,user id foreign key,user_name,head message,messageטבלה שנייה יש ליchat id primary keyuser_id foreign keymail id foreing keymessageעכשיו השאלה שלי בטבלה הראשונה אני מכניס user_id לפי מי ששולח ובuser_name אני רושם מי שמקבל את המייל לא הבנתי איך אני יכול להכניס שתי user_id לטבלה אחת אז עשיתי עמודה אחת של user_id ואחת של user_name בתגובות במיילים זה כבר לא בעיה אני משתמש רק בuser_id כי כול תגובה יש רק בן אדם אחת והיא נמצאת כבר בתוך mail_id ככה שיש לי כבר את שניהם. אבל משום מה נראה לי שאני לא עושה כמו שצריך וזה כבר מתחיל להיות אילתור רע. מה הייתה ממליץ לי לעשות?ואיפה אפשר להשיג מדריכים ברמה גבוה שמלמדים SQLחשבתי גם לעשות את user_id and mail_id primary key ואז פשוט זה יצור פעמים רק שאסור אותו שם פעמיים כאילו אפשר אותו מייל אידי אבל אז אני מסתבך עם sql auto_increment נערך 2015 ביולי 1410 שנים על-ידי Daniel Fogel
פורסם 2015 ביולי 1410 שנים אין בעיה להוסיף כמה IDים בטבלה. ID הוא מספר ולכן השדה שאתה תרצה להוסיף הוא integer. אתה פשוט צריך לקרוא לו בשם שונה ולהתייחס אליו על פי השם הזה. כמובן יש להוסיף index מתאים לשדות שמשמשים כ- foreign key. אני לא מומחה מסדי נתונים (ואני בטוח שיש מישהו בפורום שיכול לתת לי 100 סיבות למה כל אחת מהאפשרויות שציינתי פה לא טובה ), אבל בשביל משהו בסיסי הייתי הולך על משהו כזה: או משהו כזה: כמובן כמה דברים חשובים: * indexes. תדאג להוסיף אינדסים לשדות שעל פיהם אתה תבצע שליפה ממסד הנתונים * password. לעולם אבל לעולם אל תשמור סיסמאות כטקסט רגיל. אתה רוצה לשמור hash של הסיסמה (hashed + salted עוד יותר טוב) ולהשוות את ה- hash של הסיסמה שהמשתמש מזין בהתחברות לזה ששמור במסד נתונים. תשתמש בפונקציות password_hash ו- password_verify של PHP * וכמו שציינתי קודם, לעולם אבל לעולם אל תסמוך על הקלט שאתה מקבל מהמשתמש. תתחיל לעבוד מראש עם prepared statements ותחסוך כאב ראש בעתיד כשתנסה ללמוד "להמיר" את עצמך לעבודה עם זה. לגבי מדריכים תבדוק אולי את teamtreehouse. בתשלום אבל ממה שיצא לי לראות בד"כ יש להם הדרכות טובות (יש trial ל- 14 יום) http://teamtreehouse.com/library/using-php-with-mysql ובכל מקרה תמנע מ- w3schools. הם מסבירים על עבודה עם פונקציות mysql_* רגילות בלבד. שלא לדבר על זה שהפונקציות הללו כבר מוגדרות deprecated, הן גם לא בטוחות לשימוש רגיל.
פורסם 2015 ביולי 1410 שנים מחבר תותח עכשיו בדקתי וזה עובד לימדתת אותי שתי דברים חדשים שמפתח זר לא חייב להיות בשם של המפתח בטבלה הראשית שלו ואיך אפשר להשתמש בו פעמיים בו זמנית בטבלה שהוא מפתח זר בא כי עד עכשיו השתמשתי במפתח זר עם אותו השם פעמיים באותו טבלה וזה לא עבד לי עכשיו שהבנתי שאפשר לשנות את השם שלו אני יכול להשתמש בו פעמיים תודה רבה !!! זה עזר לי המון table mail { mail id primary_key to_mail foreignkey(user_id) from_mail foreigkey(user_id) date () time head varchar comment varchar } table mailchat ( chat_id primary_key mail_id foreign key user_id forein key (user_id) date time comment varchar ) זה מספיק למערכת שתציג באיזה שעה נשלחה הודעה ועל ידי איזה משתמש וגם שיהיה אפשר להתכתב בתוך הודעה ולראות על ידי מי ובאיזה שעה ? עם הבנתי נכון נערך 2015 ביולי 1410 שנים על-ידי Daniel Fogel
פורסם 2015 ביולי 1410 שנים מחבר select user_name,comment,time,chat_id from chat,mail,users where chat.mail_id='$id'and chat.mail_id=mail.mail_id and chat.user_id = users.user_id"; דרך הגב מה אתה אומר על השאילתה הזאת כדי לשלוף את התכתבויות בין המשתמשים?יש דרך יותר נכונה? נערך 2015 ביולי 1410 שנים על-ידי Daniel Fogel
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.