الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف ربط 2 جداول مع بعض واظهارفهم في فورم

بدأه Sameh11 في 11 يناير 2011 · 26 رد · 4,086 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

لو عندي جدول للموظفيين وجدول للمهارات

جدول الموظفيين

رقم الموظف

اسم الموظف

عنوان الموظف

جدول المهارات

رقم المهارة

اسم المهارة

رقم الموظف

كل ما استطعت فعلة هو بناء بالدريم ويفر صفحة الموظفيين ولكني لا اعرف كيف ربطة واضافة خانة جديدة للمهارات باستخدام الـ php و mysql والدريم ويفر

#2

لديك رقم الموظف فى الجدولين اعمل join فى الإستعلام

ولإضافة مهارة جديدة قم بعمل insert فى جدول المهارات برقم الموظف

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

ما اريد فعلة تمام

هي فورم

يكون فيها

اسم الموظف

عنوان الموظف

اسم المهارة

ومن ثم املاء البيانات المطلوبة

وليكن اسم الموظف

احمد

عنوانة

المهارة المحادثة علي سبيل المثال

مع العلم ان هذة البيانات تضاف اتوماتيكيا في الجدوليين

اي في جدول الموظفيين وجدول المهارات ..

وشكرا

#4

عليك أن تراجع تصميم قواعد البيانات و اوامر SQL.

بالنسبة لسؤالك و بفرض جدول الموظفين هو Workers و جدول المهارات هو Skills يكون الإستعلام كالآتي:

SELECT * FROM  workers, skills WHERE  workers.number  =  skills.number

مصادر:

http://www.databaseprimer.com/relationship.html

http://www.tekstenuitleg.net/en/articles/software/database-design-tutorial/intro.html

http://www.w3schools.com/sql/default.asp

1

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#5
/* +-----------------+			+--------------+
 * | employees table |			| skills table |
 * +-----------------+			+--------------+
 * | empID           |< auto increment	| sID          |< auto increment
 * | empFirstName    |			| sName        |
 * | empLastName     |			| empID        |
 * | empAddress	     |			|	       |
 * +-----------------+			+--------------+ 
 */
insert into employees (empFName, empLName, empAddress) values ('محمد','المصطفى','سوريا دمشق المزة')

insert into skills (sName, empID) values ('المهارة',(select empID from employees where empFirstName = 'محمد' and empLastName = 'المصطفى'))

ملاحظات:

1- من الأفضل إضافة جدول خاص بالعناوين بشكل تفصيلي بحيث يتم فصل العنوان إلى حقول مناسبة (الدولة، المدينة، اسم الشارع، المنطقة) مثلاً.

2- عند وجود موظف باسم "محمد المصطفى" سابقاً فإن الطريقة المذكورة ستتسبب بمشكلة في الاستعلام الثاني حيث سيتم إعادة أكثر من record.

لتفادي هذه المشكلة نقوم باحتساب الـ empID بأنفسنا وذلك من خلال جلب قيمة empID الأولى بعد تنفيذ الاستعلام التالي:

select top 1 empID from employees order by empID desc

ونزيد هذه القيمة بمقدار 1 ونعتبرها الـ empID للموظف الجديد وتصبح الاستعلامات السابقة بالشكل:

/* +-----------------+			+--------------+
 * | employees table |			| skills table |
 * +-----------------+			+--------------+
 * | empID           |< no increment	| sID          |< auto increment
 * | empFirstName    |			| sName        |
 * | empLastName     |			| empID        |
 * | empAddress	     |			|	       |
 * +-----------------+			+--------------+ 
 */
insert into employees (empID, empFName, empLName, empAddress) values (105, 'محمد','المصطفى','سوريا دمشق المزة')

insert into skills (sName, empID) values ('المهارة',105)

يرجى الانتباه إلى أننا لن نستخدم Auto Increment في الجدول الأول في هذه الحالة.

2

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#6

شكرا جزيلا ساطبق الكلام وسوافيكم بالاخبار

