【问题标题】:Update MySQL table from PHP table从 PHP 表更新 MySQL 表
【发布时间】:2019-01-31 01:26:24
【问题描述】:

这只是我的第二个项目,非常新,所以请原谅我的杂乱代码。 我正在尝试从 MySQL 生成一个带有附加输入列的表。在此列中,我希望能够输入一个数字,如果有意义,该数字将添加到原始 MySQL 表“分数”中。由于不同的玩家参与,每次新游戏开始(而非手牌)时,该表都会被删除和创建。在放下桌子之前,每只手的输入最多可能发生 50 次。 查看代码是否更有意义。应该很简单,我现在无法理解它。

<?php // defined variables to remove errors
$submit = 'add_scores';
$name = $message = "";
$hand = 0;
$array = $index = "";
$datatable = "cards_players"; // MySQL table name
?>

<?php 
if (isset($_POST[$submit])) {
//this is where my insert statement will go 
}

?>
   <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="formAcc">
    <ul style= "text-align: center">

    <article>
        <li>
            <label>Current Standing</label>
<?php   
$datatable = "cards_data"; // MySQL table name

$sql = "SELECT * FROM ".$datatable." WHERE player IS not NULL ORDER BY id ASC";
$rs_result = $connection->query($sql);

// Check connection
if ($connection->connect_error) {
    die("Connection failed: " . $connection->connect_error);
}            
?>

<?php
  echo '<table id="db_results">
  <colgroup>
    <col class="col15" />
    <col class="col15" />
    <col class="col15" />
    <col class="col20" />
  </colgroup>
<tr>
<th>Name</th>
<th>Previous Score</th>
<th>Current Score</th>
<th>This Hand</th>
</tr>';

while($row = $rs_result->fetch_assoc()) {
    echo "<tr class=\"center\">
        <td>". $row["player"] . "</td>
        <td>". $row["previous_score"] . "</td>
        <td>". $row["score"] . "</td>
        <td>"//. retain_fill ('text','hand','',$hand,'0') ."
        . '<input type="text" name="'.$row["player"].'" placeholder="';
            if (!empty($hand)) {echo $hand. '" value="'.$hand.'"/>';
        }
            else {echo 0 . '" value=""/>';}
        "</td>
        </tr>"; 
    }
echo "</table>";            
?>            
    </li>
    <li>
        <input type="submit" name="<?php echo $submit?>" value="Input Scores" style="margin-top: 5px;"/>

目前我什至不确定如何为每个用户开始插入语句,因为我知道这将是某种循环。任何帮助表示赞赏:-)

【问题讨论】:

  • 我不太确定我是否理解您的问题。您有一个输入字段,这导致无处可去。您将需要以某种方式处理它。如果您想留在此页面上,我建议您使用 AJAX 调用。如果可以离开此页面,您可以制作另一个 PHP 文件,或者由每行中的表单调用,或者制作一个围绕表格的大表单,然后将它们作为一个整体进行处理。
  • 您似乎正在通过播放器识别每一行。所以无论你做什么,你都需要另一个查询来从你的数据库中获取玩家,并为每个“名称”标识符迭代它,类似于你现在执行 while 循环的方式。
  • 谢谢@kry 是的,我正在通过播放器识别每一行,它完美地生成了表格并在最后一列中创建了输入框。我有一个提交按钮,然后激活插入查询,页面将刷新到数据库中的新数据以进行下一次设置更新(冲洗并重复)。现在我可以通过例如使 $hand 成为保存数据的变量来完成这项工作,但它使所有玩家当然拥有相同的数量,因此它会用一个输入更新每个人(而不是每个玩家的不同输入)
  • 您的提交按钮是链接到 JS AJAX 调用还是 PHP 调用?就个人而言,而不是给出 'name="$row['player']"' (搞砸了引号,我知道......),我会像 name="player['.$row['player'] .']",所以它会发送一个名为 player 的数组,其中 key->value 对是 $row['player'] 和 value="'.$hand.'"。
  • 这种方式不仅更容易被视为人类,而且键也是唯一标识符,可以使用 foreach 循环进行迭代。

标签: php mysql input html-table


【解决方案1】:

感谢@kry 的指导和很好的回答。需要进行 1 次更正,最终查询语句如下: 第一次更正 =

while($row = $rs_result->fetch_assoc()) {
    echo "<tr class=\"center\">
        <td>". $row["player"] . "</td>
        <td>". $row["previous_score"] . "</td>
        <td>". $row["score"] . "</td>
        <td>"//. retain_fill ('text','hand','',$hand,'0') ."
        . '<input type="text" name="'.$row["player"].'" placeholder="';
            if (!empty($hand)) {echo $hand. '" value="'.$hand.'"/>';
        }
            else {echo 0 . '" value=""/>';}
        "</td>
        </tr>"; 
    }

应该是

while($row = $rs_result->fetch_assoc()) {

    echo "<tr class=\"center\">
        <td>". $row["player"] . "</td>
        <td>". $row["previous_score"] . "</td>
        <td>". $row["score"] . "</td>
        <td>". '<input type="text" name="player['.$row['player'].']" placeholder="0" value=""/>';
        }

然后数据库查询结果是:

foreach ($_POST['player'] as $player=>$hand){   
    $query  = "Update cards_data SET player = '$player', previous_score = '$hand' WHERE player = '$player' LIMIT 1;"; 
$result = mysqli_query($connection, $query);
    }

【讨论】:

  • "更新 cards_data SET player = '$player' [...] WHERE player = '$player'" 思考宇宙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多