הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   כמה שאלות עם שימוש בטבלאות (https://hosts.co.il/forums/showthread.php?t=72633)

SniR-S 13-03-09 13:44

כמה שאלות עם שימוש בטבלאות
 
אוקי, נגיד שיש לי טבלה שנקראת users
בטבלה הזו רשומים כל שמות המשתמשים+סיסמא וid
נניח שאני יצרתי עוד טבלה של הודעות וקראתי לה posts, בה יהיו כל ההודעות
של המשתמשים..

איך אני יכול לדעת שההודעה x שייכת למשתמש y?

daMn 13-03-09 13:52

בטבלה posts אתה מוסיף עמודה של ששומרת את הID של המשתמש ששלח את את ההודעה, נקרא לה נניח author_id, ואז בעיקרון בשליפה אתה פשוט מוציא את הID דרך העמודה הזאת ומשתמש בה כאוות נפשך :]

SniR-S 13-03-09 14:12

אוקי, נניח יש לי את post_id (מספר ההודעה)
poster_id (מספר המפרסם)
topic_id (אשכול ההודעה)
cat_id (קטגוריית האשכול)

איך אני יכול להכניס לתוך העמודה poster_id את הid של מפרסם ההודעה? הרי בהתחברות מכניסים שם משתמש+סיסמא.
איך אפשר לבדוק לאיזה id מתאים שם המשתמש המחובר על הסשיין?

דבר שני, איך אני יכול לקשר את ההודעה לנושא/אשכול מסויים?
והקטגורייה זה כבר לא בעיה כי זה אותו עיקרון כמו הנושא.

tbm 13-03-09 14:24

1.את בודק מה הID שלן לפי העוגיות ששמרת אצלו בעם הטבלה של המשתמשים ושולף את הID שלו
2.אותו דבר בדיוק אתה נותן את הID של הנושא בעמודה בהודעה

Shon12 13-03-09 14:33

ציטוט:

נכתב במקור על ידי Snir Shamka (פרסם 702793)
אוקי, נניח יש לי את post_id (מספר ההודעה)
poster_id (מספר המפרסם)
topic_id (אשכול ההודעה)
cat_id (קטגוריית האשכול)

איך אני יכול להכניס לתוך העמודה poster_id את הid של מפרסם ההודעה? הרי בהתחברות מכניסים שם משתמש+סיסמא.
איך אפשר לבדוק לאיזה id מתאים שם המשתמש המחובר על הסשיין?

דבר שני, איך אני יכול לקשר את ההודעה לנושא/אשכול מסויים?
והקטגורייה זה כבר לא בעיה כי זה אותו עיקרון כמו הנושא.

כשאתה שומר את ההודעה אתה שומר ביחד איתה את מספר הנושא, למשל:
PHP קוד:

postid=21349 


SniR-S 13-03-09 15:47

שון לא הבנתי אותך בכלל, אבל זה ניראה לי קצת פחות בעייתי..
שוב פעם(tbm לא הבנת אותי), איך אני יכול למצוא id ע"פי שם משתמש?
איזה פונקציה לוקחת את השם משתמש ומחפשת במסד איזה id שייך אליו ומדפיסה לי אותו?

tbm 13-03-09 15:51

נגיד ויש לך את השם משתמש של מי שכרגע שולח את ההודעה דרך COOKIE SESSION או כל דרך אחרת
אתה עושה שאילתה במסד select id from user where username='$username'
ומוציא את הID של המשתמש

SniR-S 13-03-09 18:19

PHP קוד:

    $query mysql_query("SELECT id FROM users WHERE user = '$user'");
    
$result mysql_fetch_array($query);
echo 
$result['user']; 

לא עובד.

Tomer 13-03-09 22:36

ציטוט:

נכתב במקור על ידי Snir Shamka (פרסם 702858)
PHP קוד:

    $query mysql_query("SELECT id FROM users WHERE user = '$user'");
    
$result mysql_fetch_array($query);
echo 
$result['user']; 

לא עובד.

אתה מבקש את id ומדפיס את user.

SniR-S 14-03-09 09:39

בטעות..הדפסתי id
עדיין לא מדפיס לי כלום.

Regev 14-03-09 10:05

PHP קוד:

$id mysql_query("SELECT ID AS id FROM user where username='$user'");
$id mysql_fetch_assoc($id);
$id $id["id"]; 

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

