לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 12-04-2005, 14:46
  Omri.L Omri.L אינו מחובר  
 
חבר מתאריך: 21.01.05
הודעות: 418
בעיה לא ברורה בתנאי if פשוט..

היי חבר'ה,
אני בונה סקריפט של סקרים. אך אני כמובן רוצה לבדוק שאותו אדם לא מצביע לאותו סקר פעמיים ולכן אני מבצע בדיקה.
קוד PHP:
 $selected_id $_GET['id'];
    
$query mysql_query("SELECT * FROM `poll_votes` WHERE `ip` =\"$REMOTE_ADDR\"") or die("תקלה.");
    while(@(
$row mysql_fetch_array($query))) {
     
$id_list $row["id"];
     if(
$selected_id == $id_list) {
        print 
"כבר הצבעת לסקר זה!";
        exit;
     }
    } 

ניסיתי להצביע פעמיים לסקר והמערכת נתנה לי. מה שמוזר שכדי לבדוק אולי היתה לי טעות, ביקשתי בלולאה להדפיס כל פעם את ה-id_list כדי לראות, אולי עשיתי טעות ובעצם הוא לא מתקבל. אבל אכן ה-id שכבר הצבעתי לו מתקבל. ומשום מה ההשוואה לא פועלת ולכן ההצבעה הלא-חוקית מתבצעת בכל מקרה.

מישהו יודע מה הבעיה?

נערך לאחרונה ע"י Omri.L בתאריך 12-04-2005 בשעה 14:49.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 12-04-2005, 16:47
  דקל דקל אינו מחובר  
 
חבר מתאריך: 20.02.03
הודעות: 2,396
בתגובה להודעה מספר 3 שנכתבה על ידי Omri.L שמתחילה ב "אני חושב שלא, עשיתי כבר כמה פעמים בהצלחה"

תשובה ל dorkiaa12: הפונקציה mysql_fetch_array מקבלת את התוצאה של mysql_query ולכן הצורה שבה Omri.L עשה את זה היא נכונה.

יש בעיה כלשהי בשאילתא. הוספת בתוך השאילתא את הסימן " והוא לא אמור להיות שם. נתונים צריכים לופיע בתוך ' (גרש יחיד) ולא בתוך גרש כפול.
השאילתא שלך אמורה להיראות כך:
קוד:
mysql_query("SELECT * FROM `poll_votes` WHERE `ip`='$REMOTE_ADDR'") or die(mysql_error());
הבעיה לדעתי היא שהצורת עבודה שלך לא נכונה(מבחינת הביצוע של השאילתא והקוד שלאחר מכן) :
יש לך את הכתובת IP של הגולש, ואת ה ID של הסקר. מה שאתה עושה זה שאילתא שמוציאה את כל ההצבעות לסקרים שבהם הכתובת IP הינה הכתובת IP של אותו גולש, ואחרי זה אתה משווה כל ID של סקר שהגולש הצביע בו לID. אתה עושה המון המון פעולות שאין סיבה לבצע אותן.
לא ברור לי למה אתה לא מוציא את ההצבעה שבה ה id שווה לid של הסקר שיש לך, וה IP שווה ל IP של הגולש, ואחרי זה בודק האם קיבלת תוצאות. אם כן - כנראה שהגולש הזה כבר הצביע. אם לא - הוא לא הצביע.
שאילתא לדוגמא יכולה להיות:
קוד:
mysql_query("SELECT * FROM `poll_votes` WHERE `ip`='$REMOTE_ADDR' AND `id`=' $selected_id'") or die(mysql_error());
בשביל לבדוק אחרי זה כמה תשובות קיבלת חזרה אתה יכול להשתמש למשל ב mysql_num_rows.

בברכה, דקל
_____________________________________
"מתכנת זה אדם שפותר בעיה שעל קיומה לא ידעת, בדרך שאינך מבין"

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 13-04-2005, 07:54
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
מה שמוזר זה למה אתה מניח שאנחנו מבינים למה אתה מתכוון אם אתה לא מסביר :)
בתגובה להודעה מספר 11 שנכתבה על ידי Omri.L שמתחילה ב "תודה, אבל גם זה לא עובד :("

"אם אני שולף אחד אחד" -> שולף מה? אתה לא שולף כאן שום דבר... אתה שולח שאילתא, ובודק כמה נתונים חזרו בה - אבל אתה לא משתמש בנתונים עצמם. טיפ לעתיד: עדיף להשתמש ב SELECT COUNT, כדי שה DB יספור כמה תוצאות יש, ויחזיר רק מספר בודד, במקום את כל המידע שיש בטבלה. אבל זה תעשה אחרי שהדבר הנוכחי יעבוד לך.

