Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
刷新PHP页面时,表内容不断添加_Php_Sql_Database_Page Refresh - Fatal编程技术网

刷新PHP页面时,表内容不断添加

刷新PHP页面时,表内容不断添加,php,sql,database,page-refresh,Php,Sql,Database,Page Refresh,我在PHP向数据库添加内容时遇到问题。每次我刷新页面时,它都会再次添加完全相同的值。我怎样才能让它停止那样做?我不知道为什么会这样 我希望它将值添加到数据库中一次,并将它们存储在那里。创建表并添加值后,将在页面上使用这些值。用户将能够添加更多值 它还添加用户在刷新时输入的任何内容 问题在于 $db_query = 'INSERT INTO `cars`' . ' (`id`, `make`, `model`, `year`, `color`, `engine`)' . ' VAL

我在PHP向数据库添加内容时遇到问题。每次我刷新页面时,它都会再次添加完全相同的值。我怎样才能让它停止那样做?我不知道为什么会这样

我希望它将值添加到数据库中一次,并将它们存储在那里。创建表并添加值后,将在页面上使用这些值。用户将能够添加更多值

它还添加用户在刷新时输入的任何内容

问题在于

$db_query = 'INSERT INTO `cars`' .
    ' (`id`, `make`, `model`, `year`, `color`, `engine`)' .
    ' VALUES' .
    ' (NULL, \'Citroen\', \'Saxo\', \'1997\', \'White\', 1.1),' .
    ' (NULL, \'Citroen\', \'C3\', \'2012\', \'Blue\', 1.4),' .
    ' (NULL, \'Volkswagen\', \'Golf\', \'2010\', \'Blue\', 1.8),' .
    ' (NULL, \'Ford\', \'Mondeo\', \'2009\', \'Black\', 1.6),' .
    ' (NULL, \'Renault\', \'Clio\', \'2010\', \'Silver\', 1.2);';
$result = mysqli_query($conn, $db_query);
完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Task 7</title>
</head>
<body>
<?php


// connection to the database start
$host = 'localhost';
$user = 'root'; // your username
$password = 'vertrigo'; // your password
$databaseName = 'db2'; // your database

$conn = mysqli_connect($host, $user, $password, $databaseName);

if (mysqli_connect_errno($conn)) {
    echo 'Failed to connect to MySQL: ' . mysqli_connect_error();
} else {
    echo 'have connection<br>';
}
// connection to the database end (output messages created)


// creating table with rows start
$db_query = 'CREATE TABLE IF NOT EXISTS `cars` (' .
    '`id` int(11) NOT NULL AUTO_INCREMENT,' .
    '`make` varchar(50) NOT NULL,' .
    '`model` varchar(50) NOT NULL,' .
    '`year` varchar(4) NOT NULL,' .
    '`color` varchar(50) NOT NULL,' .
    '`engine` decimal(2,1) NOT NULL,' .
    'PRIMARY KEY (`id`));';
$result = mysqli_query($conn, $db_query);
// creating table with rows end


// putting info in each column start
$db_query = 'INSERT INTO `cars`' .
    ' (`id`, `make`, `model`, `year`, `color`, `engine`)' .
    ' VALUES' .
    ' (NULL, \'Citroen\', \'Saxo\', \'1997\', \'White\', 1.1),' .
    ' (NULL, \'Citroen\', \'C3\', \'2012\', \'Blue\', 1.4),' .
    ' (NULL, \'Volkswagen\', \'Golf\', \'2010\', \'Blue\', 1.8),' .
    ' (NULL, \'Ford\', \'Mondeo\', \'2009\', \'Black\', 1.6),' .
    ' (NULL, \'Renault\', \'Clio\', \'2010\', \'Silver\', 1.2);';
$result = mysqli_query($conn, $db_query);
// putting info in each end


// add cars START
@$cars = $_POST['cars'];
if (isset($cars)) {
    $db_query = "INSERT INTO cars (make, model, year, color, engine) VALUES ('".$cars['0']."','".$cars['1']."','".$cars['2']."','".$cars['3']."','".$cars['4']."')";
    mysqli_query($conn, $db_query);
} else {
    echo 'Cars array does not exists and obtained from FORM.';
}
// add cars END


// select cars table if right output the headers start
$db_query = "SELECT * FROM cars WHERE id <> 0 ORDER BY year ASC";

if ($result = mysqli_query($conn, $db_query)) {
    echo  "    <table border='1'>";
    echo  "        <tr><td>Make</td><td>Year</td><td>model</td><td>color</td><td>engine</td></tr>";
    // select cars table if right output the headers end

    // while start, output the content of the colum.
    while ($row = mysqli_fetch_assoc($result)) {
    ?>
        <tr>
            <td><?php echo $row['make']; ?></td>
            <td><?php echo $row['year']; ?></td>
            <td><?php echo $row['model']; ?></td>
            <td><?php echo $row['color']; ?></td>
            <td><?php echo $row['engine']; ?></td>
        </tr>
    <?php
    }
    // endwhile

    echo "</table>";
}
?>
    <form action="index.php" method="post" name="zatupok">
        <fieldset>
            <legend>MY CARS</legend>
            <label>Make</label>
            <input type="text" name="cars[]">
            <label>Model</label>
            <input type="text" name="cars[]">
            <label>Year</label>
            <input type="text" name="cars[]">
            <label>Color</label>
            <input type="text" name="cars[]">
            <label>Engine</label>
            <input type="text" name="cars[]">
            <input type="submit">
        </fieldset>
    </form>
</body>
</html>
为什么在每次访问页面时都添加示例值 每次访问页面时都会执行PHP代码。它生成页面并动态写入其中的一部分,只是复制外部的所有内容,页面是脚本的输出。Apache或您使用的任何服务器软件都只是获取一个HTTP请求,执行您的脚本,获取其输出并以HTTP响应的形式发送给客户端

如果插入查询按原样无条件执行,则每次访问页面时也会执行该查询。这就是为什么要一次又一次地添加这些值

如何停止添加示例值 您可能希望检查cars表是否已创建,并仅在以下情况下执行insert查询:

// creating table with rows start
// CHANGED: Notice that IF NOT EXISTS is not used anymore!
//          Fails if table already exists, not touching its original contents.
$db_query = 'CREATE TABLE `cars` (' .
    '`id` int(11) NOT NULL AUTO_INCREMENT,' .
    '`make` varchar(50) NOT NULL,' .
    '`model` varchar(50) NOT NULL,' .
    '`year` varchar(4) NOT NULL,' .
    '`color` varchar(50) NOT NULL,' .
    '`engine` decimal(2,1) NOT NULL,' .
    'PRIMARY KEY (`id`));';
$result = mysqli_query($conn, $db_query);
// creating table with rows end


// putting info in each column start
$db_query = 'INSERT INTO `cars`' .
    ' (`id`, `make`, `model`, `year`, `color`, `engine`)' .
    ' VALUES' .
    ' (NULL, \'Citroen\', \'Saxo\', \'1997\', \'White\', 1.1),' .
    ' (NULL, \'Citroen\', \'C3\', \'2012\', \'Blue\', 1.4),' .
    ' (NULL, \'Volkswagen\', \'Golf\', \'2010\', \'Blue\', 1.8),' .
    ' (NULL, \'Ford\', \'Mondeo\', \'2009\', \'Black\', 1.6),' .
    ' (NULL, \'Renault\', \'Clio\', \'2010\', \'Silver\', 1.2);';
// CHANGED: Executing the query only if previous query (`CREATE TABLE …`) succeeded.
if ($result) {
    $result = mysqli_query($conn, $db_query);
}
// putting info in each end
POST问题后刷新 我们在调试过程中遇到的另一个问题是提交表单后刷新。浏览器会自动再次提交原始表单内容,这是标准行为。它导致再次将提交的值插入数据库,现在将它们存储在两个或更多副本中


不过,这是可以预防的。见例。公认的答案建议使用POST-redirect-GET模式,这就是我在您的案例中使用的模式。你可以在这个话题上获得更多信息。

我想你的答案在这里。我确实很难找到它的确切位置。我是PHP新手,我自己学习。你能帮我指一下放在哪里吗。我上传了我的全部代码。背后的故事真的很长,令人毛骨悚然。我正在进行自我学习,并且正在请求创建PHP,它在SQL中创建一个表,然后可以执行简单的语句,如编辑更新删除等。它还必须在类中创建,而不是在单个文件中。这是我第一次尝试用PHP创建连接。这个链接会让你对正在发生的事情有更多的了解。希望能有所帮助。是的,我不知道在它工作后如何把它转移到课堂上。以同样的方式继续,不要介意刷新页面,因为HTTP请求就是这样工作的。@user2919681您需要做的是将表单和DB代码彼此分开。另外,如果您想按原样运行代码,那么我建议您在开始处和DB凭据下添加一个ifisset$_POST['submit'],然后这样命名您的提交按钮,这样它将仅在按下提交按钮时执行;这就是你的答案。@Fred ii-Probably user2919681只是想确定桌子在那里。脚本应该在手动删除时设置表,并用示例数据填充表。CREATETABLE在创建MySQL中已经存在的表时产生错误,因此不会写入任何数据。如果不存在,则只会抑制错误,但无论表是否已创建,都无法检测到该错误。@Palec我怀疑向数据库添加值的意图是一次性的。我理解你的意思,但是OP的设置没有任何意义,应该使用条件来代替。使用ifisset$_POST['submit']可以部分解决原始问题。