PHP PDO Crud建议

时间:2017-04-10 18:36:21

标签: php mysql pdo

我刚刚开始学习PDO,并设法在一张桌子上进行简单的CRUD操作。

我只是从表中做一个SELECT *。但是这个表有另一个表的外键,我宁愿显示该列的值而不是ID。

所以我的表格结构如下。我有一个带id和joketext的笑话表和一个外键authorId。作者表具有作者的authorId和名称。

我宁愿使用以下代码创建一个视图,而不是在笑话表上执行SELECT *:

MyCustomerNames

但是对于CRUD操作,我想在下拉列表中显示author.name,因此用户不会错误地输入错误的值。

这就是index.php的样子:

SELECT
joke.joketext,
author.name
FROM
author
INNER JOIN joke
 ON author.id = joke.authorid

我的编辑文件如下所示:

<?php
//including the database connection file
include_once("config.php");

//fetching data in descending order (lastest entry first)
$result = $dbConn->query("SELECT * FROM joke ORDER BY id DESC");
?>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <a href="add.html">Add New Data</a><br/><br/>

    <table width='80%' border=0>

    <tr bgcolor='#CCCCCC'>
        <td>Joke</td>
        <td>AuthorId</td>
        <td>Update</td>
    </tr>
    <?php     
    while($row = $result->fetch(PDO::FETCH_ASSOC)) {         
        echo "<tr>";
        echo "<td>".$row['joketext']."</td>";
        echo "<td>".$row['authorid']."</td>";
        echo "<td><a href=\"edit.php?id=$row[id]\">Edit</a> | <a href=\"delete.php?id=$row[id]\" onClick=\"return confirm('Are you sure you want to delete?')\">Delete</a></td>";        
    }
    ?>
    </table>

有人能给我一个关于至少编辑操作的提示,如何编写php代码吗?

感谢

1 个答案:

答案 0 :(得分:2)

如果您希望提供可供作者的选择元素供用户在编辑页面上进行选择,而不是让他们输入作者的ID号,那么您可以从数据库中选择所有作者并循环浏览它们,构建select元素的选项。 select元素可以向用户显示作者的姓名,但是将作者的ID传递回服务器。您也可以预先选择作者默认情况下向用户显示当前关联的作者,如果错误,他们只需要更改它。

首先,从数据库中选择所有作者:

$authorSql = 'SELECT * FROM author';
$authorQuery = $dbConn->prepare($authorSql);
$authorQuery->execute();

然后使用该数据构建一个select元素:

<select name="authorid">
<?php
    while($author = $authorQuery->fetch(PDO::FETCH_ASSOC)) {
        if ($author['id'] == $authorid) {
            //The author is currently associated to the joke, select it by default
            echo "<option value=\"{$author['id']}\" selected>{$author['name']}</option>";
        } else {
            //The author is not currently associated to the joke
            echo "<option value=\"{$author['id']}\">{$author['name']}</option>";
        }
    }
?>
</select>

输出可能如下所示:

<select name="authorid">
    <option value="1">George Carlin</option>
    <option value="2" selected>Richard Pryor</option>
    <option value="3">Don Rickles</option>
</select>

无论用户选择哪个选项,他们都会在页面上看到<option></option>标记之间的内容,但表单会将value属性的值传递给服务器{ {1}}参数。

生成select元素的代码会替换authorid并保留在<input type="text" name="authorid" value="<?php echo $authorid;?>">标记内。

希望我设法解决您的实际需求,如果我错过了您的问题的意图,请告诉我。

注意:我的代码未经过测试,因此可能需要进行一些调整。

编辑#1:修正了错误的变量名称。