הפלוס העיקרי שיש בקוד להלן זה שכל הזמנה נרשמת מיידית בטבלה והלקוח שולט לחלוטין על ההזמנה שלו (קדימה, אחורה, סכום, תיקונים, רשימת ההזמנה, מחיקה וכו')
אמנם אפשר לפתח עוד הרבה, אבל בתור בסיס זה יכול להיות לתועלת ואם אמתין... המידות הרעות והמאוסות ובכללם הקמצנות ועוד... אולי יקחו להם מקום ח"ו ואולי זה לא יקרה כידוע...
וגם אם לא יהיה שימושי לאף אחד (אני מקווה מאוד שכן), אולי זה יוכל לחסוך זמן יקר למי שרוצה לקחת חתיכות מהקוד הזה
אז, קדימה לעבודה.
דבר ראשון הכנתי 6 טבלאות SQL ב .000webhost.com
1)פריטים == items עמודות כלהלן: name_of_item,serial_name,Project,group_name,price_per_unit,sum_of_orders,count_orders,text_for_reading,text_for_reading_en
- פה רשמתי את רשימת הפריטים למכירה, את המחיר, את הקבוצה ואת המלל להודעה באנגלית ועברית
2)הזמנות == orders עמודות כדלהלן:
id,_date,customer_id,customer_name,item_id,item_name,text_for_reading,number_of_items,price_per_unit
- כאן מתעדכן אונליין ההזמנה שהלקוח מבצע
id,serial_name,to_path
אופן התקשורת של התכנית היא: המידע המיוחד שנשאב מהשלוחות השונות הוא מספר פריט, ניסיתי לעקוף גם את זה, אבל יצא קובץ מבולבל ומסובך.
כלומר: בשביל 100 פריטים אתה פותח 100 שלוחות של api ששולח רק מספר item סידורי לכתובת של הדף php ככה:
api_add_0=item=1
(כל השאר מטופל על ידי הקוד). בשביל שהקוד יזהה איפה שלוחה ראשית, צריך לרשום בעמודת המספור Main Menu, ובעמודת הנתיב את הנתיב לתפריט ראשי, כמו כן שיזהה איפה שלוחת תשלום, צריך לרשום כנ"ל Payment מול שלוחת תשלום
4)אנשים == people עמודות כדלהלן:
id,date,group_name,name,last_name,Address,City,email,language,station,debt,paid_up,Balance_payable,Remarks
הצורך ברור - רשימת לקוחות
5)אלפון == phonebook עמודות כדלהלן:
id,customer_id,_date,phone_number,status,Messages,Standing_now
המטרה של טבלה זו: בתור ספר טלפונים בשביל לאפשר כמה טלפונים לאותו מספר לקוח
6)פרוייקטים == Projects עמודות כדלהלן:
id,name,Situation,starting_from_date,Until
המטרה של טבלה זו: מספר פרוייקט פעיל, למשל ברגע של סגירת הקוים, אתה מסמן את הפרוייקט כ 0 וזהו.
להלן הקוד:
קוד: בחירת הכל
<?php
//מוריד הודעות שגיאה
error_reporting(0);
$phone = $_GET["ApiPhone"];
$extension = $_GET["ApiExtension"];
$a = $_GET["a"];
$item = $_GET["item"];
$del =$_GET["del"];
$Select_or_Continue=$_GET["Select_or_Continue"];
$Order_quantity=$_GET["Order_quantity"];
//התחברות למסד נתונים
$servername = "localhost";
$username = "********";
$password = "*****;
$dbname = "*********";
// צור חיבור
$conn = new mysqli($servername, $username, $password, $dbname);
// הודעת כשלון
if ($conn->connect_error) {
die("id_list_message=t-שגיאה בהתחברות: " . $conn->connect_error);
}
// מקבל את התאריך כרגע
$currentDateTime = date('Y-m-d H:i:s');
//echo "id_list_message=t- מספר הטלפון שנקלט הוא: $phone : <b>";
//מחפש מספר לקוח בספר טלפונים
$sql_mer_id = ("SELECT customer_id FROM phonebook WHERE phone_number=$phone");
$result_mer_id = $conn->query($sql_mer_id);
if ($result_mer_id->num_rows > 0) {
// output data of each row
while($row_mer_id = $result_mer_id->fetch_assoc()) {
// echo "מספר טלפון $phone :";
$customerNomber = $row_mer_id["customer_id"];
//"קיבל את הנתון למשתנה
// echo "id_list_message=t- $message1: $customerNomber : <b>";//מספר הלקוח שלך הוא
// עם מספר לקוח יחפש בהמשך בטבלת הזמנות כמה הוא הזמין ממוצר זה
}
}
//מחפש שם לקוח בטבלת לקוחות
$sql_people = ("SELECT name,language FROM people WHERE id=$customerNomber");
$result_people = $conn->query($sql_people);
if ($result_people->num_rows > 0) {
// output data of each row
while($row_people = $result_people->fetch_assoc()) {
$customerNane = $row_people["name"];
$group_name = $row_people["group_name"];
$language=$row_people["language"];
//"קיבל את שם הלקוח
//echo "id_list_message=t- השם שלך הוא: $customerNane&go_to_folder=/4/1/2&";
}
}
//========================================רשימת הודעות==============================================================
//רשימת הודעות באאנגלית
if($language="en"){
$message1="מספר הלקוח שלך הוא";
$message2="הגעתם לסוף הרשימה";
$message3="המחיר הוא";
$message4="שקלים";
$message5="הזמנתם";
$message6="יחידות";
$message7="להזמנה הקישו אחת, להמשך שתים, לפריט הקודם: הקישו שלוש, לשמיעת סיכום ההזמנה ואחר כך לעבור לפריט הבא: הקישו ארבע, לשמיעה של הפריטים שהִזְמַנתֶם הקישו חמש, לתשלום, תשע, לתפריט ראשי, אפס, ולסיום, ניתן לנתק את השיחה";
$message8="לעדכון ההזמנה, הקישו אחת, להמשך שתים, לפריט הקודם: הקישו שלוש, לשמיעת סיכום ההזמנה ואחר כך לעבור לפריט הבא: הקישו ארבע, לשמיעה של כל הפריטים שהִזְמַנתֶם הקישו חמש, לתשלום, תשע, לתפריט ראשי: אפס, ולסיום ניתן לנתק את השיחה";
$message9="נא להקיש כמות, ואחר כך להקיש סולמית";
$message10=" ההזמנה של";
$message11=" יחידות, נרשמה בהצלחה";
$message12="ההזמנה של פריט זה נמחקה";
$message13="עדכון ההזמנה אל";
$message14="יחידות, נרשמה בהצלחה!";
$message15=" הגעתם לסוף הרשימה";
$message16="אין שורה קודמת";
$message17="סכום כל ההזמנה עד כה הוא";
$message18="שקל, עד כאן פירוט ההזמנות";
$message19="לא נמצאו רשומות";
$message20="להלן ההזמנה שרשומה במערכת";
$message21=" הזמנתם";
$message22=" יחידות של";
$message23="מחיר ליחידה";
$message24="שקל, סך הכל";
$message25=" שקל";
$message26="סכום כל ההזמנה עד כה הוא";
$message27="שקל, עד כאן פירוט ההזמנות";
$message28="לא נמצאו רשומות";
$message29="אנחנו חוזרים למכירה";
$message30="";
}else{
// רשימת הודעות בעברית
$message1="מספר הלקוח שלך הוא";
$message2="הגעתם לסוף הרשימה";
$message3="המחיר הוא";
$message4="שקלים";
$message5="הזמנתם";
$message6="יחידות";
$message7="להזמנה הקישו אחת, להמשך שתים, לפריט הקודם: הקישו שלוש, לשמיעת סיכום ההזמנה ואחר כך לעבור לפריט הבא: הקישו ארבע, לשמיעה של הפריטים שהִזְמַנתֶם הקישו חמש, לתשלום, תשע, לתפריט ראשי, אפס ולסיום, ניתן לנתק את השיחה";
$message8="לעדכון ההזמנה, הקישו אחת, להמשך שתים, לפריט הקודם: הקישו שלוש, לשמיעת סיכום ההזמנה ואחר כך לעבור לפריט הבא: הקישו ארבע, לשמיעה של כל הפריטים שהִזְמַנתֶם הקישו חמש, לתשלום, תשע, לתפריט ראשי, אפס, ולסיום ניתן לנתק את השיחה";
$message9="נא להקיש כמות, ואחר כך להקיש סולמית";
$message10=" ההזמנה של";
$message11=" יחידות, נרשמה בהצלחה";
$message12="ההזמנה של פריט זה נמחקה";
$message13="עדכון ההזמנה אל";
$message14="יחידות, נרשמה בהצלחה!";
$message15=" הגעתם לסוף הרשימה";
$message16="אין שורה קודמת";
$message17="סכום כל ההזמנה עד כה הוא";
$message18="שקל, עד כאן פירוט ההזמנות";
$message19="לא נמצאו רשומות";
$message20="להלן ההזמנה שרשומה במערכת";
$message21=" הזמנתם";
$message22=" יחידות של";
$message23="מחיר ליחידה";
$message24="שקל, סך הכל";
$message25=" שקל";
$message26="סכום כל ההזמנה עד כה הוא";
$message27="שקל, עד כאן פירוט ההזמנות";
$message28="לא נמצאו רשומות";
$message29="אנחנו חוזרים למכירה";
$message30="";
}//======================================================עכ רשימת הודעות=====================================
//מספר של מכירה
//שם הפרוייקט הפעיל כרגע
$sql_Project = ("SELECT id FROM Projects WHERE Situation=1"); //המספר 1 מסמן מכירה פעילה ו0 מסמןמכירה סגורה
$result_Project = $conn->query($sql_Project);
if ($result_Project->num_rows > 0) {
// output data of each row
while($row_Project = $result_Project->fetch_assoc()) {
$Project_id_nomber = $row_Project["id"]; //מספר פרוייקט פעיל
//"קיבל מספר סריאלי של פרוייקט הפעיל
}
}
//----------------------------------------------------ע"כ מספר מכירה נוכחית----------------------------------------
// הגדרות של פריט בתנאי שמספר הפרוייקט רשום 1 כלומר פעיל בטבלת פרוייקטים
$sql = ("SELECT * FROM items WHERE serial_name=$item AND Project=$Project_id_nomber");
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$name_of_item = $row["name_of_item"]; //שם פריט
$text_for_reading1 = $row["text_for_reading"]; // טקסט לקריאה
$price_per_unit = $row["price_per_unit"]; //מחיר
if($language="en"){$text_for_reading = $row["text_for_reading_en"];} // טקסט לקריאה באנגלית
}
}
//================================================================================================================
//נתיב של מוצר קודם או מוצר הבא
$sql_order = "SELECT serial_name FROM items WHERE Project=$Project_id_nomber ORDER BY serial_name";
$result_order = $conn->query($sql_order);
if ($result_order->num_rows > 0) {
while($row = $result_order->fetch_assoc()) {
$order1 = $order; //שורה קודמת מספר סריאלי
$order = $row ['serial_name'];
if ($order==$item){
//echo "order1=$order1|||order=$order";
break;}
}}
//לוקח מטבלת תיאום את הנתיב לשלוחה קודמת
$sql_order = "SELECT to_path FROM path_in_Yemot WHERE serial_name=$order1";
$result_path = $conn->query($sql_order);
if ($result_path->num_rows > 0) {
while($row = $result_path->fetch_assoc()) {
$previous_item = $row ['to_path'];
}
}
// echo "הנתיב לפריט הקודם: $previous_item";//}}else{echo "id_list_message=t-שגיאה: אין מספר פריט מול נתיב בטבלת path_in_Yemot";}
//====================================================================================================================================
//מוצר הבא
$order="0";
$sql_order = "SELECT serial_name FROM items WHERE Project=$Project_id_nomber ORDER BY serial_name DESC";
$result_order = $conn->query($sql_order);
if ($result_order->num_rows > 0) {
while($row = $result_order->fetch_assoc()) {
//הפריט הכי גבוה במספור
$order1 = $order; //שורה קודמת מספר סריאלי
$order = $row ['serial_name'];
if ($order===$item){
$order=$order1;
break;}
}
}
//לוקח מטבלת תיאום את הנתיב לשלוחה הבאה
$sql_order = "SELECT to_path FROM path_in_Yemot WHERE serial_name=$order";
$result_path = $conn->query($sql_order);
if ($result_path->num_rows > 0) {
while($row = $result_path->fetch_assoc()) {
$next_item = $row ['to_path'];
//echo "<br>פריט הבא: $next_item";
}
if ($order1==0 AND $order===$item){ //ה," //אם גומר את כל הסיבובים עד הסוף, סימן שאין פריטים אחרי ז
//הגעתם לסוף הרשימה
$next_item =NULL;
}//else{$next_item=$next_item1;}
}
//נתיב תפריט ראשי ושלוחת תשלום
//לוקח מטבלת תיאום את כתובת התפריט הראשי
$sql_order = "SELECT * FROM path_in_Yemot"; // WHERE serial_name='Main Menu'";
$result_path = $conn->query($sql_order);
if ($result_path->num_rows > 0) {
while($row = $result_path->fetch_assoc()) {
$serial_name =$row ['serial_name'];
if($serial_name==="Main Menu"){$Main_Menu_path = $row ['to_path'];}
if($serial_name==="Payment"){$Payment_path = $row ['to_path'];}
}
}
//===============================================================================================
// האם הלקוח הזמין כבר ממוצר זה
$sqlTab = "SELECT * FROM orders WHERE customer_id=$customerNomber AND item_id=$item";
//AND City='Berlin';
if($result = mysqli_query($conn, $sqlTab)){
if(mysqli_num_rows($result) > 0){
while($row = $result->fetch_assoc()) {
$old_order = $row["number_of_items"];
//"בדיקת קבלת נתון למשתנ
}
}else{$old_order="XXX";}
}
//=======================================עד כאן אספנו נתונים מהטבלאות, עכשיו מתחיל לטפל בקליינט
// כמות הזמנה
if ($Order_quantity == NULL){
//להזמין או להמשיך
if ($Select_or_Continue ==="0"){goto main_path;}
if ($Select_or_Continue == 0) {
a:
//מכין הודעות
$Item_name_message = " $text_for_reading1 $message3 $price_per_unit $message4:";
$old_order_message = " $message5 $old_order $message6, ";
// עד כאן הכין 2 הודעות, עכשיו משדר אותם בצירוף המלל הקבוע למתקשר
if ($old_order == 0) {
echo "read=t-$note $Item_name_message $message7 =Select_or_Continue,No,1,1,5,No,yes,No,*/,1234590";
}else{
echo "read=t-$note $Item_name_message $old_order_message $message8 =Select_or_Continue,No,1,1,5,No,yes,No,*/,1234590";}
} else {
////....אם השם לא מופיע במאגר לקוחות.
// המצב הזה לא אמור להיות בגלל הרישום בשלב הקודם, ולכן הוא לא מטופל כאן
}
} else {
//אם הקו טלפון עוד לא הגיע לשלב של הזמנה... אבל אם כן, יטופל להלן
}
// אם המתקשר בחר 1 להזמנה או 2 או 3 וכולי כאן מגיע הקוד בעניין הזה
//אם המתקשר הקיש 1 להזמנת מוצר
if ($Select_or_Continue ==1 and $Order_quantity == NULL){
echo "read=t-$message9=Order_quantity,No,2,1,5,No,yes,No,*/";
}
//אם כמות הזמנה לא שווה משהו מאפס ומעלה אז צריך לעשות הזמנה
else{
if ($Select_or_Continue ==1 and $Order_quantity >-1){
$sum_is= $Order_quantity*$price_per_unit; // סך לתשלום
//==========================================================================================================================================
if ($old_order == "XXX") { //אם לא הייתה הזמנה לפני כן צריך לפתוח שורה חדשה, ואם היה הזמנה יעדכן בשורה הקודמת
$sql_save_item = "INSERT INTO orders ( _date,customer_id,customer_name,item_id,item_name,text_for_reading,number_of_items,price_per_unit,sum)
VALUES ('$currentDateTime','$customerNomber','$customerNane','$item','$name_of_item','$text_for_reading1','$Order_quantity','$price_per_unit','$sum_is')";
//משום מה לא עובד בלי בדיקת מצב
if ($conn->query($sql_save_item) === TRUE) {
//הזמנה של כך וכך יחידות נרשמה בהצלחה
if($next_item===NULL){$note_1="$message10 :$Order_quantity $message11 !";}else{echo "id_list_message=t- $message10 :$Order_quantity $message11!&";}
// echo "&go_to_folder=$next_item";
} else {
echo "id_list_message=t-Error: " . $sql_save_item . "<br>" . $conn->error;
}
}else{
if ($Order_quantity=="0" OR $Order_quantity<1){
$sql_save_item = "DELETE FROM orders WHERE customer_id=$customerNomber AND item_id=$item";
if ($conn->query($sql_save_item) === TRUE) {}
if($next_item===NULL){$note_1="$message12 !";}else{echo "id_list_message=t-$message12 !&";} //ההזמנה של פריט זה נמחקה בהצלחה
// echo "&go_to_folder=$next_item";
}else{
$sql_save_item = "UPDATE orders SET _date='$currentDateTime', number_of_items='$Order_quantity', sum='$sum_is' WHERE customer_id=$customerNomber AND item_id=$item";
//משום מה לא עובד בלי בדיקת מצב
if ($conn->query($sql_save_item) === TRUE) {
if($next_item===NULL){$note_1="$message13 :$Order_quantity $message14";}else{echo "id_list_message=t-$message13 :$Order_quantity $message14 !&";} //עדכון הזמנה אל ... יחידות נרשמה בהצלחה
// echo "&go_to_folder=$next_item";
} else {
echo "id_list_message=t-Error: " . $sql_save_item . "<br>" . $conn->error;
}
}
}
//============================================ עד כאן עדכון ההזמנה בטבלת הזמנות========================================================================
if($next_item===NULL){$note="$note_1 $message15 ";$Select_or_Continue=NULL; goto a;} //הגעתם לסוף הרשימה
else{
echo "go_to_folder=$next_item";
}
//סיכום
$result = $conn->query("SELECT number_of_items,sum FROM orders WHERE item_id=$item");
$row = $result->fetch_assoc();
$Total_order_quantity = htmlentities($row['number_of_items']);
//echo "סך הכל הוזמנו $Total_order_quantity יחידות";
// מעדכן הזמנה בטבלה של פריטים
$sql_save_item = "UPDATE items SET count_orders='$Total_order_quantity' WHERE serial_name='$item'";
//משום מה לא עובד בלי בדיקת מצב
if ($conn->query($sql_save_item) === TRUE) {
// echo "id_list_message=t- תוספת נרשמה בטבלת הפריטים הראשית";
}
// מעדכן סכום לתשלום בטבלה של לקוח
$result = $conn->query("SELECT number_of_items,sum FROM orders WHERE item_id=$item AND customer_id=$customerNomber");
$row = $result->fetch_assoc();
$Total_order_quantity = htmlentities($row['sum']);
//echo "סך לתשלום $Total_order_quantity";
//=============================================עדכון חוב בטבלת לקוח===========================================
$sql_save_item = "UPDATE people SET debt='$Total_order_quantity' WHERE id='$customerNomber'";
if ($conn->query($sql_save_item) === TRUE) {
// echo "id_list_message=t- תוספת נרשמה בטבלת לקוח";
}
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
//אם המתקשר הקיש 2 למוצר הבא
if ($Select_or_Continue ==2 and $Order_quantity == 0){
if($next_item===NULL){$note="$message15 ,";$Select_or_Continue=NULL; goto a;
}else{
echo "go_to_folder=$next_item";
}}
//---------------------------------------------------------------------------------------------------------------------------------
//אם המתקשר הקיש 3 למוצר קודם
if ($Select_or_Continue ==3 and $Order_quantity == 0){
if($previous_item===NULL){$note="$message16 ,";$Select_or_Continue=NULL; goto a;}
else{
echo "go_to_folder=$previous_item";
}}
//---------------------------------------------------------------------------------------------------------------------------------
//אם המתקשר הקיש 4 לשמיעת סיכום ההזמנה ואז להמשיך
if ($Select_or_Continue ==4 and $Order_quantity == 0){
//סיכום לתשלום
$sqlTab = "SELECT number_of_items,sum FROM orders WHERE customer_id=$customerNomber";
if($result = mysqli_query($conn, $sqlTab)){
if(mysqli_num_rows($result) > 0){
while($row = $result->fetch_assoc()) {
$Total_order_quantity = $Total_order_quantity + $row["sum"];
}
if ($Total_order_quantity>0){
//סכום כל ההזמנה עד כה הוא....שקל, עד כאן פירוט ההזמנות
if($next_item===NULL){$note= "$message17: $Total_order_quantity $message18,";$Select_or_Continue=NULL; goto a;
}else{ echo "id_list_message=t- $message17: $Total_order_quantity $message18,&go_to_folder=$next_item";}
}else{
if($next_item===NULL){
$note= "$message19 "; //לא נמצאו רשומות
$Select_or_Continue=NULL;
goto a;
}else{
echo "id_list_message=t-$message19&go_to_folder=$next_item";
}
}
}
}
}
//אם המתקשר הקיש 5 יביא את רשימת ההזמנה שלו
if ($Select_or_Continue ==5 and $Order_quantity == 0){
$sqlsort = "SELECT text_for_reading , price_per_unit, sum FROM orders WHERE customer_id=$customerNomber";
$result = $conn->query($sqlsort);
$Total_order_quantity = htmlentities($row['sum']); // סך הכל לתשלום
if ($result->num_rows > 0) {
// output data of each row
if($next_item==NULL){$note="$message20,<br>";} //להלן ההשמנות שנרשמו במערכת
else{echo "id_list_message=t-$message20,<br>";} //להלן ההזמנות שנרשנו במערכת
while($row = $result->fetch_assoc()) {//הזמנתם... יחידות של...מחיר ליחידה...שקל, סך הכל...שקל
if($next_item===NULL){$note="$note $message21: " . $row['number_of_items']. "$message22 " . $row['text_for_reading']. " $message23: " . $row['price_per_unit']. " $message24 : " . $row["sum"]. "$message25 <br>";
}else{echo "$message21: " . $row['number_of_items']. " $message22 ". $row['text_for_reading']. " $message23: " . $row['price_per_unit']. " $message24: " . $row["sum"]. " $message25 <br>";}
}
//סיכום לתשלום
$sqlTab = "SELECT number_of_items,sum FROM orders WHERE customer_id=$customerNomber";
if($result = mysqli_query($conn, $sqlTab)){
if(mysqli_num_rows($result) > 0){
while($row = $result->fetch_assoc()) {
$Total_order_quantity = $Total_order_quantity + $row["sum"];
}
if ($Total_order_quantity>0){
if($next_item===NULL){$note="$note <br> $message26 : $Total_order_quantity $message27 ,"; //סכום כל ההזמנה עד כה הוא ...שקל, עד כאן פירוט ההזמנה
}else{echo "<br> $message26: $Total_order_quantity $message27,";}
}else{
if($next_item===NULL){$note="$note id_list_message=t-$message28 ";}else{echo "id_list_message=t-$message28&go_to_folder=$next_item";}
}
}
}
}
if($next_item===NULL){$note="$note $message29: "; $Select_or_Continue=NULL; goto a;}
}
//------------------------------------------------------------------------------------
//אם המתקשר הקיש 9 לתשלום
if ($Select_or_Continue ==9 and $Order_quantity == 0){
echo "go_to_folder=$Payment_path";
}
//------------------------------------------------------------------------------------
//אם המתקשר הקיש 0 לתפריט ראשי
main_path:
if ($Select_or_Continue ==="0" and $Order_quantity == 0){
echo "go_to_folder=$Main_Menu_path";
}
$conn->close();
?>
הכל מסתובב סביב שליפה של נתון נצרך מטבלה זו, ונתון נוסף מטבלה אחרת וכו'
חשוב להדגיש, שהקוד לא מטפל באגורות.
וכאן המקום להודות בשם כלל המשתמשים לעורכים היקרים של הפורם הזה ולכל אלו שהופכים את הפורם למקום ענייני, מחכים ותועלתי (כל הנ"ל מבוסס על קוד הבסיס של bc98400 בשימושון PHP עמוד 3 -- תודה רבה!
https://www.call2all.co.il/f2/viewtopic ... F&start=20
בהצלחה! כתיבה וחתימה טובה לכל בית ישראל