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

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



  #1  
ישן 03-07-2009, 06:37
  משתמש זכר 007 אקדח בהכחשה 007 אקדח בהכחשה אינו מחובר  
 
חבר מתאריך: 21.01.09
הודעות: 67
בעיה שמשגעת אותי בקשר לmysql

אהלן,

לא מזמן התחלתי לתכנת בPHP ועדיין לא עבדתי עם PHP וmysql ביחד.
גם כשרציתי היום לנסות לעבוד עם שניהם ביחד, לא הצלחתי.

חשוב לציין שאני מאוחסן על שרת- לא המחשב שלי- שרת של חברת איחסון שמותקן עליו PHP וMySQL [אני יודע את זה כי הצלחתי להתקין מערכת vbulletin שדורשת את שני הדברים האלו]
בהתחלה לא הצלחתי להתחבר למסד, אבל נדמה לי שעכשיו הצלחתי כי הוא לא זורק על זה שגיאה, אבל אני לא מצליח להכניס/לשלוף/ליצור או שום דבר אחד, כלומר שאני לא מצליח לעשות שום דבר אחרי ההתחברות, כל פעם שאני מנסה משהו הוא נותן לי דף לבן ריק.

הנה הקוד של ההתחברות:
קוד PHP:
<?php
$link 
mysql_connect('localhost:3307''nettinfo_or''mypassword');
if (!
$link) {
    die(
'Could not connect: ' mysql_error());
}
echo 
'Connected successfully, ';

$db_selected mysql_select_db('nettinfo_or'$link);
if (!
$db_selected) {
    die (
'Can\'t use Database : ' mysql_error());
}
echo(
"great!")

?>


מישהו בבקשה יכול לצרף לי לי פקודה שתשלוף נתונים ותציג אותם על הדף?
נתונים מהטבלה costumers ומשני השדות-
city ו- name

וכמובן לא באתי לכאן בשביל שתעשו לי את העבודה- אז בבקשה: מישהו מוכן ללמד אותי איך עושים את זה?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 03-07-2009, 11:04
  Sagilevi Sagilevi אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 1,277
בתגובה להודעה מספר 5 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "אמממ.. הטעות בכתיב היא שגיאה..."

מערך הוא אוסף פריטים שניתן לגשת אליהם בצורה ישירה באמצעות אינדקס (ויקיפדיה).
ב-PHP אתה יוצא מערך ריק ככה:
קוד PHP:
 $toprint = array(); 

ואתה מכניס ערכים למערך ככה:
קוד PHP:
 $toprint[] = 'first'$toprint[] = 'second'

אם המערך לא קיים, PHP יבנה אחד אוטומטית.

