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

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



  #1  
ישן 03-06-2007, 23:13
  dardevil dardevil אינו מחובר  
 
חבר מתאריך: 12.08.05
הודעות: 883
בעיה בשילוב ajax, php וmysql

ערב טוב.
אני ניסיתי לבנות עמוד שיאפשר לי למחוק שדות ממסד הנתונים לפי שפה.
לכן יצרתי שני טפסים, טופס אחד לבחירת השפה וטופס אחד לסימון השדות למחיקה.
הטופס לבחירת השפה משתמש בטכנולוגיית ajax כדי שברגע שתיבחר השפה הרצויה, השדות עם הנתונים יתחלפו.
הטופס הראשון נראה כך:
קוד:
<form name="form2"> <select name="lang" onchange="showLang(this.value)"> <option value="english">$english</option> <option value="hebrew">$hebrew</option> <option value="russian">$russian</option> <option value="georgian">$georgian</option> </select> </form>

ובקובץ הjs של הajax הפנתי את הנתונים לדף getlang.php ששם נמצא הטופס השני ובו האפשרות למחוק.
הדף getlang.php נראה כך:
קוד PHP:
<?php
     
include ("connect.php");
    include (
"lang_admin.php");
    include (
"menu.php");
$n_lang $_GET["q"];
 if(isset(
$_REQUEST["seen_already"])){
 
$query mysql_query("SELECT * FROM sell WHERE lang='$n_lang'");
 while(
$result mysql_fetch_array($query)) {
    
$id $result['id'];
    if(isset(
$_REQUEST["$id"])){
    if(
$_REQUEST["$id"] == "p") {
     
$result mysql_query("DELETE FROM sell WHERE id=$id") or die("Query failes: " mysql_error());
    } } 
   }
  }
echo <<<END
<form name="form1" action="getlang.php" method="post" onsubmit="return CheckForm();">
<table bgcolor='#ffffff' align='center' border='1' cellpadding='4' cellspacing='1' width='100%'>
END;
 
$query mysql_query("SELECT * FROM sell WHERE lang='$n_lang'");
 while(
$result mysql_fetch_array($query)) {
 
$id $result['id'];
 
$name $result['name'];
 echo 
'<tr><td width="4%" valign="center"><INPUT TYPE="CHECKBOX" NAME="'$id'" Value="p">'$name'</td></tr>';
 }
echo <<<END
<table>
<center><input type="submit" value="send" name="B1"></center>
<input TYPE=HIDDEN NAME='seen_already' VALUE='hidden_data'>
</form>
END;
mysql_close($connection);
?>

אבל זה לא עובד... זה לא מוחק לי את השדות שאני מסמן.
חשוב לציין, לפני שהשתמשתי בajax ועשיתי את בחירת השפה ע"י קישורים רגילים הכל עבד פיקס.
אני חושב שהבעיה מתחילה מזה שאני לא ממש יודע לאן להפנות את הטופס שנמצא בתוך הgetlang.php, לעמוד עם הטופס של הajax או לעמוד getlang.php...
אני ממש אשמח אם תכוונו אותי.
אגב, אם אתם רואים שגיאות בקוד אנא דווחו לי.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 04-06-2007, 01:56
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 1 שנכתבה על ידי dardevil שמתחילה ב "בעיה בשילוב ajax, php וmysql"

אתה צריך לעשות הפרדה בין צד שרת לצד לקוח.

בא ננסה לתאר את התהליך.
1. הלקוח מגיש בקשת GET
2. השרת מטפל בבקשה ומחזיר ללקוח טופס עם קוד html/js המכיל את הרשומות והמזהים (id) שלהם.
3. הלקוח מסמן את הרשומות שעליהן הוא רוצה לבצע את הפעולה ולוחץ כל כפתור שישלח את הנתונים לשרת (ולא משנה אם זה באמצעות ajax או שהטופס נשלח בצורה הפשוטה ביותר והדף מבצע רענון).
4. הקוד בצד השרת מטפל בבקשה החדשה, ובהתאם לנתוני ה-GET/POST שהתקבלו הוא מבצע את הפעולות הנדרשות. סביר להניח שבסיומן הוא ישלח חזרה "משוב" (לרוב זה יהיה קוד html, ובעת שימוש ב-ajax זה בהרבה מקרים יהיה קוד xml).

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

במבט מרפרף על תיאור הבעיה, נראה כי הבעיה בצד השרת בשלב של ביצוע הפעולות שהלקוח בחר בהן.
לכן, ראשית תוודא שהנתונים שהלקוח בחר באמת נשלחו לשרת, תנסה "להדפיס" את כל נתוני ה-GET וה-POST כדי לראות האם באמת מה שסימנת בצד הלקוח הוא שהתקבל בשרת.
לאחר שתוודא שבאמת נשלחו הנתונים הנכונים, תבדוק מדוע הפעולה בצד השרת לא מתבצעת כמצופה (וזה כמובן שייך כבר לטיפול ולפורום העוסק בצד השרת).
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 04-06-2007, 20:48
  dardevil dardevil אינו מחובר  
 
