更新查询正在更新和插入

时间:2017-01-03 05:12:09

标签: php mysql

我一直试图解决这个问题过去2个小时但没有运气。

我有一个页面,我正在更新排名。但问题是,当我点击提交按钮时,它更新数据并插入相同数据的新行。我不是我做错了。请帮忙!

<?php
require_once('connection.php');
if(!isset($_SESSION)) { 
    session_start(); 
}

if(isset($_GET['company']) && isset($_GET['city']) && isset($_GET['state']) && isset($_GET['country'])) {
    if(isset($_SESSION['email'])) {
        $email = $_SESSION['email'];
        $company = $_GET['company'];
        $city = $_GET['city'];
        $state = $_GET['state'];
        $country = $_GET['country'];

        $result = mysqli_query($conn, "SELECT * FROM companies_active_accounts WHERE Company_Name='$company' AND City='$city' AND `State/Province`='$state' AND Country='$country'");

        $result2 = mysqli_query($conn, "SELECT * FROM register WHERE email='$email'");
        while($row = $result2->fetch_assoc()) {
            $username = $row["username"];
        }

        $result1 = mysqli_query($conn, "SELECT * FROM review WHERE company_name='$company' AND city='$city' AND state='$state' AND country='$country' AND username='$username'");
        $rowcount = mysqli_num_rows($result1);

        if(isset($_POST['rating'])) {
            $input1 = $_POST['input-1'];
            $input2 = $_POST['input-2'];
            $input3 = $_POST['input-3'];
            $input4 = $_POST['input-4'];
            $input5 = $_POST['input-5'];

            $sql1 = "UPDATE `review` SET `respectful` = '$input1', `assurance` = '$input2', `tangibles` = '$input3', `empathy` = '$input4', `responsiveness` = '$input5' WHERE company_name='$company' AND city='$city' AND `state`='$state' AND country='$country'";     
            if ($conn->query($sql1) === TRUE) {
                header('Location:myrating.php');
                exit();
            } 
        }
    }
} else {
    header('Location: '.'index.php');
    exit();
}

?>
<?php include('partials/header.php');?>
<?php include('partials/navbar.php');?>
<!-- Content -->
<section id="review">
    <div class="container">
        <div class="row">
        <?php if(isset($_SESSION['email'])) { ?>
            <div class="col-md-8 col-md-offset-2">
                <?php  while ($row = mysqli_fetch_assoc($result)) {  ?>
                    <h1 class="text-center heading" id="a"><?php echo $row['Company_Name'] ?></h1> 
                     <p class="text-center"><span>City: <span id="b"><?php echo $row['City'] ?></span></span> | <span>State/Province: <span id="c"><?php echo $row['State/Province'] ?></span> | </span><span> Country: <span id="d"><?php echo $row['Country'] ?></span></span></p>
                <?php } ?>
                <?php if($rowcount > 0) { 
                    while ($row = mysqli_fetch_assoc($result1)) {
                ?>
                        <form method="post" action="edit_rating.php?company=<?php echo $company ?>&city=<?php echo $city ?>&state=<?php echo $state ?>&country=<?php echo $country ?>" id="rating1" >
                            <table>
                                <tr>
                                    <td><h2 style="padding-right: 60px;"><span class="hint--top hint--medium" aria-label="A company’s ability to perform the promised service dependably and accurately.">Respectful / Integrity</span></h2></td>    
                                    <td>                  
                                    <input id="input-1" name="input-1" value="<?php echo $row['respectful']; ?>" class="rating-loading" data-size="sm" productId=1>
                                    <script>
                                        $(document).on('ready', function(){
                                            $('#input-1').rating({
                                                step: 1,
                                                starCaptions: {1: 'Very Poor', 2: 'Poor', 3: 'Ok', 4: 'Good', 5: 'Very Good'},
                                                starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'}
                                            });
                                        });
                                    </script>
                                </td>
                            </tr>
                            <tr>
                                <td><h2><span class="hint--top hint--medium" aria-label="The knowledge, competence and courtesy of employees and their ability to convey trust and confidence."> Assurance </span> </h2></td>
                                <td>
                                    <input id="input-2" name="input-2" value="<?php echo $row['assurance']; ?>" class="rating-loading" data-size="sm" productId=2>
                                    <script>
                                        $(document).on('ready', function(){
                                            $('#input-2').rating({
                                                step: 1,
                                                starCaptions: {1: 'Very Poor', 2: 'Poor', 3: 'Ok', 4: 'Good', 5: 'Very Good'},
                                                starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'}
                                            });
                                        });
                                    </script>
                                </td>
                            </tr>
                            <tr>
                                <td><h2><span class="hint--top hint--medium" aria-label="Physical facilities, equipment and appearances that impress the customer."> Tangibles </span></h2></td>
                                <td>
                                    <input id="input-3" name="input-3" value="<?php echo $row['tangibles']; ?>" class="rating-loading" data-size="sm" productId=3>
                                    <script>
                                        $(document).on('ready', function(){
                                            $('#input-3').rating({
                                                step: 1,
                                                starCaptions: {1: 'Very Poor', 2: 'Poor', 3: 'Ok', 4: 'Good', 5: 'Very Good'},
                                                starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'}
                                                });
                                            });
                                        </script>
                                    </td>
                                </tr>
                                <tr>
                                    <td><h2><span class="hint--top hint--medium" aria-label="The level of caring, individualized attention, access, communication and understanding that the customer perceives."> Empathy </span></h2></td>
                                    <td>
                                    <input id="input-4" name="input-4" value="<?php echo $row['empathy']; ?>" class="rating-loading" data-size="sm" productId=4>
                                        <script>
                                            $(document).on('ready', function(){
                                                $('#input-4').rating({
                                                    step: 1,
                                                    starCaptions: {1: 'Very Poor', 2: 'Poor', 3: 'Ok', 4: 'Good', 5: 'Very Good'},
                                                    starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'}
                                                 });
                                             });
                                         </script>
                                     </td>
                                 </tr>
                                 <tr>
                                     <td><h2><span class="hint--top hint--medium" aria-label="The willingness displayed to help and provide prompt service."> Responsiveness </span></h2></td>
                                      <td>
                                          <input id="input-5" name="input-5" value="<?php echo $row['responsiveness']; ?>" class="rating-loading" data-size="sm" productId=5>
                                          <script>
                                              $(document).on('ready', function(){
                                                  $('#input-5').rating({
                                                     step: 1,
                                                     starCaptions: {1: 'Very Poor', 2: 'Poor', 3: 'Ok', 4: 'Good', 5: 'Very Good'},
                                                     starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'}
                                                 });
                                             });
                                         </script>
                                     </td>
                                 </tr>
                             </table>  
                             <br>
                         <?php } ?>
                         <button name="rating" id="rating" class="btn btn-success">Update Ratings</button>
                     </form>
                  <?php } else { ?>
                      <h2>Please Review First before editing.</h2>
                  <?php } 
               }?>            
           </div>
       </div>
   </div>
