PHP使用session从数据库中获取clientID

时间:2015-02-26 17:46:26

标签: php mysql session

我有一个登录页面,当用户成功登录时,它会被带到欢迎页面,然后他可以点击预订活动。当用户点击预订活动时,会显示日历,其中包含可以预订的所有活动。当用户单击以预订某些活动时,应使用应从登录页面和activityEventID获取的clientID更新clientEvent表。但是我得到一个错误:无法添加或更新子行:外键约束失败(fitnessconnectclientevent,CONSTRAINT clientevent_ibfk_1 FOREIGN KEY(activityEventID)REFERENCES {{ 1}}(activityevent))

如果我没有从登录页面或其他内容中正确获取clientID,我不确定我在哪里犯了错误。

此外,我还不确定如何传递activityEventID a href =' CreateNewActivityBooking.php?activityEventID = activityEventID'  我用过这个,但我不确定它是否正确

要创建两个表,我使用了这个

activityEventID

这是login.html

 create table activityEvent
 (
   activityEventID integer auto_increment,
   date date,
   title varchar(30),
   description varchar(50),
   price integer,
   location varchar(30),
   startTime time,
   endTime time,
   activityTitle varchar(30),
   noOfPlaces integer,
   restricted varchar(30),
   personalTrainer_CoachID integer,
    primary key (activityEventID),
   foreign key (personalTrainer_CoachID) references personalTrainer_Coach(personalTrainer_CoachID)
   );

create table clientEvent
(
  clientEventID integer auto_increment,
  activityEventID integer,
  clientID integer,
  primary key (clientEventID),
  foreign key (activityEventID) references activityEvent(activityEventID),
  foreign key (clientID) references client(clientID)
 );

的login.php

 <HTML>

  <BODY>

        <FORM action='login.php' method = 'POST'>
         <label>Enter your username</label>
         <input name="username" type="text"/>
         <br/>
         <label>Enter your password</label>
         <input name="password" type="password"/>
         <br/>
         <input type="submit"/>
     </FORM>

  </BODY>


  </HTML>

welcome.html这只是一个没有太多功能的开始

<?php

   session_start();


   $userName = $_POST['username'];
   $passWord = $_POST['password'];

   require('connection.php');


    $dbpwd="";
    $con=mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_database);

 $sql ="select clientID, password from client where userName = '$userName'";

 $result = mysqli_query($con,$sql);

 while($row = $result->fetch_assoc())
 {
    $dbpwd =$row['password'];

    $clientID =$_SESSION['clientID'];
    $_SESSION['clientID']='$clientID';


}

   if($dbpwd == $passWord)
 {


     header("Location: welcome.html");

 }
 else
 {
    echo"Passwords do not match";
    echo"</br>";
    echo"Please Try Again";


  }

  ?>

calenderTest2.php

<html>
  <head>
      <title> Welcome </title>
   </head>
    <body>
     <h1>Welcome!</h1>

     <button onClick="window.location='calendarTest2.php';" > Book   Activity</button>
  </body>
  </html>

BookingsDB.php

<?php


   $monthNames = Array("January", "February", "March", "April", "May",  "June", "July", "August", "September", "October", "November", "December");
 ?>

 <?php
  if (!isset($_REQUEST["month"]))
      $_REQUEST["month"] = date("n");
   if (!isset($_REQUEST["year"]))
      $_REQUEST["year"] = date("Y");
 ?>
 <?php
    $cMonth = $_REQUEST["month"];
    $cYear = $_REQUEST["year"];
    $prev_year = $cYear;
    $next_year = $cYear;
    $prev_month = $cMonth-1;
    $next_month = $cMonth+1;
    if ($prev_month == 0 )
      {
            $prev_month = 12;
            $prev_year = $cYear - 1;
      }
    if ($next_month == 13 )
      {
         $next_month = 1;
         $next_year = $cYear + 1;
      }

     require("BookingsDB.php");
     $myBookingsDB = new BookingsDB();
     $bookings = $myBookingsDB->getMonthlyBookings($cMonth,$cYear);


    ?>
    <div align="left">
    <table width="400" border="5" align="left" id="calendar">
    <tr align="center">
    <td bgcolor="#999999" style="color:#FFFFFF"><table width="100%" border="0"
    cellspacing="0" cellpadding="0">
    <tr>
    <td width="50%" align="left"><a href="<?php echo $_SERVER["PHP_SELF"]
      . "?month=". $prev_month . "&year=" . $prev_year; ?>"
     style="color:#FFFFFF">Previous</a></td>
    <td width="50%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"]
    . "?month=". $next_month . "&year=" . $next_year; ?>"
     style="color:#FFFFFF">Next</a></td>
    </tr>
    </table></td>
    </tr>
     <tr>
     <td align="center"><table width="100%" border="2" cellpadding="2"
      cellspacing="2">
      <tr align="center">
      <td colspan="7" bgcolor="#999999" style="color:#FFFFFF"><strong> <?php
      echo $monthNames[$cMonth-1].' '.$cYear; ?></strong></td>
       </tr>
       <tr>
       <td align="center" bgcolor="#999999" style="color:#FFFFFF">
       <strong>S</strong></td>
       <td align="center" bgcolor="#999999" style="color:#FFFFFF">
       <strong>M</strong></td>
      <td align="center" bgcolor="#999999" style="color:#FFFFFF">
       <strong>T</strong></td>
       <td align="center" bgcolor="#999999" style="color:#FFFFFF">
        <strong>W</strong></td>
        <td align="center" bgcolor="#999999" style="color:#FFFFFF">
        <strong>T</strong></td>
        <td align="center" bgcolor="#999999" style="color:#FFFFFF">
        <strong>F</strong></td>
         <td align="center" bgcolor="#999999" style="color:#FFFFFF">
      <strong>S</strong></td>
   </tr>


 <?php

    require("connection.php");

    $con=mysqli_connect("$mysql_host","$mysql_user","$mysql_password","$mysql_database");

   // Check connection