חבר מתאריך: 12.08.05
הודעות: 883
בתגובה להודעה מספר 2 שנכתבה על ידי ישראל K שמתחילה ב "אתה צריך לעשות הפרדה בין צד..."

שלום ישראל.
אני ממש שמח לראות שאתה מגיב להודעותיי.
אז ככה:
כאשר אני מפריד את שני הקבצים(getlang.php וdelete.php) ובודק כל קובץ בנרד הכל עובד.
לכן אני סובר שהבעיה היא בטופס עצמו וה"actoin" שלו.
כדי שתבין יותר טוב מה הולך אצלי בקוד אני אדביק לך פה את תוכן שני הקבצים ואז אתן לך הסבר קצר.
הקובץ delete.php הוא הקובץ שבו נבחרת השפה וזה גם הקובץ שמופיעה בו טבלת הנתונים המתקבלת מהמסד.
זה הטופס הנמצא בקובץ delete.php:
קוד:
<form name="form1"> <select name="lang" onchange="showLang(this.value)"> <option value="english">$english</option> <option value="hebrew">$hebrew</option> <option value="russian">$russian</option> <option value="georgian">$georgian</option> </select> </form> <div id="txtHint"><b>אנא בחר שפה.</b></div>

הטופס הזה שולח את השפה שהתקבלה לקובץ getlang.php ע"י טכנולוגיית ajax(אם תרצה לראות את קובץ הajax הגב לי ואני אתן לך את התוכן) לתוך המשתנה q.
אני בטוח שהבעיה היא לא בקובץ ajax, מכיוון שלפני כמה דקות מחקתי את כל התוכן שבקובץ getlang.php וניסיתי להציג את המשתנה q ע"י הקוד:
קוד PHP:
 echo $_REQUEST["q"]; 

השפה שבחרתי בטופס הראשון(form1) הופיעה לי כאשר הייתי בקובץ delete.php וזה בעצם מה שרציתי.
הבעיה מתחילה כאשר אני יוצר עוד טופס אבל שנמצא בתוך הקובץ getlang.php.
כך נראה הקובץ getlang.php(הקובץ שקולט את המשתנה מטופס מספר 1 ומציג לפי הערך שהתקבל את הנתונים מהמסד):
קוד PHP:
<?php
     
include ("connect.php");
    include (
"lang_admin.php");
    include (
"menu.php");
 echo 
$_REQUEST["q"];
 
$n_lang $_REQUEST["q"];
 if(isset(
$_REQUEST["seen_already"])){
 
$query mysql_query("SELECT * FROM sell WHERE lang='$n_lang'");
 while(
$result mysql_fetch_array($query)) {
    
$id $result['id'];
    if(isset(
$_REQUEST["$id"])){
    if(
$_REQUEST["$id"] == "p") {
    echo 
$id;
     
//$result = mysql_query("DELETE FROM sell WHERE id=$id") or die("Query failes: " . mysql_error());
    
} } 
   }
  }
echo <<<END
<form name="form2" action="sell_delete.php" method="post" onsubmit="return CheckForm();">
<table bgcolor='#ffffff' align='center' border='1' cellpadding='4' cellspacing='1' width='100%'>
END;
 
$query mysql_query("SELECT * FROM sell WHERE lang='$n_lang'");
 while(
$result mysql_fetch_array($query)) {
 
$id $result['id'];
 
$name $result['name'];
 echo 
'<tr><td width="4%" valign="center"><INPUT TYPE="CHECKBOX" NAME="'$id'" Value="p">'$name'</td></tr>';
 }
echo <<<END
<table>
<center><input type="submit" value="send" name="B1"></center>
<input TYPE=HIDDEN NAME='seen_already' VALUE='hidden_data'>
</form>
END;
mysql_close($connection);
?>

אם תשים לב, כרגע ביטלתי את הפקודה שמוחקת מהמסד כי זה לא מה שרלוונטי, השארתי רק פקודה שתציג את הנתונים שהתקבלו.
כאשר אני מגדיר שה"actoin" של הטופס השני(זה שנמצא בקובץ getlang.php) יפנה לעמוד delete.php לא קורה שום דבר והעמוד delete.php לא משתנה.
כאשר אני מגדיר שה"actoin" יפנה לעמוד getlang.php הוא מעביר אותי לעמוד getlang.php ולא רשום בו כלום.
כדי לבדוק אם יש לי בעיה בקובץ getlang.php הוספתי בתחילת הקוד את השורה הבאה:
קוד PHP:
 $_REQUEST["q"] = "english"

ונכנסתי ישירות לקובץ getlang.php ללא ההפניה של הקובץ delete.php כאשר ה"action" של הטופס מופנה לעמוד getlang.php באמת השדות שאני מסמן מוצגות לי!
לכן אני בטוח שהבעיה היא בפקודה action, שהיא בעצם הפקודה שאמורה לחבר בין העמוד getlang.php לעמוד delete.php.
אני מצטער שכתבתי והרבה ויכול להיות שזה יכביד עלייך לכן אני מודה לך מעכשיו על כך המאמצים שאתה משקיע בשבילי.
שירבו כמותך בישראל.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.03 שניות עם 12 שאילתות

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

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