</section>

<?php include('partials/footer.php');?>
<script type="text/javascript">
    $(document).ready(function () {
        $("#rating").click(function () {
            var company = $('#a').text();
            var city = $('#b').text();
            var state = $('#c').text();
            var country = $('#d').text();
            var input1 = $('#input-1').val();
            var input2 = $('#input-2').val();
            var input3 = $('#input-3').val();
            var input4 = $('#input-4').val();
            var input5 = $('#input-5').val();
            if(input1 > 0 && input2 > 0 && input3 > 0 && input4 > 0 && input5 > 0) {
                $.post('rating.php',{input1 : input1, input2 : input2, input3 : input3, input4 : input4, input5 : input5, company : company, city : city, state : state, country : country});
                $(this).attr("checked");
                window.location.reload();
            } else {
                alert('Please Rate all fields');
                return false;
            }
        });
    });
</script>

谢谢。

1 个答案:

答案 0 :(得分:0)

凤凰城,我尝试重构您的代码,以便更容易检查问题。现在,你已经有了很多混合动作部件,很难找到你所拥有的问题。

首先,将会话和连接的设置拉出到一个单独的文件中:

<强> setup.php

<?php
// display errors
ini_set('display_errors', 1);

require_once('connection.php');

if(!isset($_SESSION)) { 
    session_start(); 
}

然后,我将JavaScript拉入单独的文件中。值得注意的是,如果JavaScript在底部加载,在您在代码中引用的所有HTML元素之后,您将不再需要调用ready()。

<强> main.js

// original
$(document).ready(function () {
    $("#rating").click(function () {
        var company = $('#a').text();

// shorthand
$(function() {
    $("#rating").click(function () {
        var company = $('#a').text();

// no need for ready() check at bottom of page as relevant DOM has loaded
$("#rating").click(function () {
    var company = $('#a').text(); 

接下来,您可以重构您的支票。例如,isset()接受多个参数:

// original
if(isset($_GET['company']) && isset($_GET['city']) && isset($_GET['state']) && isset($_GET['country'])) {

// shortened
if (isset($_GET['company'], $_GET['city'], $_GET['state'], $_GET['country'])) {

那就是说,实际上,我开始将这些代码分解为可以检查的较小函数。

functions.php(或只是添加到setup.php

...
function sessionHasEmail() {
    return isset($_SESSION['email']);
}

function newPage($page) {
    header('Location: ' . $page);
    exit();        
}

function getVarsSent() {
    return isset($_GET['company'], $_GET['city'], $_GET['state'], $_GET['country']);
}

现在,您可以将此页面上的大部分代码缩短为:

<?php
// include other files and functions and start session
require_once('setup.php');
// check for get vars
if (!getVarsSent()) newPage('index.php')
// conditionally query if email session var set
if (sessionHasEmail()) {
    // these queries can be broken up into functions
}
// etc.

我们的想法是将代码分解为易于理解,测试和重用的易于管理的部分。

另外,就数据库而言,您可能希望对行使用唯一ID,然后在进行更新时引用它们(使用代码很难确定你发布了。)

最后,@ jory-geerts发表了两条有价值的评论。 POST可能会在重复方面造成一些麻烦(我们看到的代码很难知道。)而且,你现在应该开始添加安全检查(SQL预编译语句和GET / POST var验证。)安全性不是& #34;用螺栓固定的&#34;好吧,但它是一个很好的基础:)

如果您重构代码并将问题固定到特定部分,请发布更新,我会尝试提供帮助。