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

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



  #1  
ישן 19-06-2017, 21:47
  kolola kolola אינו מחובר  
 
חבר מתאריך: 07.08.04
הודעות: 10
אשמח לעזרה SQL - הודעת שגיאה חיפוש מילה בעברית בטבלה קיימת

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

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

יש לי 3 טבלאות
- customer_table המכיל את שמות המתפללים
- operation_table המכיל את הפעולה של המתפלל אם זה מי שברך, עליה לתורה וכו...
- data_integration_table טבלה שמכילה את כל השיבוצים, ה ID של של המתפלל, ID של הפעולה, שם הפרשה, תאריך הביצוע והסכום שתרם.

הכנתי 2 קבצים הראשון בעזרת FORM שאני בוחר מתוך רשימה את שם המתפלל ואת הפעולה, ב Input נוסף רושם בעברית את שם הפרשה,
בהתאם לכפתור שאני לוחץ זה מבצע את החיפוש הנדרש שקבעתי בקוד.

בקובץ השני החיפוש מתבצע עם הצגת הנתונים בתוך טבלה.
השתמשתי בפקודות INNER JOIN וב WHERE

ברגע שאני רשום בעברית לוחץ על כתפור החיפםוש המתאים לפי שם הפרשה, אני מקבל את הודעת השגיאה, שאר החיפושים זה עובד.

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

החלק של הקוד בה אני רושם שם בעברית
קוד PHP:
 <head>
<
meta charset="UTF-8"
<
link rel="stylesheet" type="text/css" href="style.css"/>
</
head>

<
form method="post" action="read_DataIntegration.php">
<
span>פרשה: </span><input type="text" name="thora" placeholder="פרשה">
<
button class="button-_style" type='submit' name='btn_submit' value='Button 3'>הצג לפי פרשה</button>
</
form


הקובץ השני read_DataIntegration.php
כאשר בעמודה thora כל השמות בעברית.
קוד PHP:
 <head>
 <
meta charset="utf-8">
 <
link rel="stylesheet" type="text/css" href="style.css"/>
</
head>

<?
php header('Content-Type: text/html; charset=utf-8');

echo 
"<table class='special' align='right';>";
  echo 
"<tr>
        <th>שם המתפלל</th>
        <th>שם הפעולה</th>
        <th>שם הפרשה</th>
        <th>תאריך</th>
        <th>סכום</th>
        </tr>"
;

  
// קבלת נתונים מהפורם
$customer_id $_REQUEST['output'];
$operation_id $_REQUEST['output1'];
$date $_REQUEST['date'];
$thora $_REQUEST['thora'];
$servername "localhost";
$username "root";
$password "";
$dbname "synagogue";