#7

شرح المشكة بالتفصيل الا وهي ..

عندي الان جدولان .. وعلي سبيل المثال كما ذكر الاخ الكريم Xacker

جدول الموظفيين

وجدول تفاصيل عنوان الموظفيين

اي في جدول الموظفين

كود الموظف ( مفتاح اساسي )

اسم الموظف

جدول العناوين

كود العنوان ( مفتاح اساسي )

العنوان 1

العنوان 2

كود الموظف ( مفتاج اجنبي )

--------------

ما اريد فعلة هو

اني بنيت الفورم التي سوف يدخل فيها الموظف اسمة وعنوانة

الملاحظ انة عندما يقوم الموظف بادخال اسمة في جدول الموظفيين وعنوانة في جدول العناوين

ليكن علي سبيل المثال

كود الموظف 1

اسم الموظف احمد

----------

كود العنوان 1

العنوان 1 - شارع أ

العنوان 2 - شارع ب

كود الموظف 1

---------------

لما ادخل البيانات من صفحة واحدة تدخل البيانات ولكن المشكلة هي

انة يقوم بادخال البيانات صحيحة ولكن في جدول العناوين يكون كود الموظف ( صفر - او 0 ) ؟؟ لا اعلم لماذا مع انة من المفترض ان يكون ( واحد او 1 )

اتمني ان تكون مشكلتي وصلت ..

#8

- ما هو نمط الحقل الخاص بكود الموظف في جدول العناوين؟

- ضع نسخة كافية من الكود الذي تستخدمه للنموذج ولكود PHP+SQL الذي تستخدمه في تسجيل البيانات في القاعدة.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

هذا كان مثال فقط اردت ان افهم عليه ..

ولكن في الحقيقة عندي جداول خري

وهي

جدول فية اسماء الفنادق

وجدول اخر فية مستوي الفندق ( اي عدد النجوم )

الجدول الاول :

tbl_categories

كود الفندقPK

اختصار الفندق cat_code

اسم الفندقcat_name

التفاصيل'description'

الجدول الثاني :

tbl_cat_details

كود للترقيمPK

مستوي الفندقcat_rating

كود الفندقFK