ברירת המחדל לשדה מציינת איזה ערך יהיה בו אם תכניס שורה ולא תכניס ערך לשדה הזה.
במילים אחרות - זה לא אמור להדפיס לך את ערך הברירת מחדל. אתה צריך שיהיו שורות בטבלה.
תנסה להכניס את הקוד הבא כדי לראות אם יש שורות:
קוד PHP:
 if (!mysql_num_rows($result)) {
  echo 
'no rows';



אתה מכניס ערכים עם שאילתה של Insert. תקרא מדריך בסיסי לעבודה עם MySQL.
אתה גם יכול להוריד את phpMyAdmin כדי לעבוד עם המסד נתונים בצורה קלה יותר.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 03-07-2009, 11:32
  Sagilevi Sagilevi אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 1,277
בתגובה להודעה מספר 8 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "הצלחתי לקלוט את העיניין לבד..."

בהגדרה המקורית, מערך זה אוסף של ערכים מסוג מסוים (למשל, int).
הערכים נמצאים בזיכרון צמוד אחד לשני,
כאשר האינדקס של האיבר הראשון במערך הוא אפס.
אתה יכול לגשת לערך מסוים במערך בפקודה אחת בלבד.
אם תרצה להדפיס את הערך השני במערך ששמו a, תכתוב:
קוד PHP:
 echo $a[1]; 

יש לך גם אפשרות להדפיס את כל הערכים במערך:
קוד PHP:
 $size count($a);
for (
$i 0$i $size; ++$i) {
  echo 
$a[$i];



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

נערך לאחרונה ע"י Sagilevi בתאריך 03-07-2009 בשעה 11:35.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #22  
ישן 04-07-2009, 11:59
  Sagilevi Sagilevi אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 1,277
בתגובה להודעה מספר 21 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "תודה רבה לכם חבר'ה! זה בידיוק..."

כמה הצעות לשיפור:

1. אתה לא צריך טבלה שלמה להגדרה אחת באתר. יותר הגיוני
ליצור טבלה שנקראת settings, שבה אחת העמודות תהיה lockdown.
סוג העמודה הוא tinyint באורך של מספר אחד (ולא varchar למשל).
2. אם עשית בדיקה לגבי הערך במשתנה, אתה יכול ישר להציב את הערך.
3. אתה יכול להמיר את המשתנה למספר ולחסוך בדיקה נוספת.
בכל מקרה זה משהו שכדאי לעשות לפני שאתה מכניס מספר לשאילתה.
בנוסף, אתה יכול לחסוך משתנים אם אין צורך בהם.
4. אתה לא צריך הפניה לחיבור מסד נתונים, ב-mysql_query,
אם יש לך רק חיבור אחד פתוח.

במקרה הזה אני לא רואה בעיית אבטחה אבל כדאי להתרגל לכתוב נכון.

הקוד החדש, אם תרצה להשתמש בו:
קוד PHP:
 mysql_query("UPDATE `settings` SET `lockdown` = " . (int)$_POST['lockdown']); 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #24  
ישן 05-07-2009, 11:27
  Sagilevi Sagilevi אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 1,277
בתגובה להודעה מספר 23 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "הבנתי בלחץ סעיף אחד ממה..."

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

1. אני חושב שאין צורך ליצור טבלה שלמה בשביל הגדרה אחת.
בסה"כ ההגדרה האם האתר נעול או לא, זאת הגדרה אחת מתוך אוסף
ההגדרות באתר שלך. כדאי שכל ההגדרות יהיו בטבלה אחת - settings.
בקשר לשורה האחרונה, ל-MySQL יש טיפוסי נתונים שונים, שכל אחד מהם
מתאים לסוג אחר של נתון (מספר, מחרוזת וכו'). במקרה שלך אתה צריך מספר
שאורכו אחד (כי הוא מכיל 1 או 0, לא יכול להכיל 15 למשל). הטיפוס שמתאים
במקרה הזה הוא tinyint. המשך קריאה: MySQL Data Types (האתר הרשמי).
2. מה שהתכוונתי, זה שאם יש לך את משתנה, ובדקת שערכו הוא 1 (בשורה הראשונה)
אתה לא צריך בשורה השניה לכתוב שוב את המשתנה, אתה יכול
ישר לכתוב את הערך שלו - 1. אותו דבר גם בשורה השניה.
3. המרה למספר אתה עושה בעזרת (int) וזה הופך לך מחרוזת עם מספר,
כמו למשל "1", לטיפוס המספר, למשל: 1. ככה אם המשתמש הכניס "1",
האתר ינעל. כל ערך אחר - האתר לא ינעל. אתה חוסך כאן בדיקות.
הסבר על ההמרה: PHP type casting (האתר הרשמי).
4. אני מקווה שזה הסעיף שהבנת. תקרא פה אם לא: mysql_query.
הציטוט הוא:
ציטוט:
If the link identifier is not specified, the last link opened by mysql_connect() is assumed.


בהצלחה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #26  
ישן 05-07-2009, 12:58
  Sagilevi Sagilevi אינו מחובר  
 
חבר מתאריך: 07.10.04
הודעות: 1,277
בתגובה להודעה מספר 25 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "תודה רבה שגיא! עכשיו הבנתי..."

3. אולי יעזור לך להבין, שכל קלט שאתה מקבל מהמשתמש הוא מחרוזת.
כל משתנה ב-post או get הוא מחרוזת. הלקוח שולח רק מחרוזות,
ובאותה מידה שהוא יכול לשלוח את המחרוזת "טקסט", הוא יכול גם לשלוח
את המחרוזת "1". אבל אתה מצפה למספר, ולכן יש דרך להמיר את המחרוזת "1"
למספר 1. למה זה טוב?
א. אם אתה רוצה לחבר שני מספרים. כידוע אי אפשר "לחבר" מחרוזות,
אמנם php הוא ימיר לך לבד את המחרוזות למספר, אבל בשפות אחרות
זה יעשה פעולה שנקראת "שרשור" (ב-php מסומן ע"י נקודה, ולא ע"י חיבור).
כלומר, אם תחבר מחרוזת "1" עם מחרוזת "1" תקבל "11" ולא 2 כמו שציפית.
ב. במחרוזת יכולים להופיע תווים "מסוכנים" (למשל, שיגרמו ל-SQL Injection),
ואילו במספר לא. לכן אם אתה מצפה למספר - הדרך הכי בטוחה היא להמיר
את המחרוזת למספר, וככה אתה בטוח שאין תווים שמסכנים את התכנית שלך.

בקוד הספציפי הזה, לדעתי, אין בעיות אבטחה. אבל הכתיבה עצמה בעייתית,
ובתכניות אחרות כתיבה כזאת עלולה לגרום לבעיות אבטחה.
בדיוק רשמתי תגובה מפורטת כאן, אתה מוזמן לקרוא:
אבטחת משתנים שמגיעים באמצעות GET.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #30  
ישן 06-07-2009, 19:23
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 29 שנכתבה על ידי 007 אקדח בהכחשה שמתחילה ב "קראתי קצת על הזרקות, יש לי..."

אולי הם יעזרו, לא יודע, תגיד לי אתה?

הנושא של אבטחה תלוי בלאן המידע הזה יגיע ומי ירנדר אותו ואיך (לפי איזה פורמט של מידע?).

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

לגבי is_numeric, זאת פונקציה שבודקת האם ערך מסוים (בדר"כ בתוך מחרוזת) הוא מסוג מספר. זה כולל גם מספרים מהסוג הזה: 12E-5, שזה נחשב מספר תקין. אם אתה חושב שזה יכול לעזור לך בשיפור האבטחה, אז תשתמש בזה.
אני לא משתמש בפונקציה הזאת, אלא ממיר ישירות ל-int (או float, שוב זה תלוי במקרה):

קוד PHP:
 $data_type 'hello';
$data_type = (int)$data_type# Now $data_type is not a string, but an integer 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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