try 
 {
     
$conn = new PDO("mysql:host=$servername;dbname=$dbname"$username$password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
     
// set character name
    
$conn->query("SET NAMES 'utf8'");
 }
catch(
PDOException $e
{
     echo 
"Error: " $e->getMessage();
}

$sth $conn->query("SELECT data_integration_table.date, data_integration_table.thora, data_integration_table.amount, customer_table.first_name, customer_table.last_name, operation_table.operation_name FROM data_integration_table 
     INNER JOIN customer_table ON data_integration_table.customer_id = customer_table.customer_id
     INNER JOIN operation_table ON data_integration_table.operation_id = operation_table.operation_id WHERE data_integration_table.thora = 
$thora");

$sth->setFetchMode(PDO::FETCH_BOTH);// Mode par défaut (tableau)
     
while($row $sth->fetch())
    {
     echo 
"</tr>";
     echo 
"<td>"$row['first_name'], '&nbsp',  $row['last_name'],"</td>";
     echo 
"<td>"$row['operation_name'], "</td>";
      echo 
"<td>"$row['thora'], "</td>";
      echo 
"<td>"$row['date'], "</td>";
     echo 
"<td>"$row['amount'], "</td>";
     echo 
"</tr>";
$sth->closeCursor();
echo 
"</table>";
$conn null;
?> 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 20-06-2017, 10:12
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,428
בתגובה להודעה מספר 1 שנכתבה על ידי kolola שמתחילה ב "אשמח לעזרה SQL - הודעת שגיאה חיפוש מילה בעברית בטבלה קיימת"

אני לא מבין איך זה אמור לעבוד בכל מקרה, עברית או לא, אלא אם כן PDO עושה קסמים... (או במילים אחרות: הופך את זה ל prepared statements עם parameter binding בצורה אוטומטית). יכול להיות שהוא עושה (לא עבדתי עם PDO) אבל זה יפתיע אותי משום שלמעשה די מסובך לעשות משהו שתמיד עובד בצורה הזו.

אתה דוחף את השדה שאתה מחפש מהמשתמש ישירות לשאילתא, בעוד שמחרוזות יש לעטוף בסימן גרש (') משני צידיהן ב SQL סטנדרטי (שאינו parameterized query).

יתרה מזאת, אתה דוחף תוכן שהמשתמש מכניס ישירות לתוך שאילתא, שזה דבר שאסור לעשות בתכלית האיסור משום שהוא מאפשר SQL Injection. ממליץ שלא ללמוד מהמדריך אשר לימד אותך לעשות כך.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 22-06-2017, 00:19
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,428
בתגובה להודעה מספר 6 שנכתבה על ידי kolola שמתחילה ב "תודה אעיין בקישור..."

escaping, או "הברחה" בעברית (לטעמי המונח באנגלית מובן יותר) היא שיטה שבה אנחנו גורמים לתו שיש לו משמעות מיוחדת מבחינת השפה שבה הוא מופיע, להפוך לתו "רגיל", חסר משמעות, כך שלא תהיה לו משמעות מיוחדת. אם תרצה, לגרום לו "לברוח" ממשמעותו. למשל, סימן הגרש מהווה סימון של התחלה או סיום של מחרוזת. אם "נבריח" את התו הזה, אזי הוא יהפוך להיות "סתם גרש", ולא יהווה סימון של התחלה או סיום של מחרוזת. ככה שאם למשל יש לנו את המחרוזת one's name - הגרש שבין one ל s מסיים את המחרוזת ומכאן ואילך השפה תתייחס לכך כאילו המחרוזת נסגרה, וההמשך, במקרה הזה, לא חוקי. אבל באותה מידה יכלו להיות תווים אחרים שהם כן חוקיים ומבצעים פעולות אחרות. זו בעצם המהות של SQL Injection. ולכן חייבים "להבריח" את סימן הגרש שבין one ל s, כדי שיהיה סתם גרש. תלוי בשפה, בטכנולוגיה, ובשיטה, יש דרכים שונות לעשות את זה. לפעמים זה על ידי זה שמכפילים את התו. לפעמים שמים לפניו לוכסן (\), וכו'. אבל אם משתמשים ב parameterized query - אז לא צריך להתעסק בזה. אתה פשוט מודיע לו "זה פרמטר!", אז הוא יודע להתייחס *לכל המשתנה שהכנסת אליו* כפרמטר אחד, ללא תלות בתווים שיש בתוכו.

מתודה... אכן מגיעה מצרפתית של ימי הביניים שבתורה מגיעה מיוונית עתיקה. זו הדרך המקובלת בין מתכנתים לומר method ב"עברית" (למרות שיש נודניקים שיגידו "בעברית צריך לומר שיטה!"). אם לא שמעת על זה עד עכשיו, כנראה שלא קראת על תכנות מונחה עצמים... אתה יכול להתחיל כאן: https://he.wikipedia.org/wiki/%D7%A....92.D7.99.D7.94

בקוד הדוגמה למעלה (שאני מעריך שהעתקת מכל מיני מקומות) יש למשל שימוש במתודה. המתודה query היא אחת המתודות של אובייקטים מסוג PDO.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.83 שניות עם 10 שאילתות

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

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