<?php require_once('Connections/GoldenCityTravel.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['textfield'], "text"),
                       GetSQLValueString($_POST['textfield2'], "text"),
                       GetSQLValueString($_POST['textfield3'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_cat_details (cat_details_id, cat_rating) VALUES (%s, %s)",
                       GetSQLValueString($_POST['textfield4'], "int"),
                       GetSQLValueString($_POST['textfield4'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_cat_details (cat_rating) VALUES (%s)",
                       GetSQLValueString($_POST['rate'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['htoelName'], "text"),
                       GetSQLValueString($_POST['hoteCode'], "text"),
                       GetSQLValueString($_POST['description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['htoelName'], "text"),
                       GetSQLValueString($_POST['hoteCode'], "text"),
                       GetSQLValueString($_POST['description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['htoelName'], "text"),
                       GetSQLValueString($_POST['hoteCode'], "text"),
                       GetSQLValueString($_POST['description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tbl_cat_details (cat_rating) VALUES (%s)",
                       GetSQLValueString($_POST['cat_rating'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
$query_Recordset1 = "SELECT tbl_categories.cat_name, tbl_categories.cat_code, tbl_categories.cat_description, tbl_cat_details.cat_rating FROM tbl_categories, tbl_cat_details WHERE tbl_categories.cat_id = tbl_cat_details.cat_id";
$Recordset1 = mysql_query($query_Recordset1, $GoldenCityTravel) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
  <p>
    <label for="cat_code">hotel name</label>
    <input name="cat_name" type="text" id="textfield2" value="<?php echo $row_Recordset1['cat_name']; ?>" />
  </p>
  <p>
    <label for="cat_description">hotel code</label>
    <input name="cat_code" type="text" id="textfield3" value="<?php echo $row_Recordset1['cat_code']; ?>" />
  </p>
  <p>
    <label for="cat_rating">desc</label>
    <input name="cat_description" type="text" id="textfield4" value="<?php echo $row_Recordset1['cat_description']; ?>" />
  </p>
  <p>
    <label for="textfield5">rate</label>
    <input name="cat_rating" type="text" id="textfield5" value="<?php echo $row_Recordset1['cat_rating']; ?>" />
  </p>
  <input type="hidden" name="MM_insert" value="form1" />
ok
<input type="submit" name="button" id="button" value="Submit" />
</form>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>

هذا هو الكود

وشاكر لك مجهودك

تم تعديل هذه المشاركة بواسطة Sameh11 في 14 يناير 2011 في 03:32

#10

ماهي المشكلة بالضبط التي تواجهها في هذا الكود.

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#11

على حسب ما فهمت من السؤال السابق لك فأنت لديك مشكلة في إدخال أرقام إلى قاعدة البيانات، جرب إستخدام type casting كالآتي:

$

toint = (int)$_POST['textfield4']

لديك مشكل آخر هنا:

GetSQLValueString($_POST['htoelName'], "text")

أليس من المفروض أن تكون hotelcode .

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#12

هذا الكود من جديد

<?php require_once('Connections/GoldenCityTravel.php'); ?>
<?php require_once('Connections/GoldenCityTravel.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO tbl_cat_details (cat_rating) VALUES (%s)",
                       GetSQLValueString($_POST['cat_rating'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['cat_name'], "text"),
                       GetSQLValueString($_POST['cat_code'], "text"),
                       GetSQLValueString($_POST['cat_description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
$query_categories = "SELECT tbl_categories.cat_name, tbl_categories.cat_code, tbl_categories.cat_description, tbl_cat_details.cat_rating FROM tbl_categories, tbl_cat_details WHERE tbl_cat_details.cat_id = tbl_categories.cat_id";
$categories = mysql_query($query_categories, $GoldenCityTravel) or die(mysql_error());
$row_categories = mysql_fetch_assoc($categories);
$totalRows_categories = mysql_num_rows($categories);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="form2" name="form2" method="POST" action="<?php echo $editFormAction; ?>">
  <p>
    <label for="cat_name">Name</label>
    <input name="cat_name" type="text" id="cat_name" value="<?php echo $row_categories['cat_name']; ?>" />
  </p>
  <p>
    <label for="cat_code">Code</label>
    <input name="cat_code" type="text" id="cat_code" value="<?php echo $row_categories['cat_code']; ?>" />
  </p>
  <p>
    <label for="cat_description">Description</label>
    <input name="cat_description" type="text" id="cat_description" value="<?php echo $row_categories['cat_description']; ?>" />
  </p>
  <p>
    <label for="cat_rating">Rate</label>
    <select name="cat_rating" id="cat_rating">
      <?php
do {  
?>
      <option value="<?php echo $row_categories['cat_rating']?>"><?php echo $row_categories['cat_rating']?></option>
      <?php
} while ($row_categories = mysql_fetch_assoc($categories));
  $rows = mysql_num_rows($categories);
  if($rows > 0) {
      mysql_data_seek($categories, 0);
	  $row_categories = mysql_fetch_assoc($categories);
  }
?>
    </select>
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Submit" />
  </p>
  <input type="hidden" name="MM_insert" value="form2" />
</form>
</body>
</html>
<?php
mysql_free_result($categories);

?>

المشكلة كما في الصور ..

81384418.jpg

كما تلاحظون ان الـ cat_id نزل في الداتا بيس في الجدول الثاني علي انة رقم صفر ؟ ولكنة في الحقيقة المفترض ان يكون رقم 8 ؟

#13

أخي ما هو نوع جداول قاعدة البيانات؟ هل هو InnoDB ؟

ما اقصده هل الـ Foreign key و الـ reference فعال ؟

إن كان فعال فالمشكلة لديك أنك تقوم بادخال البيانات إلى جدول الـفرعي (tbl_cat_details) قبل الجدول الرئيسي (tbl_categories )

و لا تقوم بادخال قيمة للمفتاح الفرعي بالتالي فهو لا يجد مفتاح ليقوم بربطه معه فيضع لك Default value والله أعلم

بحسب ما أرى في الكود الخاص بك هنا :

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO tbl_cat_details (cat_rating) VALUES (%s)",
   					GetSQLValueString($_POST['cat_rating'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
   					GetSQLValueString($_POST['cat_name'], "text"),
   					GetSQLValueString($_POST['cat_code'], "text"),
   					GetSQLValueString($_POST['cat_description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertSQL, $GoldenCityTravel) or die(mysql_error());
}

الشرطان متماثلان فما الداعي لوجود two blocks؟

يمكنك وضع كل الكود المقتبس في شرط واحد

وإذا لاحظت من الكود المقتبس أنك تقوم كما ذكرتُ بالادخال إلى tbl_cat_details قبل tbl_categories و هذه هي المشكلة والله أعلم

لذلك عليك عكس الترتيب و ادخال قيمة المفتاح الفرعي مع امكانية وضع الكود السابق في block واحدة كالتالي :

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertCat = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)",
   					GetSQLValueString($_POST['cat_name'], "text"),
   					GetSQLValueString($_POST['cat_code'], "text"),
   					GetSQLValueString($_POST['cat_description'], "text"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result1 = mysql_query($insertCat, $GoldenCityTravel) or die(mysql_error());
$fk_id=mysql_insert_id();

  $insertDetails = sprintf("INSERT INTO tbl_cat_details (cat_id,cat_rating) VALUES (%s,%s)",
GetSQLValueString($fk_id, "int"),
GetSQLValueString($_POST['cat_rating'], "int"));

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
  $Result2 = mysql_query($insertDetails, $GoldenCityTravel) or die(mysql_error());

}

جرب ذلك و اخبرنا بالنتيجة

بتوفيق الله...

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 15 يناير 2011 في 01:05

Everything will be fine when we TALK LESS, DO MORE


#14

شكرا اخي محمد للاهتمام

لقد قمت بعكسهم وظلت هي النتيجة

وقبل ذلك قمت بتحويل المحرك الي innodb

الكود الجديد

<?php require_once('Connections/GoldenCityTravel.php'); ?>
<?php require_once('Connections/GoldenCityTravel.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}



if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) { 
  $insertCat = sprintf("INSERT INTO tbl_categories (cat_name, cat_code, cat_description) VALUES (%s, %s, %s)", 
                                GetSQLValueString($_POST['cat_name'], "text"), 
                                GetSQLValueString($_POST['cat_code'], "text"), 
                                GetSQLValueString($_POST['cat_description'], "text")); 

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel); 
  $Result1 = mysql_query($insertCat, $GoldenCityTravel) or die(mysql_error()); 

  $insertDetails = sprintf("INSERT INTO tbl_cat_details (cat_rating) VALUES (%s)", 
                                GetSQLValueString($_POST['cat_rating'], "int")); 

  mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel); 
  $Result2 = mysql_query($insertDetails, $GoldenCityTravel) or die(mysql_error()); 



}
mysql_select_db($database_GoldenCityTravel, $GoldenCityTravel);
$query_categories = "SELECT tbl_categories.cat_name, tbl_categories.cat_code, tbl_categories.cat_description, tbl_cat_details.cat_rating FROM tbl_categories INNER JOIN  tbl_cat_details on tbl_cat_details.cat_id = tbl_categories.cat_id";
$categories = mysql_query($query_categories, $GoldenCityTravel) or die(mysql_error());
$row_categories = mysql_fetch_assoc($categories);
$totalRows_categories = mysql_num_rows($categories);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form id="form2" name="form2" method="POST" action="<?php echo $editFormAction; ?>">
  <p>
    <label for="cat_name">Name</label>
    <input name="cat_name" type="text" id="cat_name" value="<?php echo $row_categories['cat_name']; ?>" />
  </p>
  <p>
    <label for="cat_code">Code</label>
    <input name="cat_code" type="text" id="cat_code" value="<?php echo $row_categories['cat_code']; ?>" />
  </p>
  <p>
    <label for="cat_description">Description</label>
    <input name="cat_description" type="text" id="cat_description" value="<?php echo $row_categories['cat_description']; ?>" />
  </p>
  <p>
    <label for="cat_rating">Rate</label>
    <select name="cat_rating" id="cat_rating">
      <?php
do {  
?>
      <option value="<?php echo $row_categories['cat_rating']?>"><?php echo $row_categories['cat_rating']?></option>
      <?php
} while ($row_categories = mysql_fetch_assoc($categories));
  $rows = mysql_num_rows($categories);
  if($rows > 0) {
      mysql_data_seek($categories, 0);
	  $row_categories = mysql_fetch_assoc($categories);
  }
?>
    </select>
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Submit" />
  </p>
  <input type="hidden" name="MM_insert" value="form2" />
</form>
</body>
</html>
<?php
mysql_free_result($categories);

?>

بيانات الجدول الاول من قاعدة البيانات mysql

-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 15, 2011 at 12:02 AM
-- Server version: 5.1.41
-- PHP Version: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `goldencitytravel`
--

-- --------------------------------------------------------

--
-- Table structure for table `tbl_categories`
--

CREATE TABLE IF NOT EXISTS `tbl_categories` (
  `cat_id` int(5) NOT NULL AUTO_INCREMENT,
  `cat_name` varchar(25) NOT NULL,
  `cat_code` varchar(7) NOT NULL,
  `cat_description` varchar(20) NOT NULL,
  PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

--
-- Dumping data for table `tbl_categories`
--

INSERT INTO `tbl_categories` (`cat_id`, `cat_name`, `cat_code`, `cat_description`) VALUES
(1, 'Sheraton Cairo', 'HSHCA', 'hotel rooms'),
(2, 'Four Seasons Alexandria', 'HFSAL', 'hotel rooms'),
(11, 'Sheraton Cairo', 'HSHCA', 'hotel rooms'),
(12, 'Sheraton Cairo', 'HSHCA', 'hotel rooms');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

بيانات الجدول الثاني من قاعدة البيانات mysql

-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 15, 2011 at 12:02 AM
-- Server version: 5.1.41
-- PHP Version: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `goldencitytravel`
--

-- --------------------------------------------------------

--
-- Table structure for table `tbl_cat_details`
--

CREATE TABLE IF NOT EXISTS `tbl_cat_details` (
  `cat_details_id` int(5) NOT NULL AUTO_INCREMENT,
  `cat_id` int(5) NOT NULL,
  `cat_rating` int(5) NOT NULL,
  PRIMARY KEY (`cat_details_id`),
  KEY `fk_cat_id` (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

--
-- Dumping data for table `tbl_cat_details`
--

INSERT INTO `tbl_cat_details` (`cat_details_id`, `cat_id`, `cat_rating`) VALUES
(1, 1, 4),
(2, 2, 5);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

تم تعديل هذه المشاركة بواسطة Sameh11 في 15 يناير 2011 في 01:06

#15

لقد قمت بتصحيح بعض الاخطاء الموجودة في الرد السابق ولكن يبدو أني تأخرت في التعديل :)

جرب الكود الموجود الآن في الرد السابق...

اضافة :

أين جملة الـ reference في جملة انشاء الجدول الثاني؟

يجب أن يتم الربط بواسطة جملة الـ reference هكذا مثلا:

FOREIGN KEY (cat_id) REFERENCES tbl_categories (cat_id)

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 15 يناير 2011 في 01:35

1

Everything will be fine when we TALK LESS, DO MORE


#16

ممتاز والله ااخي الكريم ..

الا قولت لي ما التعديل تماما لاني سوف احتاجة لاني عندي صفحات كثيرة علي العمل بها ..

وجزاك الله كل خير واتمني شرح مبسط لاني مبتدا في الاكواد واستعمل الدريم ويفر ..

#17

التعديل كان أني كنت قد نسيت وضع السطر :

$fk_id=mysql_insert_id();

هذا التابع يقوم بارجاع آخر id تم ادخاله إلى الجدول أو بمعنى آخر الـ id الذي تم ادخاله في آخر جملة insert تمت على الجدول

وهذه هو كل التعديل

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 15 يناير 2011 في 01:40

Everything will be fine when we TALK LESS, DO MORE


#18

جملة الـ reference ؟

هل يعني ان المفتاح الاجنبي لا يعمل ؟

لقد قمت بتعديلها مرارا وتكرارا ولكنة يخرج علي هذة الصورة ؟

كيف اعدلها من داخل ال phpmyadmin

#19

جرب بعد اختيار قاعدة البيانات

الدخول إلى تبويب sql

و كتابة الجملة التالية :

ALTER TABLE tbl_cat_details ADD FOREIGN KEY (cat_id) REFERENCES tbl_categories (cat_id);

Everything will be fine when we TALK LESS, DO MORE


#20

كتبت هذا الكود كثيرا ولكن لا اعلم لماذا لا يتغير ..

Your SQL query has been executed successfully ( Query took 0.0905 sec )
ALTER TABLE tbl_cat_details ADD FOREIGN KEY ( cat_id ) REFERENCES tbl_categories( cat_id ) ;

النتيجة

CREATE TABLE IF NOT EXISTS `tbl_cat_details` (
  `cat_details_id` int(5) NOT NULL AUTO_INCREMENT,
  `cat_id` int(5) NOT NULL,
  `cat_rating` int(5) NOT NULL,
  PRIMARY KEY (`cat_details_id`),
  KEY `fk_cat_id` (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;
#21

حسناً للتأكد من أن الـ foreign key يعمل بشكل جيد

جرب ادخال قيمة إليه غير موجودة في الجدول الرئيسي

أي لنفرض أن لدينا في الجدول الرئيسي المعرفات (id) التالية : 1و2و3

دعنا نجرب ادخال id إلى جدول tbl_cat_details غير موجود في tbl_categories

مثلا :

insert into tbl_cat_details values(null,5,4);

جرب تنفيذ هذه الجملة في تبويب sql

طبعا هذا بفرض أن الرقم 5 غير موجود في الجدول الرئيسي كـ cat_id

إن كان الـ foreign key فعال يجب أن ترد الجملة السابقة خطأ

جرب ذلك و اخبرنا بالنتيجة

Everything will be fine when we TALK LESS, DO MORE


#22

النتيجة

#1452 - Cannot add or update a child row: a foreign key constraint fails (`goldencitytravel`.`tbl_cat_details`, CONSTRAINT `tbl_cat_details_ibfk_2` FOREIGN KEY (`cat_id`) REFERENCES `tbl_categories` (`cat_id`))

:)

#23

شكرا جزيلا لك

Mohammad Pro,you're really pro

====

ارجو التواصل معي علي هذة الصفحة ان واجهتني مشاكل اخري مثل هذة لاني الان بصدد التطبيق علي بعض الصفحات الاخري ..

#24

جيد جداً

الآن اتضح الموضوع أكثر

الذي يحصل هنا أنه تم انشاء قيد باسم fk_cat_id و هذا القيد يحتوي على جملة انشاء الـ fk مع جملة الـ reference

ولكن الغريب أنه لم يتم تصدير جملة انشاء هذا القيد و بالتالي سيتوجب عليك انشاء القيد بواسطة الجملة التي استخدمناها قبل قليل لانشاء القيد إذا قمت باستيراد قاعدة البيانات إلى جهاز أو مخدم mysql جديد والله أعلم

بالتوفيق أخي الكريم

Everything will be fine when we TALK LESS, DO MORE


#25

شاكر لك :)

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…