471
צפיות
צפיות
27
תשובות
תשובות
שאלה לגבי ממשק ניהול
ערב טוב,
יש לי טבלה, אם אפשרות לביצוע עדכון דרך ממשק.
הבעיה היא שהקוד הבא:
<input type="text" name=vName value=<%=rs("Name")%>>
מניב את המילה הראשונה בלבד(!) ( NAME הוא מסוג טקסט)
שימוש ב- response.write מביא להצגת התוכן כולו !!!
כששיניתי את השורה הזו לtextarea התוכן מוצג במלואו.
למישהו יש הסבר?
27 תשובות
כן,
עשה כך:
<input type="text" name=vName value="<%=rs("Name")%>">
תודה רבה
וההסבר הוא שאם אין מרכאות הוא לוקח
את המילה הראשונה בלבד. לכן החליטה שבXHTML אין דבר כזה בלי מרכאות
*החליטה=החליטו
שוב, תודה ! ושאלה נוספת ….
בניתי ממשק ניהול שמציג מספר רשומות מטבלה. ליד כל רשומה יש checkbox ובנוסף קיים dropdown list שבו ניתן לבחור מה לעשות עם הרשומות שנבחרו: הסתרה, מחיקה, עדכון (נעזרתי בבנייה במאמר מהאתר).
עבור בחירה בעדכון – יש מעבר על כל הרשומות שנבחרו, בלולאה שאמורה להציג כל רשומה בטופס, עם הערכים הנוכחיים שלה ולחיצה על SUBMIT מבצעת עדכון.
עד כאן הכל טוב ויפה. הבעיה שלי היא – איך לשלב בתוך לולאה: הצגת רשומה בטופס, שליחה ל-DB לצורך עדכון, ומעבר לפריט הבא בלולאה – ניסיתי לבצע את פעולת העדכון בטופס ASP נוסף ואז לחזור לדף ה- ASP הראשי שבו רצה הלולאה ע"י שימוש ב-Redirect – מה שגרם לכל הרשומות להיות מוצגות ברצף בדף אחד!
מה הלוגיקה הנכונה לביצוע משימה כזו (האם יש דרך לגרום ללולאה "לחכות" עד ביצוע ה-SUBMIT של הרשומה לפני המעבר לרשומה הבאה?) ??
תודה ושבת שלום.
מצורף הקוד:
מצורף הקוד של הדף בו מוצג הטופס – נראה לי שיש לי איזושהיא בעיה עם הלוגיקה, כי הטופס מוגדר (בעצם) מחוץ ל-ASP ….
<%
dim Con, rs, sql
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
set rs=Server.CreateObject("adodb.recordset")
sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
rs.Open sql, con
do until rs.EOF
TR = rs("Transaction")
CAT = rs("Category")
COMN = rs("Comments")
LINK = rs("Link")
DESC = rs("Description")
ID = rs("ID")
%>
<form name=updateForm action="update1.asp" method="post">
<p>טרנזקציה:
<br><input type=text name=tipTransaction value=<%response.write TR %> size=100 >
<p>קטגוריה:
<br><input type="text" name=tipCategory value="<%response.write CAT%>" size=100>
<p> הערות:
<br><input type="text" name=tipComments value="<%response.write COMN%>" size=100>
<p> תיאור:
<br><TEXTAREA name=tipDescription id=tipDescription Rows=5 cols=100><%response.write DESC%></TEXTAREA>
<input type=submit value=שלח onClick="return confirm('האם את/ה רוצה לעדכן את הטיפ?')"> <input type=reset value=נקה><p>
<p> קישור:
<br><input type=text name=tipLink value=<%response.write LINK%> size=100>
<INPUT type="hidden" name="tipID" value=<%response.write ID%>>
</form>
<%
rs.MoveNext
loop
%>
האם באמת יש צורך בדף ASP נוסף, שיכלול את פקודת העדכון?
אם כן, האם יש צורך בהגדרת connection חדש?
האם יש אפשרות לבצע את העדכון דרך אירוע ה-onclick שמבוצע ברגע שלוחצים SUMIT בטופס.
שבוע טוב, מישהו יכול לעזור ???
זו הלוגיקה!
לתת לכל ה-checkBox אותו שם ובכך אתה יוצר קבוצה (אותו דבר גם לדבי תיבת סלקט על מולטיפל) הערכים של הקבוצה שנשלחים מופרדים בפסיק ולאחר מכן אפש לחלק את המחרוזת שהתקבלה המופרדת בפסיקים למערך ובכך לבצע לולאה על המערך ובלולאה לבצע את הפעולות
לא כל כך הבנתי …
אם כל התיבות מקבלות את אותו השם – מה מבדיל ביניהן, ואילו ערכים נשלחים במחרוזת? (האם תוכל לתת דוגמא לפי הקוד שצירפתי?)
לגבי המערך – האם זה נעשה בדף ASP נפרד, בו מפרקים את אותה מחרוזת , ואז כל רשומה מופיעה בנפרד או שכולן מופיעות ביחד ולחיצה אחת על SUBMIT מעדכנת אותן בלולאה?
לא ממש הבנתי
אבל למה לא לכתוב את כל העדכונים, למבמט, ואז ה Request הופך לקולקשיין ואפשר בקלות לבדוק במה היה שינוי ובמה לא.
סליחה, אבל
הידע שלי לא רחב דיו, בינתיים….
בקוד שצירפתי – מופיעות כל הרשומות שסומנו, ברצף, בדף אחד (למרות שלא זאת היתה כוונת המשורר …) באופן שניתן לערוך את כולן. ואז ללחוץ על SUBMIT.
הבעיה היא איך ניתן להעביר את משתנה הקולקשיין + הערכים המתאימים לכל רשומה ורשומה לדף ה-ASP הבא כך שיהיה אפשר לערוך את העדכון בלולאה.
(אלא אם כן יש רעיון יעיל יותר – אשמח ללמוד דברים חדשים !)
שוב, תודה ושבוע טוב לכולם
אני אסביר שוב עם קצת קודים
בעיקרו נותנים לכל ה-checkBoxים אותו NAME והקליטה שלהם נעשית ע"י הפרדה של כל ערך בפסיק (,)
///// rs.Fields("name") line 1 = "nir1"
//// rs.Fields("name") line 2 = "nir2"
/// rs.Fields("name") line 3 = "nir3"
<input type="checkBox" name="cb" value="nir1" />
<input type="checkBox" name="cb" value="nir2" />
<input type="checkBox" name="cb" value="nir3" />
//////////// AFTER SEND
<% =Reques.Form("cb")() %>
////////////// output = nir1,nir2,nir3
///////////// split the string with split method of JS
var cntNir = Request.Form("cb")().value
var nirArr = cntNir.split(",");
////////// outPut : var nirArr = new Array("nir1","nir2","nir3")
///// looping on the length of the Array
for (var i=0;<nirArr.length;++){
oConn.execute("delete from tbl where name="" + nirArr[i] + """)
}
0
אם משה לא מובן תשאל (השארתי הערות על הקוד מצטער שהוא ב-JS כי שכחתי איך עובים עם VBS… חחח)
הודעת שגיאה
מדוע על קטע הקוד הבא:
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
set rs=Server.CreateObject("adodb.recordset")
sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
rs.Open sql, con
מתקבלת השגיאה הבאה:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'ID IN ()'.
השורה אליה מתייחסת הודעת השגיאה היא השורה בה מתבצע rs.open
הוספתי בדיקת הערך של sql: וקיבלתי קוד נכון …….
=== select * from Tips WHERE ID IN (45); ===
תשמע אני אולי לא יודע הכול
על ASP אבל מה שאני יודע שאם זה נותן לך שורה שבא יש את הטעות תמיד תדע שזו השורה שלפניה
עובדה !!!!
אמרו לך שהבעיה היא ב ID IN()
ואתה אומר שהבעיה היא ב SELECT
Syntax error (missing operator) in query expression 'ID IN ()'.
זה היה סתם טיפ שתדע לעתיד
תודה על ההערה ובכל זאת …
ממה נובעת השגיאה?
לא זאת הכוונה
הפרדה ע"י פסיק לא מומלצת ויקרה
for (var i=0;i<Request("nir").Count;i++){
//Some code with Request("nir")(i)
}
אני אנסה את זה, אבל בינתיים …
יש לי בעיה עם הודעת שגיאה לא ברורה (הוספתי הודעה למעלה, כנראה נבלעה בין שלל התגובות) אז שוב:
קטע הקוד הבא:
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("mysitedbMyTips.mdb")
set rs=Server.CreateObject("adodb.recordset")
sql="select * from Tips WHERE ID IN (" & Request.Form("toDel") & ")"
rs.Open sql, con
גורם לשגיאה הבאה:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'ID IN ()'.
הוספתי בדיקת הערך של sql: וקיבלתי קוד נכון…….
לדוגמא:
=== select * from Tips WHERE ID IN (1,3,45); ===
אז, מה לא בסדר כאן ?
אי אפשר,
אתה יכול להשתמש ב IN רק בהחזרת ערך של תת שאילתות. בכל מקרה אתה צריך להשוות את הערכים ולהשתמש ב OR, אבל להשוות "אחד אחד"…
מכך ש…
Request.Form("toDel")
ריק
מה פתאום?
בהחלט אפשר להשתמש ב-IN לשליפה.
אוקיי,
השאלה מה זה יכול להכיל?
שאלה עקרונית, בנושא לולאות
ערב טוב !
האם ניתן לקרוא, בתוך לולאה לדף ASP שמכיל טופס עם נתונים מה-DB (לצורך עדכון) , אשר קורא לדף נוסף – בו מתבצע עדכון ב-DB, וחוזר לתוך הלולאה המקורית?
נסיון המחשה:
Main.ASP:
Loop from 1 to N
Call Update1.ASP
Next
Update1.ASP:
Form with data from the DB for selected record
Update fields
Sumbit (via Update2.ASP)
Update2.ASP
Update the record in DB
Redirect to Main.ASP
האם ניתן לבצע משהו כזה, כלומר הפנייה מחדש מקובץ Update2 ללולאה בקובץ Main?
בוקר טוב – הקפצה
הכל
SELECT * FROM tbl WHERE ID IN (1,4,8,22)
SELECT * FROM tbl WHERE ID IN (SELECT fld FROM tbl2)
SELECT * FROM tbl WHERE fld IN ('red','blue','green')
Server.Execute
תודה
לא ידעתי.
אם כך …
הנושא הזה חדש עבורי, ולכן השאלה שלי היא:
מה קורה אם בתוך הלולאה יש הגדרה + הפעלה של טופס שהולך לעיבוד בדף נוסף?
האם מבצעים בהגדרת הטופס, משהו כמו:
< form name= … action=Server.Execute "file2.asp" >
או שבפעולת ה-Submit יש לבצע משהו כמו:
onclick=Server.Execute "file2.asp
"
או שאני בכלל לא בכיוון?
העיקר שלאחר הזנת נתונים בטופס + עדכון – התכנית תחזור ללולאה לפריט הבא …
תודה ויום נעים