SniR-S 14-03-09 10:56

אוקי, אני הצלחתי לעשות את זה וזה עובד:
PHP קוד:

    $query mysql_query("SELECT id FROM users WHERE user = '$user' ");
    
$result mysql_fetch_array($query);
echo 
$result['id']; 

זה עובד אבל רק בפונקציה של ההתחברות, בפונקציה התחברות יש לי ככה:
PHP קוד:

$user $_POST['user']; //מה שמתקבל בפוסט
//ואז לאחר הבדיקה שאם הכל תקין שם משתמש + סיסמא הוא מתחבר והוא מכניס את השם משתמש שהוכנס בפוסט אל תוך סשיין
$_SESSION['username'] = $user

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


עכשיו אם המשתמש מחובר ואני רוצה לשים את זה מחוץ לפונקציה של ההתחברות אני עושה כזה דבר:
PHP קוד:

$_SESSION['username'] = $user;
    
$query mysql_query("SELECT id FROM users WHERE user = '$user' ");
    
$result mysql_fetch_array($query);
echo 
$result['id']; 

הסשיין של השם משתמש שהוכנס עדיין קיים על הדפדפן, ולכן אני יכול להדפיס אותו בכל מקום, אך משום מה זה לא עובד \-:

Hezi & BomBas 14-03-09 11:08

מה הערך של user? ולא יותר פשוט וקל לעבוד עם COOKIES?

SniR-S 14-03-09 11:23

זה לא משנה, אני צריך להבין את העיקרון.
הערך של user הוא מה שמתקבל בפוסט..
PHP קוד:

$user $_POST['user']; 

בפונקציה התחברות.

Hezi & BomBas 14-03-09 11:31

אוקיי, אתה טוען שהמשתמש התחבר כבר.. אז למה אתה מחפש ערכים ע"פ הערך שהוא הכניס בפוסט? הרי הוא כבר התחבר, ה SESSION קיים אצלו.
PHP קוד:

    $query mysql_query("SELECT id FROM users WHERE user = '"$_SESSION['username']. "'");
    
$result mysql_fetch_array($query);
echo 
$result['id']; 


Regev 14-03-09 11:40

יש לך 3 ערכים
PHP קוד:

