קוד נכנס לDB ע"י משפט SQL מעובד ולא כמות שהוא
-
אני מנסה להכניס קוד PHP (שהתקבל מהקליינט) לתוך המסד נתונים באמצעות משפט SQL בPHP.
איך אני מטמיע אותו כטקטס מוחלט שהוא לא יעבד אותו בכלל. כי כרגע הוא מסנן כל מיני דברים, וכמו"כ הוא מבטל את מעבר השורות.תודה
-
לגבי מעברי השורות: https://stackoverflow.com/a/4972522
-
לגבי מעברי השורות: https://stackoverflow.com/a/4972522
-
אני משער שזה כלים אוטומטיים של ניקוי קלט.
תתבונן בשלבי הבעיה: תבדוק איך נראה הטקסט בדפדפן בשליחה של הrequest, ותדפיס אותו לטסט בזמן התקבלותו לPHP. אם הבעיה היא רק בהכנסה למסד כפי שאתה חושד אז תביא פה את הקוד של ההכנסה + דוגמת צנזור כפי שביקש @yossiz- המעבר שורות מתבצע כבר בPHP. אבל הטקסט עצמו חוזר.
- הבעיה השניה היא שהוא לא מוכן להכניס את התו '#' - שמשמש להערות.
הDB הוא PostgreSql
קוד לדוגמא
נשלח:$id_mode = (new mode)->get_id($_REQUEST["Mode"]); //בחירת נתון //$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]); //echo $_REQUEST["mod_mode"],$_REQUEST["name"];die; //סתם הערות בקוד $id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]); # $id_update = (new manege)->get_id($_REQUEST["mode"],$_REQUEST["name"]);
מתקבל (לתוך הDB):
$id_mode = (new mode)->get_id($_REQUEST["Mode"]);//בחירת נתון//$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]);//echo $_REQUEST["mod_mode"],$_REQUEST["name"];die;//סתם הערות בקוד$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]);
-
- המעבר שורות מתבצע כבר בPHP. אבל הטקסט עצמו חוזר.
- הבעיה השניה היא שהוא לא מוכן להכניס את התו '#' - שמשמש להערות.
הDB הוא PostgreSql
קוד לדוגמא
נשלח:$id_mode = (new mode)->get_id($_REQUEST["Mode"]); //בחירת נתון //$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]); //echo $_REQUEST["mod_mode"],$_REQUEST["name"];die; //סתם הערות בקוד $id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]); # $id_update = (new manege)->get_id($_REQUEST["mode"],$_REQUEST["name"]);
מתקבל (לתוך הDB):
$id_mode = (new mode)->get_id($_REQUEST["Mode"]);//בחירת נתון//$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]);//echo $_REQUEST["mod_mode"],$_REQUEST["name"];die;//סתם הערות בקוד$id_to_update = (new mode)->get_id_mode($id_mode,$_REQUEST["mod_mode"]);
-
$conndb = new conndb(); $sql = 'update table set '; if ($code !== 0) {$sql = $sql." code='$code'"; } $sql = $sql.' WHERE id='.$id_function.';'; $result = pg_query($conndb->condb(), $sql);
-
@yossiz המעברי שורות נעלמים (והכל משורשר בשורה אחת)
אבל ה# עדיין לא קוטעת.השלב הזה של הקטיעה ע"י ה# נהיה רק בהכנסה לDB.(וכמדו' שהסיבה שהוא קוטע מכאן והלאה את הכל, ולא רק שורה אחת, כיון שאחרי שהוא נהיה לשורה אחת כשהגיע לPHP, אז ה# קוטעת את כל שאר השורה. אבל אם יתוקן המעברי שורות אז רק אותה השורה תיקטע...)עריכה:
גם ה# קוטעת כבר אז.במילים אחרות: לא תקין.
-
@yossiz המעברי שורות נעלמים (והכל משורשר בשורה אחת)
אבל ה# עדיין לא קוטעת.השלב הזה של הקטיעה ע"י ה# נהיה רק בהכנסה לDB.(וכמדו' שהסיבה שהוא קוטע מכאן והלאה את הכל, ולא רק שורה אחת, כיון שאחרי שהוא נהיה לשורה אחת כשהגיע לPHP, אז ה# קוטעת את כל שאר השורה. אבל אם יתוקן המעברי שורות אז רק אותה השורה תיקטע...)עריכה:
גם ה# קוטעת כבר אז.במילים אחרות: לא תקין.
-
-
כשהcode מודפס לקונסול לפני שהוא נכנס לפונקציית השליחה, זה נמצא עם הסימונים של האנטרים. (↵). צריך לעשות כנראה איזו המרה עם split. אולי לחתוך את השורות לתוך array?
ואם כן, מה הקוד של האנטר הזה?
תודה. -
אם זה יעניין מה עשיתי בסוף.
בצד קליינט לפני השליחה:
let arr_code = func.code .replaceAll(String.fromCharCode(10),"~") .replaceAll(String.fromCharCode(13),"~");
- (ה'סולמית' עבור ההערות של PHP הוחלפה ל-// )
php:
$code = str_replace("~",chr(13), $code);
-
אם זה יעניין מה עשיתי בסוף.
בצד קליינט לפני השליחה:
let arr_code = func.code .replaceAll(String.fromCharCode(10),"~") .replaceAll(String.fromCharCode(13),"~");
- (ה'סולמית' עבור ההערות של PHP הוחלפה ל-// )
php:
$code = str_replace("~",chr(13), $code);
-
@yossiz אולי זה קשור לVUE שאני משתמש איתו.
זה קורה גם בסימן &, ואולי מאותה סיבה גם המעבר שורות.