בעיה בקוד.. עזרה...

יולו

New member
בעיה בקוד.. עזרה...

אני מנסה להכין מערכת של יוזרים באתר שלי.. זאת אומרת שאנשים יכולים להרשם לאתר ויכולים להכנס בתור לוגין אחריי שהם רשומים.. יש לי דף שמכניס את הנתונים לבסיס נתונים.. הוא אמור לבדוק אם קיים כבר שם משתמש.. אם כן לא להביא לו להרשם ולכתוב לו שקיים כבר שם משתמש.. אחרת להכניס אותו... ניסיתי כל מיני שמות משתמשים והוא אומר לי כל הזמן שקיים כבר שם משתמש.. רק הכנתי את זה היום ככה שאין שום דבר.. גם בדקתי את זה ואין פשוט כלום.. הנה הקוד:
<br> <?php //לקיחת משתנים מהטופס והשמה במשתנים חדשים $nick=$_POST['nickname']; $pass=$_POST['password']; if ($nick=='' || $pass=='') { echo ("חסרים נתונים"); } else { //עבודה עם מסד נתונים $conn=mysql_connect('','','') or die("לא מצליח להתחבר לבסיס נתונים"); mysql_select_db('greenhome') or die("לא יכול לבחור די בי"); $check=mysql_query("SELECT * FROM users") or die("לא יכול לשלוף"); while ($x=mysql_fetch_array($check)) { if ($nick==$x['nickname']) { $good='no'; } else { $good='ok'; } } if ($good=='ok') { mysql_query("INSERT INTO users(nickname,password) VALUES(\"$nick\",\"$pass\")") or die("שגיאה: לא יכול להכניס נתונים"); echo ("ההרשמה בוצעה בצלחה, ברור הבא"); } else { echo ("<div>לא יכול לרשום אותם מפניי ששם המשתמש כבר תפוס על ידי משתמש אחר</div>"); } mysql_close($conn); } ?>​
אני לא מוצא בעיה.. מחכה לעזרה.. תודה, יולו.
 

shanor

New member
מממ...

לא בדקתי את הקוד, אבל הנה כמה עצות לשיפור: 1. תריץ את השאילתה בדיוק על היוזר שאותו אתה מחפש ולא בצורה כל כך כללית.
select nickname from users where nickname='שם משתמש';​
עכשיו תבדוק כמה תוצאות יש. אם יש 0 תוצאות משמע אין בטבלה שלך שם כזה, אם יש 1 (או יותר) אז השם קיים. 2.כשתעשה את זה ככה, אפשר יהיה להוריד את כל לולאת ה- WHILE - תחשוב, שכאשר יש לך עשרות (ואולי מאות) משתמשים הלולאה הזו תיקח זמן עד שהיא תסתיים. 3. גם את הערכים של GOOD$ יוכלו לרדת, כי אם יש 0 תוצאות אז אפשר לרשום, אם יש יותר אי אפשר לרשום. 4. מעבר לזה, מה בדיוק הוא נותן לך? האם השגיאה שלך היא בערך של GOOD$? שאמור לקבל OK ומקבל No? או שהבעיה היא בהוצאת הערכים מתוך מאגר הנתונים, תנסה לדבג (לעבור שורה שורה ותבדוק מה הערכים שאתה מקבל לעומת הערכים שאותם אתה מצפה לקבל). בברכת הצלחה, שנאור.
 

יולו

New member
ניסיתי משהו אבל לא עבד..

זה מה שניסיתי לעשות:
<br> <?php //לקיחת משתנים מהטופס והשמה במשתנים חדשים $nick=$_POST['nickname']; $pass=$_POST['password']; if ($nick=='' || $pass=='') { echo ("חסרים נתונים"); } else { //עבודה עם מסד נתונים $conn=mysql_connect('','','') or die("לא מצליח להתחבר לבסיס נתונים"); mysql_select_db('greenhome') or die("לא יכול לבחור די בי"); $check=mysql_query("SELECT nickname FROM users WHERE nickname=\"$nick\"") or die("לא יכול לשלוף"); if ($check==0) { mysql_query("INSERT INTO users(nickname,password) VALUES(\"$nick\",\"password\")") or die("cannot insert"); echo("ההרשמה בוצעה בהצלחה. ברוך הבא למועדון החברים של הבית של הירוקים"); } else { echo ("כבר קיים שם משתמש. בחר אחד חדש"); } mysql_close($conn); } ?>​
לא ככה אמורים לעשות לפי דעתי.. לא רק בגלל שזה לא עובד.. פשוט זה נראה לי לא נכון.. מחכה לעזרה, יולו.
 

i s o T o p

New member
כשאתה בודק את השאילתה

כשאתה בודק אם השאילתה שווה ל0 זה לא נכון לעשות אני יודע שתיקנת אבל שתידע שכשאתה עושה ככה:
if(mysql_query("SELECT nickname FROM users WHERE nickname=\"$nick\""))​
אתה בעצם בודק אם השרץ הצליח להריץ את השאילתה ולא אם הוא מצא לו תוצאות.
 

יולו

New member
האאא...

חחחח דקה אחריי :) אבל חשבתי איך אני בודק כמה שמות יש אותו דבר. חשבתי ישר על mysql_num_rows והנה התוצאה לפניכם למי שלא הבין:
<br> <?php //לקיחת משתנים מהטופס והשמה במשתנים חדשים $nick=$_POST['nickname']; $pass=$_POST['password']; if ($nick=='' || $pass=='') { echo ("חסרים נתונים"); } else { //עבודה עם מסד נתונים $conn=mysql_connect('','','') or die("לא מצליח להתחבר לבסיס נתונים"); mysql_select_db('greenhome') or die("לא יכול לבחור די בי"); $check=mysql_query("SELECT nickname FROM users WHERE nickname=\"$nick\"") or die("לא יכול לשלוף"); $rows=mysql_num_rows($check); if ($rows==0) { mysql_query("INSERT INTO users(nickname,password) VALUES(\"$nick\",\"password\")") or die("cannot insert"); echo("ההרשמה בוצעה בהצלחה. ברוך הבא למועדון החברים של הבית של הירוקים"); } else { echo ("כבר קיים שם משתמש. בחר אחד חדש"); } mysql_close($conn); } ?>​
תודה העזרה שנאור, יולו.
 

יולו

New member
אממ..

היא בודקת כמה שורות יש לי.. אתה בוחן אותי? או שאתה לא יודע?
 

avi326

New member
אני לא יודע :)

אני עובד על בדיוק אותו דבר מערכת משתמשים ופורום, ואז אני ישלב אותם.
 
למעלה