$_POST["user"]
$user
$_SESSION
["user"

למה אתה לא מציב יש את
PHP קוד:

$_POST["user"

בתוך הסשין?
הרבה יותר פשוט וזה חוסך....

Hezi & BomBas 14-03-09 11:45

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

דבר שני, במה זה חוסך? -_-

SniR-S 14-03-09 11:50

חזי, הצלחת לעזור לי והגעתי בעזרתך למטרה שלי.
אבל למה זה לא עובד כשאני עושה ככה:
PHP קוד:

$_SESSION['username'] = $user
    
$query mysql_query("SELECT id FROM users WHERE user = '$user' "); 
    
$result mysql_fetch_array($query); 
echo 
$result['id']; 

?

אגב רגב, אני יעשה את זה.

tbm 14-03-09 13:09

שים לב לשורה הבאה
קוד:


$_SESSION['username'] = $user;

מה שעשית זה הצבת את user בסשין זה צריך להעשות הפוך
קוד:


$user=$_SESSION['username'];


Hezi & BomBas 14-03-09 13:24

ציטוט:

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

$_SESSION['username'] = $user
    
$query mysql_query("SELECT id FROM users WHERE user = '$user' "); 
    
$result mysql_fetch_array($query); 
echo 
$result['id']; 

?

אגב רגב, אני יעשה את זה.

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

אגב , קוראים לי ליאור.. :-)

SniR-S 14-03-09 13:24

צודק tbm, תודה עזרת לי.
אבל משום מה בקובץ MyAccunt.php התחלתי פתאום לקבל שגיאות header
PHP קוד:

Warningsession_start() [function.session-start]: Cannot send session cache limiter headers already sent (output started at /home/---/domains/---.co.il/public_html/random/MyAccount.php:1in /home/---/domains/---.co.il/public_html/random/header.php on line 2 

אני מקבל שגיאה כאילו יש משו מעל ה session_start(); (ואין כלום).
זה מה שיש בקובץ header.php
PHP קוד:

<?php
session_start
();
include(
'config.php');
include(
'functions.php');
?>

ובקובץ MyAccunt.php עשיתי include ל header.php.
אגב לכל הקבצים יש include ל herader.php
אבל השגיאה מופיעה רק בקובץ MyAccunt.php

Hezi & BomBas 14-03-09 13:30

נסה להשתמש בפונקציות ob_start(); [תחילת הקובץ] ו ob_end_flush(); [סוף הקובץ] בתחילת הקובץ ובסופו. (בקובץ שאתה מקבל את השגיאה)

SniR-S 14-03-09 13:59

*עריכה:
הצלחתי לפתור את הבעיה, פשוט כניראה העורך של ה flashfxp הוסיף לי רווחים לפני ה <?php
ולכן זה מה שקרה !

בכל מקרה, אם אי פעם למישהו יקרה גם כזה דבר אז פשוט שיבדוק אם נוסף לו רווחים לאחר השמירה באותו
הקובץ לפני התג פתיחה <?php

תודה על העזרה !

Hezi & BomBas 14-03-09 14:01

אתה יכול להביא את הקוד של הקובץ MyAccount? כי נראה שה OUTPUT נשלח שם.

SniR-S 15-03-09 14:52

יש לי עוד שאלה (אני שואל כאן במקום לפתוח עוד אשכול).
PHP קוד:

if ($_GET['update'] == "$id") {
    
$icq $_POST['icq'];
    
mysql_query("UPDATE random_users SET icq = '$icq' WHERE id = $id ");
    echo 
'<b><span style="color: red;">המשתמש עודכן בהצלחה!</span></b>';
    echo 
'<meta http-equiv="refresh" content="2;url=editsmambers.php" />';


מדוע הקוד הזה לא פועל? הוא בודק איזה id יש בכתובת (update=$id)
ואז הוא מעדכן את אותו ה id..
כאשר אני שם במקום ה $id 11 לדוגמא (ה-id שלי) הוא מעדכן את הערך בשדה icq
זאת אומרת שאם אני מחליף את ה-$id למספר id שקיים במסד הכל עובד תקין.
ולכן לפי דעתי יש פה בעיה מוזרה איתם \-:

Hezi & BomBas 15-03-09 19:27

הגדרת את המשתנה id ?

SniR-S 15-03-09 19:43

גם כן, הגדרתי אותו.
PHP קוד:

  $id $_GET['id']; 


Hezi & BomBas 15-03-09 19:44

PHP קוד:

if ($_GET['update'] == $id) { 

תחליף את ה IF הנוכחי שלך בזה.

SniR-S 15-03-09 19:48

החלפתי, הינה הקוד המלא:
PHP קוד:

if ($_GET['update'] == $id) {
  
$id $_GET['id'];
    
$icq $_POST['icq'];
    
mysql_query("UPDATE random_users SET icq = '$icq' WHERE id = $id ");
    echo 
'<b><span style="color: red;">המשתמש עודכן בהצלחה!</span></b>';
    echo 
'<meta http-equiv="refresh" content="2;url=editsmambers.php" />';



Hezi & BomBas 15-03-09 19:58

אתה לא יכול להגדיר את $id אחרי שאתה משתמש בו... תגדיר אותו לפני ה IF שלך.

intercooler3819 15-03-09 22:59

תסיר את הסוגרים של הPHP
כלומר את ה ?> בכל הקבצים

בנוסף תמחק כל דבר שבא לפני ה <?php ותוודא שאתה שומר ללא BOM (תריץ חיפוש בגוגל HOW TO SAVE WITHOUT BOM)

SniR-S 16-03-09 17:55

ציטוט:

נכתב במקור על ידי Hezi & BomBas (פרסם 703286)
אתה לא יכול להגדיר את $id אחרי שאתה משתמש בו... תגדיר אותו לפני ה IF שלך.

גם כשאני מגדיר מעל..
אגב, הוא מביא לי את השגיאה הזו [הקובץ]:
PHP קוד:

Warningmysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/---/domains/---.co.il/public_html/random/Admin/editsmambers.php on line 11 

כאשר אני נכנס לכתובת הזו:
editsmambers.php?id=$id
אז אין את השגיאה, רק אם אני נכנס לקובץ רגיל..

הינה החלק העליון מתוך הקובץ.
PHP קוד:

<?php
include $_SERVER['DOCUMENT_ROOT']."/random/header.php";

if (
$_SESSION['login'] == 1) {
nav_bar_admin();

if (
$_SESSION['admin'] == 1) {
if (
$_GET['id'] == $id) {
  
$id $_GET['id'];
    
$query mysql_query("SELECT * FROM users WHERE id = $id ");
    
$result mysql_fetch_array($query);
$user $result['user'];
$icq $result['icq'];
echo 
"
<form action=\"editsmambers.php?update=$id\" method=\"post\">
<input type='text' value='$user' size='30' name='user'>
<input type='text' value='$icq' size='30' name='icq'>
<input type='submit' value='עדכן' name='submit'>
</form>
"
;
}

  
$id $_GET['id'];
if (
$_GET['update'] == $id) {
    
$icq $_POST['icq'];
    
mysql_query("UPDATE users SET icq = '$icq' WHERE id = $id ");
    echo 
'<b><span style="color: red;">המשתמש עודכן בהצלחה!</span></b>';
    echo 
'<meta http-equiv="refresh" content="2;url=editsmambers.php" />';
}

השגיאה שהוא נותן לי היא בעצם בשורה הזו:
PHP קוד:

    $result mysql_fetch_array($query); 


Xlib 16-03-09 19:52

קודם כל, תעשה תמיד isset לקלט.
PHP קוד:

if (isset($_GET['id']) { ... } 

דבר שני, הבעייה שלך לדעתי היא תקינות השאילתה. נסה לשרשר את $id נכון.

Hezi & BomBas 16-03-09 21:14

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 703333)
תסיר את הסוגרים של הPHP
כלומר את ה ?> בכל הקבצים

בנוסף תמחק כל דבר שבא לפני ה <?php ותוודא שאתה שומר ללא BOM (תריץ חיפוש בגוגל HOW TO SAVE WITHOUT BOM)

הוא ייצטרך לעשות את זה אך ורק אם הוא מתעסק עם קידוד UTF-8, אבל זו לא הבעיה שלו כרגע בכלל..

בקשר לבעהי שלך, כמו שזה שמעליי אמר - אתה לא משרשר את ה $id נכון (אתה לא משרשר אותו בכלל, MYSQL מפרש אותו כשדה)

PHP קוד:

 $query mysql_query("SELECT * FROM users WHERE id = '"$id"'"); 


SniR-S 16-03-09 22:12

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

Hezi & BomBas 17-03-09 15:53

תעשה אותו דבר גם בשאילתה השנייה של העדכון...

SniR-S 17-03-09 16:40

בשניהם עשיתי, לא מעדכן.

Hezi & BomBas 17-03-09 21:06

PHP קוד:

if ($_GET['id'] == $id) { 

אתה לא הגדרת את $id לפני התנאי הזה...

SniR-S 18-03-09 16:32

גם כן, הינה הקוד:
PHP קוד:

  $id $_GET['id'];
if (isset(
$_GET['id']) == $id) {
    
$query mysql_query("SELECT * FROM random_users WHERE id = ' "$id ." ' ");
    
$result mysql_fetch_array($query);
$user $result['user'];
$icq $result['icq'];
echo 
"
<form action=\"editsmambers.php?update=$id\" method=\"post\">
<input type='text' value='$user' size='30' name='user'>
<input type='text' value='$icq' size='30' name='icq'>
<input type='submit' value='עדכן' name='submit'>
</form>
"
;
}

  
$id $_GET['id'];
if (isset(
$_GET['update']) == $id) {
    
$icq $_POST['icq'];
    
mysql_query("UPDATE random_users SET icq = '$icq' WHERE id = ' "$id ." ' ");
    echo 
'<b><span style="color: red;">המשתמש עודכן בהצלחה!</span></b>';
    echo 
'<meta http-equiv="refresh" content="2;url=editsmambers.php" />';



Shay Ben Moshe 18-03-09 16:37

תחליף בשורה הזו, מה זה הבלאגן שעשיתם לו שם:
ציטוט:

$query = mysql_query("SELECT * FROM random_users WHERE id = '$id'");
מעבר לזה, אתה יכול לוודא שהid הוא מספרי, תעשה על ידי
ציטוט:

......if (is_numeric($id))
בהצלחה..


כל הזמנים הם GMT +2. הזמן כעת הוא 21:52.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