עזרה בתמורה

bugbugon

New member
עזרה בתמורה

טוב, אני די המומה מחוסר ההתייחסות לשאלה שהצבתי כאן אתמול, אז אלך צעד אחד קדימה. מי שיעזור לי להגיע לפתרון המלא, יקבל 5 דיסקים (בודדים) לבחירתו. אני מניחה שזה בערך בין 300 ל-500 ש"ח, שזה לא רע בשביל סקריפט קטן. השאלה מוצגת בהמשך דף זה, או בקובץ המצורף. bugbugon
 

Terminal Frost

New member
אין צורך בתמורה...

<?php include "db_connect.php"; //connecting to MySQL server and DB $sql = "SELECT price FROM classics WHERE barcode IN (".$_POST['barcode1'].",".$_POST['barcode2'].",".$_POST['barcode3'].",".$_POST['barcode4'].")"; //basicly, u can iterate through all you $_POST vars with a loop and add all the vars to the query, this way you can check as many barcodes as you'd like. $res = mysql_query($sql); $total = 0; while($row=mysql_fetch_array($res)) { echo $_POST["barcode1"] - $row['price']; echo "<br />"; $total += $row['price']; } echo $total; ?>​
ת'אמת לא יודע למה לא עזרתי לך מקודם. בהצלחה!
 

Terminal Frost

New member
מה שכן כדאי להוסיף זה וואלידציה לכל

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

bugbugon

New member
המון תודה, אבל

אני מקבלת תוצאות אחרות לגמרי ממה שנשלח מהטופס. ה-total יוצא בסדר, אבל המספרים שחוזרים שונים ממה שנשלח, וגם לא מתקבל המחיר של כל שורה. נשלח: 123454 123455 123456 123457 חוזר: 123420 123419 123418 123417
 

bugbugon

New member
התקדמות...

טוב, טיפלתי קצת בקוד, אבל נראה שבכל זאת צריך פה איזה array שיבדוק שדה אחר שדה. אנא עזרו לי, אני לא מתכנתת, ועובדת פה קצת לפי הגיון, וקצת קריאה בפורומים. הקוד הנוכחי שלי הוא:
<?php include "db_connect.php"; //connecting to MySQL server and DB $sql = "SELECT price FROM classics WHERE barcode IN (".$_POST['barcode1'].",".$_POST['barcode2'].",".$_POST['barcode3'].",".$_POST['barcode4'].")"; //basicly, u can iterate through all you $_POST vars with a loop and add all the vars to the query, this way you can check as many barcodes as you'd like. $res = mysql_query($sql); $total = 0; while($row=mysql_fetch_array($res)) { echo $_POST["barcode1"];echo " - ";echo $row['price']; echo "<br />"; $total += $row['price']; } echo $total; ?>​
מכיון שרק barcode1 מופיע בהצגת הנתונים, ברור שרק הוא יופיע ולא שאר המשתנים. איך אבדוק בלופ את כל המשתנים מהטופס???
 

Terminal Frost

New member
כן, לא חשבתי עד הסוף עם זה

<?php include "db_connect.php"; //connecting to MySQL server and DB $sql = "SELECT barcode,price FROM classics WHERE barcode IN ("; //iterating through all the $_POST vars foreach ($_POST as $key => $value) { if (substr($key,7)=='barcode') $sql.=$value.","; } //removing the last "," from the query $sql = substr($sql,strlen($sql)-1); //adding the closing ')' $sql .= ")"; //running the query $res = mysql_query($sql); $total = 0; while($row=mysql_fetch_array($res)) { echo $row['barcode']." = ".$row['price']; echo "<br />"; $total += $row['price']; } echo $total; ?>​
עכשיו זה קצת יותר טוב. אם את לא מבינה משהו מהקוד, תלכי לil.php.net ולmanual, תמצאי שם את הפונקציה שלא ברורה לך ותביני מה היא עושה. הדרך הכי טובה ללמוד.
 

Terminal Frost

New member
לא העתקת את הקוד ופשוט הדבקת, נכון?

כי השמות של השדות ששמתי בקוד בטח לא זהים לשמות בטבלה שלך... תבדקי שהשמות נכונים. יודעת מה, תעשי echo $sql לפני הביצוע של השאילה על הסרבר (לפני הפונקציה mysql_query), ותראי לי מה שיוצא לך.
 

bugbugon

New member
זה מה שמתקבל...

()0 בטבלה יש barcode,price והשדות בטופס הם barcode1 וכו'. מצטערת על השירשור הבלתי נגמר....
 

Terminal Frost

New member
whoops. טעות שלי

<?php include "db_connect.php"; //connecting to MySQL server and DB $sql = "SELECT barcode,price FROM classics WHERE barcode IN ("; //iterating through all the $_POST vars foreach ($_POST as $key => $value) { if (substr($key,7)=='barcode') $sql.=$value.","; } //removing the last "," from the query $sql = substr($sql,0,strlen($sql)-1); //adding the closing ')' $sql .= ")"; //running the query $res = mysql_query($sql); $total = 0; while($row=mysql_fetch_array($res)) { echo $row['barcode']." = ".$row['price']; echo "<br />"; $total += $row['price']; } echo $total; ?>​
הבעיה בשורה:
$sql = substr($sql,0,strlen($sql)-1);​
שחכתי 0. עכשיו בסדר
 

bugbugon

New member
עדיין 0

וזה מה שנותן echo $sql SELECT barcode,price FROM classics WHERE barcode IN )0
 

lizard

New member
בניתי לך את המערכת.

תשלחי לי מייל בפרטי ואני אשלח לך אותה.
 
למעלה