האם יש הודעת שגיאה? חייבת להיות הודעת שגיאה כלשהיא. או על שגיאה בשאילתת ה SQL (ואז מה MySQL אמר, תודות לתוספת שלי), או שיש שגיאה ש"לא בחרת שום אפשרות" (מה שאמור לקרות תמיד, כי לא אתחלת מעולם את המשתנה choice$ (אלא אם כן יש לך register_globals = on, ואז חבל על כל בעיות האבטחה. בכל מקרה מומלץ להמיר את זה ל ["GET["choice_$).
אם אין אף הודעת שגיאה, זה אומר שלא הייתה התאמה ל IP ול ID. האם ה ID הוא int בתוך טבלת ה MySQL? אם כן, נסה לשנות את:
קוד PHP:
 $selected_id mysql_escape_string($_GET['id']); 

ל:
קוד PHP:
 $selected_id = (int) $_GET['id']; 

ובשאילתא:
קוד PHP:
 $query mysql_query("SELECT * FROM poll_votes WHERE ip = '{$_SERVER["REMOTE_ADDR"]}' AND id = $selected_id") or die("Problem sending query to MySQL. MySQL Said: ".mysql_error()); 
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 13-04-2005, 15:07
  Omri.L Omri.L אינו מחובר  
 
חבר מתאריך: 21.01.05
הודעות: 418
אוקיי אז הנה אסביר:
בתגובה להודעה מספר 14 שנכתבה על ידי שימי שמתחילה ב "מה שמוזר זה למה אתה מניח שאנחנו מבינים למה אתה מתכוון אם אתה לא מסביר :)"

לגבי ה-register_globals הוא במצב On - לכן אין בעיה.
לגבי ה-"אם אני שולף אחד אחד" התכוונתי, שלפני שניסיתי כל מיני שיטות, ניסיתי לעשות שליפה פשוטה, ולהדפיס לפלט את אותם הערכים שמתקבלים מן השאילתה - וכן היו תוצאות. אבל כשהוספתי את התנאי של:
קוד PHP:
 if(mysql_num_rows($query)>0

וניסיתי גם לשנות את המספר לאחד, או לעשות סימן שווה-גדול - זה פשוט לא עבד. הוא לא נתן הודעת שגיאה.

ונכון, ה-ID ב-mysql מכוון על INT.
ניסיתי את השינויים ששלחת, ועכשיו מה שקורה - הוא שזה כל הזמן אומר שכבר הצבעתי.
אין שגיאת mysql בשני המצבים (לפני השינוי שלך ואחריו).
אין שגיאת "לא בחרת במשתנה" והמשתנה choice מגיע ב-POST ולא ב-GET.

מה יכול לגרום לטעות הזאת? זה משגע אותי. זה הבסיסי שבבסיסי!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 14-04-2005, 18:03
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
לא...
בתגובה להודעה מספר 17 שנכתבה על ידי Omri.L שמתחילה ב "לא ולא :)"

GET_$ ו POST_$ הם מערכים מיוחדים שנוצרים בהם ערכים לפי סוג הבקשה. העובדה שאתה שם ב URL משתנים נוספים, לא אומר שהשרת "יאכל" אותם אם סוג הבקשה היה POST (כפי שהטופס מנחה את הדפדפן). אתה מערבב פה בין שני דברים שאני לא הייתי מערבב ביניהם (גם אם איכשהוא זה יכול לפעול). את כל הנתונים שיש לך לשלוח בטופס, תציין בטופס. גם אם אתה לא רוצה להציג אותם על המסך, בשביל זה יש שדה מסוג hidden.

בתגובה האחרונה שלך (זו שאני מגיב אליה עכשיו), אני רואה שהשאילתא שלך עדיין לא נכונה ומתייחסת למזהה הסקר בתוך מחרוזת, למרות שזהו מספר (int). אני מבקש ממך שתתקן לפי הדוגמא שנתתי.

דבר נוסף, תעשה לנו טובה, ותשים את השאילתא בתוך משתנה (במקום (mysql_query(bla תרשום var = bla$), ואז תעשה echo $bla, ואז תעשה (mysql_query($bla, ותראה לנו מה השאילתא שנשלחת בפועל ל MySQL.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 15-04-2005, 17:47
  Omri.L Omri.L אינו מחובר  
 
חבר מתאריך: 21.01.05
הודעות: 418
עם כל הכבוד
בתגובה להודעה מספר 22 שנכתבה על ידי שימי שמתחילה ב "זה בגלל ה GET שלך..."

השיטה הזאת לא נכונה. מה ההבדל אם אני אשלח את זה ב-POST או ב-GET? זה יוצא אותו מספר שאני שולף מהמסד.

כרגע שברתי את הראש והצלחתי. אני לא יודע מה הבעיות עם ה-INT במסד. אבל ראיתי שהמספר שהוא מכניס הוא ממש לא אותו מספר שאני מבקש ממנו להכניס. הוא כל הזמן הכניס מספר קבוע של ID. וזאת לא שום בעיה בסקריפט. שיניתי ב-mysql את הסוג של השדה ל-TEXT והופה. הכל הסתדר.

עם:
קוד PHP:
 $selected_id $_GET['id'];
$query mysql_query("SELECT * FROM poll_votes WHERE ip = '$REMOTE_ADDR' AND id = '$selected_id'") or die("Problem sending query to MySQL. MySQL Said: ".mysql_error());
    while(@(
$row mysql_fetch_array($query))) {
     
$ip $row["ip"];
     
$ida $row["id"];
     print 
"IP selected: \"$ip\" AND the poll's id is \"$ida\"...<br/>";
    }
if(
mysql_num_rows($query) > 0) {
     print 
"לא ניתן להצביע פעמיים!";
     exit;
    } 

הוספתי שם תוספת שעזרה לי לבדוק מה הבעיה.. תודה על כל העזרה בכל האשכול הארוך הזה!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 08:43

הדף נוצר ב 0.09 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר