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

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



  #1  
ישן 18-02-2006, 16:22
  המחפש המחפש אינו מחובר  
 
חבר מתאריך: 24.11.05
הודעות: 317
בעיה בהכנסת נתונים לתוך מסד נתונים בלולאה

שלום,
יש לי את הקוד הבא:


קוד PHP:
 if($_POST["posted"] != 1) {

$qpage mysql_query("SELECT `type`, `name`, `require` FROM cms_form ORDER BY id ASC") or die(mysql_error()); 
echo 
'<form action="order1.php" method="post">
<input type="hidden" name="posted" value="1">'

echo 
"<table>";
while(
$page mysql_fetch_array($qpageMYSQL_ASSOC)) {
echo 
"<tr><td valign=top>";
printf("%s:",$page["name"]);
if (
$page["require"])
echo 
"<font color=red>*</font>";
echo 
"</td><td>";
switch (
$page["type"])
{
case 
1printf("<input name='%s' size=10>",$page["name"]); break;
case 
2printf("<textarea cols=30 rows=10 name='%s'></textarea>"$page["name"]); break;
case 
3printf("<select size='1' name='%s'>"$page["name"]);
    
$qdownbox mysql_query("SELECT `name` FROM `cms_downbox` WHERE `to`='".$page["name"]."' ORDER BY 'id' ASC");
    while(
$downbox mysql_fetch_assoc($qdownbox)) 
    {
     
printf("<option value='%s'>%s</option>",$downbox["name"],$downbox["name"]);
    }
     echo 
"</select>"; break;
}
echo 
"</td><tr>";
}
echo 
"</table>";
echo 
'<input type="submit" name="submit" value="הזמן תור!">';
echo 
'</form>';
} else {
mysql_query("INSERT INTO cms_data (`id`) VALUES('')") or die(mysql_error());
$qpage2 mysql_query("SELECT `name` FROM cms_form") or die(mysql_error());
while(
$page2 mysql_fetch_array($qpage2MYSQL_ASSOC)) {
$tp=$_POST["$page2[name]"];
mysql_query("INSERT INTO cms_data (`$page2[name]`) VALUES('".$tp."')") or die(mysql_error());
}





בטח כבר הבנתם שבעצם הוא מציג את השדות של הטופס הזמנה דרך לקיחת הפרטים של השדות מהמסד נתונים ועל פי הוא יודע איך להציג את השדה.
אך יש לי בעיה כאשר אני רוצה לשלוח את הפרטים שהכנסו בשדות לטבלה אחרת במסד, אני בעצם לא יכול לעשות ככה $name=$_POST[name]; כי אני לא יודע את שמות השדות כי זה דבר דינאמי שמשתנה על פי התוכן שיש במסד.
לכן עשיתי בצורה שאתם רואים זה עובד בערך, זה שולח רק את מה שהוכנס בשדה האחרון לטבלה לאחר שליחת הטופס.

מה אפשר לעשות כדי לסדר?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 20-02-2006, 17:43
  המחפש המחפש אינו מחובר  
 
חבר מתאריך: 24.11.05
הודעות: 317
בתגובה להודעה מספר 6 שנכתבה על ידי ישראל K שמתחילה ב "נסה להסביר שוב את הבעיה,..."

להלן הקוד בשנית (נקווה שהפעם יהיה מוזח):
קוד PHP:
<?php
require('admin/db.php');
if(
$_POST["posted"] != 1) {
 
$qpage mysql_query("SELECT `type`, `name`, `require` FROM cms_form ORDER BY id ASC") or die(mysql_error());  
 echo 
'<form action="order1.php" method="post">
 <input type="hidden" name="posted" value="1">'

 echo 
"<table>";
 while(
$page mysql_fetch_array($qpageMYSQL_ASSOC)) {
  echo 
"<tr><td valign=top>";
  
printf("%s:",$page["name"]);
  if (
$page["require"])
   echo 
"<font color=red>*</font>";
  echo 
"</td><td>";
  switch (
$page["type"])
  {
   case 
1printf("<input name='%s' size=10>",$page["name"]); break;
   case 
2printf("<textarea cols=30 rows=10 name='%s'></textarea>"$page["name"]); break;
   case 
3printf("<select size='1' name='%s'>"$page["name"]);
    
$qdownbox mysql_query("SELECT `name` FROM `cms_downbox` WHERE `to`='".$page["name"]."' ORDER BY 'id' ASC");
    while(
$downbox mysql_fetch_assoc($qdownbox)) 
    {
      
printf("<option value='%s'>%s</option>",$downbox["name"],$downbox["name"]);
    }
      echo 
"</select>"; break;
  }
  echo 
"</td><tr>";
 }
 echo 
'<tr><td valign=top>תאריך:</td><td><input disabled="true" name="date" size=10><span style="cursor: pointer;" onclick="open_win();">לוח שנה</span></td></tr>';
 echo 
"</table>";
 echo 
'<input type="submit" name="submit" value="הזמן תור!">';
 echo 
'</form>';
} else {
 
mysql_query("INSERT INTO cms_data (`id`) VALUES('')") or die(mysql_error());
 
$qpage2 mysql_query("SELECT `name` FROM cms_form") or die(mysql_error());
 while(
$page2 mysql_fetch_array($qpage2MYSQL_ASSOC)) {
  
$tp=$_POST["$page2[name]"];
  
mysql_query("INSERT INTO cms_data (`$page2[name]`) VALUES('".$tp."')") or die(mysql_error());
  
$bla="INSERT INTO cms_data (`$page2[name]`) VALUES('".$tp."')";
  echo 
$bla."<br>".$tp;
 }
}
?>


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

כיצד ניתן לעשות זאת?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 21-02-2006, 03:49
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 7 שנכתבה על ידי המחפש שמתחילה ב "להלן הקוד בשנית (נקווה שהפעם..."

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

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

הפתרון: תשתמש במערך בשמות השדות.
לדוגמא: נאמר שיש לך מסד המכיל 10 רשומות ובו שדה בשם "הערה" שכמובן קיים גם בטופס המודפס.
לכל שדה בטופס (אובייקט קלט מסוג input) אתה יכול להגדיר מאפיין id ומאפיין name.
היות ומדובר בשדה בשם "הערה" תקרא לכל שדה: note[1], note[2] וכו', המאפיין id לא יכול להכיל את התו '[' או את התו ']' לכן אם יש צורך ב-id תוכל לתת לו שמות כגון note1, note2 וכו', כיון שלצורך הזנת הנתונים ה-id לא צריך להיות מערך, אלא לצורך גישה לאובייקט באמצעות JS מספיק שהוא בעל id יחודי.

כעת מה שנותר לך לעשות בקוד בצד השרת הוא לעבור על המערך $_POST['note'] (אם מדובר כמובן בשליחה בשיטת POST).

דוגמא לקוד ה-HTML:
קוד:
<input type="text" id="note1" name="note[1]" value="שחור בלבד" /> <input type="text" id="note2" name="note[2]" value="חלק ומבריק" /> <input type="text" id="note3" name="note[3]" value="לא למכירה" />

מומלץ שהמספרים השונים יהיו ה-id של הרשומה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 21-02-2006, 16:09
  המחפש המחפש אינו מחובר  
 
חבר מתאריך: 24.11.05
הודעות: 317
בתגובה להודעה מספר 17 שנכתבה על ידי ישראל K שמתחילה ב "על זה בדיוק עניתי"

לא ממש הבנתי,
בכל מקרה אני אנסה להסביר שוב.
יש לי את הבטלה cms_form.
בה יש מספר שדות, id,name, require, type.
name זה שם השדה
require האם שזה זה הוא דרוש למילוי על מנת לשלוח את הטופס.
type סוג השדה, שדה טקסט, שדה טקסט גדול, תיבה נגללת.

ברגע שאני מוסיף שדה דרך הלוח בקרה, אז הוא מתווסף לטבלה עם הid העוקב.

כמו כן, יש לי את הטבלה cms_data.
בה יש גם מספר שדות,, id וכל השדות שהוספו לטופס.

כאילו ברגע שאתה מוסיף שדה לטופס אז מתווסף שדה שלו בטבלה cms_data.
ניתן דוגמא, יש לי את השדות הבאות שהוספתי:
שם מלא (דרוש, סוג: שדה טקסט רגיל)
בחר חבילה (דרוש, סוג: תיבה נגללת)
הערות (לא דרוש, סוג: שדה טקסט גדול)

לכן השדות בטבלה הcms_data יראו ככה:
id, שם מלא, בחר חבילה, הערות

עכשיו, עשיתי לולאה שמדפיסה את כל שמות השדות שהכנסו לטבלה cms_form.
ולידה שזה את סוג השדה שהוכנס (בעזרת switch).
עכשיו, לאחר שכל השדות הודפסו יש כפתור שלח, אני רוצה שזה יכניס מתחת לשדות בטבלה cms_data את הערכים שהוכנסו תחת כל שדה.

מקווה שהייתי מספיק מובן,

תודה מראש.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 21-02-2006, 17:39
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 18 שנכתבה על ידי המחפש שמתחילה ב "[font=Verdana]לא ממש..."

האמת שלא כ"כ הבנתי, אז אתן דוגמא פחות קשורה למבנה הטבלה שלך.

נניח שיש לנו את הטבלה cms_form המכילה את השדות והנתונים הבאים:
קוד:
+----+-------+------+ | id | name | note | +----+-------+------+ | 1 | one | NULL | | 2 | two | NULL | | 3 | three | NULL | | 4 | four | NULL | +----+-------+------+


כדי להדפיס את הטופס אשתמש בקוד הבא:
קוד PHP:
 echo    "
    <form id=\"cms\" method=\"post\" action=\"\">

    <table>
    <tr>
        <th>name</th>
        <th>note</th>
    </tr>
    "
;

$cms_form mysql_query("SELECT * FROM  cms_form");
while(
$cms mysql_fetch_assoc($cms_form))
{
    echo    
"<tr>
            <td>
            <input type=\"text\" id=\"name
{$cms['id']}\" name=\"name[{$cms['id']}]\" value=\"{$cms['name']}\" \>
            </td>

            <td>
            <input type=\"text\" id=\"note
{$cms['id']}\" name=\"note[{$cms['id']}]\" value=\"{$cms['note']}\" \>
            </td>
        </tr>
        "
;
}

echo    
"
    </table>

    <input type=\"submit\" value=\"עדכן נתונים" 
/>
    </
form>
    
"; 

כמו שניתן לראות, מדובר בקוד פשוט ביותר.

וכדי להזין את הנתונים אשתמש בקוד הבא:
קוד PHP:
 if($_SERVER['REQUEST_METHOD'] == 'POST')
    foreach(
$_POST['name'] as $key => $val)
        
mysql_query("UPDATE cms_form SET name='{$_POST['name'][$key]}', note='{$_POST['note'][$key]}' WHERE id=$key"); 

גם פשוט יחסית, רק תנסה לקרוא את הקוד לאט ולהבין מה עושה בדיוק כל ערך וכל משתנה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #24  
ישן 23-02-2006, 22:06
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 22 שנכתבה על ידי המחפש שמתחילה ב "לא ממש הבנתי, תוכל להראות לי..."

טוב, אני מנסה שוב (אני עדיין שתקווה שזה יציליח)
יש לך דף דינאמי עם שדות דינאמיים, בשביל לבצע שאילתה נכונה אתה קודם כל צריך לדעת איזה טופס שלחת, עכשיו זה דיי פשוט, הדבר הראשון שחשבתי עליו זה להוסיף שדה חבוי שיכיל את סוג הטופס, ואחר-כך שתעבור עם זה ב-switch, הרעיון היותר יעיל, ושאני יותר אהבתי הוא הרעיון של ישראל k, מה שהוא עשה זה הפך את post למערך דו-מימדי ע"י הכנסת מערך בתוך הערך של post כך שהמימד הראשון הוא השם שהצבתה ב-post והמימד השני מכיל את סוג הטופס, ולפי זה הוא עשה לולאה שבתוכה יש את השאילתה:
קוד PHP:
 if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    foreach(
$_POST['name'] as $key => $val)
        
mysql_query("UPDATE cms_form SET name='{$_POST['name'][$key]}', note='{$_POST['note'][$key]}' WHERE id=$key");  


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

יכול להיות שלא הבנת בגלל הלולאת foreach, אז יש הסבר בעברית:
http://php.eitan.ac.il/main.php?id=00141
_____________________________________



נערך לאחרונה ע"י tnadav1 בתאריך 23-02-2006 בשעה 22:11.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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