2016-12-04 79 views
0

我有一个问题,我的php/mysql更新查询没有到达我的数据库。我知道这可能有一个简单的解决我似乎无法找到在我的错误是,这里是我的代码:PHP更新查询没有到达数据库

这是我用来发送数据的形式:

<?php 

     if(!($stmt = $mysqli->prepare("SELECT bowl_games.id, bowl_games.name, stadiums.name, bowl_games.inaugural_year FROM bowl_games 
         INNER JOIN stadiums ON stadiums.id = bowl_games.stadium_id 
         WHERE bowl_games.id = ? "))){ 
      echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
     } 

     if(!($stmt->bind_param("i", $_POST['bowl_game']))){ 
      echo "Bind failed: " . $stmt->errno . " " . $stmt->error; 
     } 

     if(!$stmt->execute()){ 
      echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
     } 
     if(!$stmt->bind_result($id, $name, $stadium, $inauguralyear)){ 
      echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
     } 
     while($stmt->fetch()){ 

     } 
     ?> 

      <div class="container"> 
      <form method="post" action="update_bowl_game_2.php"> 
      <fieldset> <legend>Update Bowl Game</legend> 

       <div class="form-group row"> 
       <label class="col-sm-2 col-form-label">Name</label> 
       <div class="col-sm-10"> 
        <input type="text", class="form-control", name="Name", value="<?php echo $name?>"/> 
       </div> 
       </div> 

       <div class="form-group row"> 
       <label class="col-sm-2 col-form-label">Stadium</label> 
       <div class="col-sm-10"> 
        <select name="Stadium"> 
         <?php 
         if(!($stmt = $mysqli->prepare("SELECT id, name FROM stadiums ORDER BY name"))){ 
          echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
          } 

         if(!$stmt->execute()){ 
          echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
         } 
         if(!$stmt->bind_result($id, $sname)){ 
          echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
         } 
         while($stmt->fetch()){ 
          if($sname === $stadium){ 
           echo "<option value=\"" . $id . "\" selected>" . $sname . "</option>"; 
           } else { 
           echo "<option value=\"" . $id . "\">" . $sname . "</option>"; 
           } 
         } 
         $stmt->close(); 
         ?> 
        </select> 
       </div> 
       </div> 

       <div class="form-group row"> 
       <label class="col-sm-2 col-form-label">Inaugural Year</label> 
       <div class="col-sm-10"> 
        <input type="number", class="form-control", name="InauguralYear", value="<?php echo $inauguralyear?>"/> 
       </div> 
       </div> 

        <input type="hidden" name="id" value="<?php echo $id?>"/> 
       <div class="form-group row"> 
       <div class="offset-sm-2 col-sm-10"> 
        <button type="submit" class="btn btn-primary">Update Bowl Game</button> 
       </div> 
       </div> 
      </fieldset> 
      </form> 
     </div> 
<?php 
     $mysqli = "SELECT bowl_games.id, bowl_games.name, stadiums.name, bowl_games.inaugural_year FROM bowl_games 
        INNER JOIN stadiums ON stadiums.id = bowl_games.stadium_id" 
     ?> 

这里是PHP代码应该更新数据库的条目:“在碗比赛更新1行”

<?php 
//Turn on error reporting 
ini_set('display_errors', 'On'); 
//Connects to the database 
$mysqli = new mysqli("oniddb.cws.oregonstate.edu","dejarnen-db","*hidden*","dejarnen-db"); 
if(!$mysqli || $mysqli->connect_errno){ 
    echo "Connection error " . $mysqli->connect_errno . " " . $mysqli- >connect_error; 
    } 

if(!($stmt = $mysqli->prepare("UPDATE bowl_games SET name=?, stadium_id=?, inaugural_year=? WHERE id= ?"))){ 
    echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
} 

if(!($stmt- >bind_param("siii",$_POST['Name'],$_POST['Stadium'],$_POST['InauguralYear'],$_POST['id']))){ 
    echo "Bind failed: " . $stmt->errno . " " . $stmt->error; 
} 

if(!$stmt->execute()){ 
    echo "Execute failed: " . $stmt->errno . " " . $stmt->error; 
} else { 
    echo "Updated " . $stmt->affected_rows . " rows in bowl games."; 
} 
?> 

当我提交表单,如果选择的条目已成功更新,我应该看到消息相反,我收到消息“在碗游戏中更新0行”。

任何人都可以在正确的方向指出我遇到的这个问题吗?由于

+0

'$ _PO ST ['id'])'---这是您的原始代码中的错字? – WillardSolutions

+0

@EatPeanutButter对不起,我的格式刚刚在帖子后面...我现在已经修复了它 –

+0

@NickD我建议你设置一个开发环境,以便你可以使用调试器来遍历你的代码来找出究竟发生了什么。所以下次你可以自己发现这样的问题。 – NineBerry

回答

2

在窗体中,您使用的是两种不同的目的命名为$id变量:

  1. 对于游戏
  2. 的ID为体育场

首先您检索的ID将游戏的id变为变量,然后将体育场的id转换为变量,然后使用变量为游戏id创建隐藏的输入。

当你编写隐藏的输入时,$ id变量包含一个体育场的id。

一个可能的解决方案:当列出的体育场馆,使用单独的变量名:

<select name="Stadium"> 
    <?php 
    if(!($stmt = $mysqli->prepare("SELECT id, name FROM stadiums ORDER BY name"))){ 
     echo "Prepare failed: " . $stmt->errno . " " . $stmt->error; 
     } 

    if(!$stmt->execute()){ 
     echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
    } 
    if(!$stmt->bind_result($stadium_id, $sname)){ 
     echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
    } 
    while($stmt->fetch()){ 
     if($sname === $stadium){ 
      echo "<option value=\"" . $stadium_id . "\" selected>" . $sname . "</option>"; 
      } else { 
      echo "<option value=\"" . $stadium_id . "\">" . $sname . "</option>"; 
      } 
    } 
    $stmt->close(); 
    ?> 
</select> 

一般情况下,这是一个好主意,用变量名是具体的。因此,而不是“$ name”,使用“$ stadium_name”等。该规则唯一的例外是当函数中的局部变量非常短时。


另一个可能的解决方案是在填充体育场馆选择之前先写隐藏的输入。

+0

这样做!非常感谢帮助我接受这一点 –

-1

首先检查$_POST数据不是null然后使用绑定参数如sssi

//example 
if(!($stmt- >bind_param("sssi", $_POST['Name'], $_POST['Stadium'], $_POST['InauguralYear'], $_POST['id']))){ 
echo "Bind failed: " . $stmt->errno . " " . $stmt->error;