单击保留按钮时,将sql表中的值从0更改为1

时间:2015-12-02 19:44:10

标签: php

我正在创建一个非常基本的图书馆系统,允许用户登录,注册,搜索图书并保留该图书。我有登录和注册功能工作,搜索数据库的功能也正常。当我想保留这本书时,我的问题出现了。当我单击保留按钮时它工作不会显示任何错误,但我的数据库将不会更新。 如果你们中的任何一个人能帮助我发现问题/问题所在,我将非常感激。

另外注意我知道我的代码不是很好并且可以进行注射我会在注射功能正常后进行注射。

我的代码在

下面
<?php 
    session_start(); 
    if(!isset($_SESSION['username']) || (trim($_SESSION['username']) == ''))  {
header("location: login.php");
exit();
}
?>
<html>
<head>
    <style  type="text/css"> 
     ul  li{ 
     list-style-type:none; 
     } 
    </style> 
    <title>Search for and Reserve a Book</title>
</head>

<p><body>
<h3>Book Details</h3>
<p>You  may search either by Book Title, Author or Book Category</p>

<form  method="post" action="search_submit.php?go"  id="searchform">
<input  type="submit" name="submit" value="Search">
</form>

</body>
</html>

<?php
    if(isset($_POST['submit'])){

    if(isset($_GET['go']))
    {
        if(preg_match("/[^a-zA-Z0-9]+/", $_POST['name']))
        {

              $name=$_POST['name'];


              //connect  to the database
              $db=mysql_connect  ("localhost", "root",  "") or die ('I cannot connect to the database  because: ' . mysql_error());
              //-select  the database to use
              $mydb=mysql_select_db("bookreservations");
              //-query  the database table
              $sql="SELECT * FROM books WHERE  Author LIKE '%" . $name . "%' OR BookTitle LIKE '%" . $name  ."%'";

              //-run  the query against the mysql query function 
                $result=mysql_query($sql);

                //-create  while loop and loop through result set
              while($row=mysql_fetch_array($result))
              {
                      $ID = $row['id'];
                      $ISBN = $row['ISBN'];
                      $Author  =$row['Author'];
                      $BookTitle=$row['BookTitle'];
                      $CategoryId=$row['CategoryId'];

                        echo '<table cellpadding ="10" border = "2">';

                      echo '<th> ID </th>';
                      echo '<th> Author </th>';
                      echo '<th> Book Title </th>';
                      echo '<th> CategoryId </th>';
                      echo '<th> ISBN </th>';
                      echo '<th> Reserved </th>';
                      echo '<th> Reserve Book </th>';


                      echo'<tr>';
                      echo'<td>' .$ID.'</td>';
                      echo'<td>' .$BookTitle.'</td>';
                      echo'<td>' .$Author.'</td>';
                      echo'<td>' .$CategoryId.'</td>';
                      echo'<td>' .$ISBN.'</td>';
                      echo'<td>' .$Reserved.'</td>';
                      echo'<td><form method = "post" action="reserve.php">';
                      echo'<input type="submit" name="submit1" value="Reserve">    </input>
            </td>';
            if(isset($_POST['submit1']))
            {
                $sql = "UPDATE books SET 'Reserved = 1' WHERE 'Reserved=0'";    
            }
            echo'</tr>';

            echo '</table>';     

                }

        }

        else
        {
             echo  "<p>Please enter a valid search query</p>";
        }
    }
}
?>

1 个答案:

答案 0 :(得分:0)

a)你的sql中有一个错误。删除保留= X周围的单引号并使用:

"UPDATE books SET Reserved = 1 WHERE Reserved=0"

问题:这将保留所有书籍。

b)要使本声明仅保留1本书,您需要将保留的书的ID添加到保留表格中:

echo'<td><form method = "post" action="reserve.php?book=' . $ID. '">';
echo'<input type="submit" name="submit1" value="Reserve"> 

c)使用b)中的$ ID仅保留$ ID

指定的图书
"UPDATE books SET Reserved = 1 WHERE Reserved=0 and id = ". $_GET['book']

d)SQL注入是代码中的一个严重问题。请对所有sql语句进行双重和三重检查。例如。来自d)的陈述受到影响。我会将此作为练习留给您,或者只是提出另一个关于如何使您的代码安全的问题。