if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }


   $timestamp = mktime(0,0,0,$cMonth,1,$cYear);
   $maxday = date("t",$timestamp);
    $thismonth = getdate ($timestamp);
     $startday = $thismonth['wday'];
     $today = getdate();


     for ($i=0; $i<($maxday+$startday); $i++)
     {
       if(($i % 7) == 0 )
    {
        echo "<tr> ";
    }

  if($i < $startday)
   {
     echo "<td></td> ";
   }
  else
  {
      $day = $i - $startday + 1;
      $thisDate = new DateTime("$cYear-$cMonth-$day");
     $jsEvent[] = "document.getElementById('trigger" . $i . "').onclick =  function() {showForm()};";
      echo "<td align='center' valign='middle' height='20px'><a href='CreateNewActivityBooking.php?activityEventID=activityEventID' id='trigger" . $i . "'>". ($i - $startday + 1) . "</a>";



     foreach ($bookings as $key => $value)
       {

         if ($thisDate->format('Y-m-d') == $value['date']->format('Y-m-d'))
         {

            echo " ";
            echo $value['title'];
            echo " ";
            echo $value['startTime'];
        }

 }

     echo "</td>";

 }
  if(($i % 7) == 6 )
   {
       echo "</tr> ";
   }
  }

 mysqli_close($con);
?>

<script type="text/javascript">
 <?php foreach($jsEvent as $event)
  {
      echo $event;
   }

  ?>

    function showForm()
   {
      document.getElementById('timeslots').style.display="block";
   };
   </script>
   </table></td>
   </tr>
   </table>

CreateNewActivityBooking.php

<?php

session_start();



class BookingsDB
{
  private $bookings = array();
  private $con;

 public function BookingsDB()
  {
      require("connection.php");
      $this->con = mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_database);

  }

 public function getMonthlyBookings($thisMonth,$thisYear)
 {
     $sql = "SELECT activityEventID,date,title,startTime  FROM activityEvent WHERE YEAR(date) = $thisYear AND MONTH(date) = $thisMonth";
     $result = mysqli_query($this->con,$sql);
     while($row=mysqli_fetch_array($result))
     {

        $this->bookings[] = array('date'=>new DateTime($row['date']), 'title'=>$row['title'],'startTime'=>$row['startTime']);

        //$activityEventID =$_SESSION['activityEventID'];
        //$_SESSION['activityEventID']='activityEventID';

    }
    return $this->bookings;
}

  public function close()
  {
       mysqli_close($this->con);
   }

 }

 ?>

1 个答案:

答案 0 :(得分:0)

通过查看代码,您似乎没有将activityEventID存储在会话变量中。并且您正在尝试在CreateNewActivityBooking.php页面上访问它,同时将事件插入“clientEvent”表。

查看代码中的以下行:

$clientID=$_SESSION['clientID'];
$activityEventID =$_SESSION['activityEventID']; //Here $_SESSION['activityEventID'] doesn't exists

由于“clientEvent”表具有“activityEventID”列的外键约束。由于此约束将失败,因此不会执行查询并且您收到错误。

所以基本上你需要找到一种在那里传递正确值的方法。

编辑:至于您的评论,您发布的脚本似乎并未在会话中存储“activityEventID”,因为您引用的行实际上是对您发布的脚本进行了评论。

具体到这里你需要做什么。

On BookingsDB.php

$this->bookings[] = array('date'=>new DateTime($row['date']), 'title'=>$row['title'],'startTime'=>$row['startTime'], 'activityEventID'=>$row['activityEventID']);

在你的calenderTest2.php

echo "<td align='center' valign='middle' height='20px'>";
foreach ($bookings as $key => $value)
{

         if ($thisDate->format('Y-m-d') == $value['date']->format('Y-m-d'))
         {
            echo "<a href='CreateNewActivityBooking.php?activityEventID=".$value['activityEventId']."' id='trigger" . $i . "'>". ($i - $startday + 1) . "</a>";
            echo " ";
            echo $value['title'];
            echo " ";
            echo $value['startTime'];
        }

 }
echo '</td>';

现在,您要在每个链接的查询字符串中传递activityEventID。您可以在CreateNewActivityBooking.php中检索此内容,如下所示:

$activityEventID =$_GET['activityEventID'];

您可能需要在布局方面重新格式化一些内容,但我认为这是应该如何完成的。