从下拉列表中更新所选值的 mysql 记录
Posted
技术标签:
【中文标题】从下拉列表中更新所选值的 mysql 记录【英文标题】:UPDATE mysql record of the selected value from dropdown list 【发布时间】:2016-07-02 09:12:21 【问题描述】:我刚刚学习 mysql/php,我正在尝试从下拉列表中的选定值更新 mysql 记录。我已经阅读了几个教程,并尝试应用它们,但我无法让它工作......
我想要什么:我有一个从 mysql 数据库中获取值的下拉列表(唯一 ID、编号、型号、序列号、容量)。我想从下拉菜单中更新选定的值。下拉菜单中的每个值都有一个唯一 ID。
问题:当我点击提交时,它什么也没做。当我将 SQL 查询从 WHERE id='$id'" 更改为 WHERE id=23 时,它将使用 id 23 更新记录。所以它与此有关。
我知道我的代码很乱,但稍后会清理。 我的代码:ipad-uitlenen.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
include("../includes/connect.php");
if(isset($_SESSION['logged_in']))
$sql="SELECT id, nr, model, serienummer, capaciteit FROM ipads WHERE uitgeleend='Nee' ORDER BY nr";
$result1 = mysqli_query($db, $sql);
if(isset($_POST['btnAdd']))
$id=$_REQUEST['id'];
$persoon=$_POST['persoon'];
$datumuitgeleend=$_POST['datumuitgeleend'];
$datumretour=$_POST['datumretour'];
$opmerking=$_POST['opmerking'];
$sql="UPDATE ipads SET uitgeleend='Ja', persoon='$persoon', datumuitgeleend='$datumuitgeleend', datumretour='$datumretour', opmerking='$opmerking' WHERE id='$id'";
$result=$db->query($sql);
header("location:overzicht-ipads.php");
include("../includes/get_header_wn.php");
?>
<h1 class="page-title">iPad uitlenen</h1>
<ul class="breadcrumb">
<li><a href="index.php">Home</a> </li>
<li class="active">Nieuw</li>
</ul>
</div>
<form id="gegevensForm" class="col-xs-4" form method="POST" action="ipad-uitlenen.php">
<div class="form-group">
<select name="id">
<?php while ($row1 = mysqli_fetch_array($result1)):;?>
<option value="<?php echo $id?>"><?php echo $row1[1];?> / <?php echo $row1[3];?> / <?php echo $row1[2];?> / <?php echo $row1[4];?></option>
<?php endwhile;?>
</select>
</div>
<div class="form-group">
<label>Persoon</label>
<input type="text" class="form-control" name="persoon" value="" />
</div>
<div class="form-group">
<label>Datum uitgeleend</label>
<input type="text" id="datepicker" class="form-control" name="datumuitgeleend" value="" />
</div>
<div class="form-group">
<label>Datum retour</label>
<input type="text" id="datepicker1" class="form-control" name="datumretour" value="" />
</div>
<div class="form-group">
<label for="comment">Opmerking</label>
<textarea class="form-control" rows="5" id="comment" name="opmerking"></textarea>
</div>
<button class="btn btn-primary pull-right" name="btnAdd" input type="submit"><i class="fa fa-save"></i> Opslaan</button>
<a href="overzicht-ipads.php"><input type="button" name="btnCancel" value="Annuleer" class="btn btn-primary pull-left"></a>
<?php
include('../includes/get_footer.php');
?>
</form>
<?php
?>
Connect.php
<?php
try
$db = mysqli_connect("localhost", "root", "", "i3a");
catch(PDOException $e)
echo $e->getMessage();
die();
//PDO(database:localhost:3307;dbnaam, root, wachtwoord)
?>
【问题讨论】:
如果在更新查询中写 WHERE id=$id 而不是 WHERE id='$id' 会发生什么 在运行 SQL 查询之前,您是否尝试过回显 $id 值? 你在 echo $id=$_POST['id']; 中获得了什么价值? Your script is at risk for SQL Injection Attacks. 了解prepared 对MySQLi 的声明。 @Niklesh 我试过了,但没有用。我在哪里放置 echo $id=$_POST['id']; ??? 【参考方案1】:试试这个,
为select标签提供名称而不是option。
<select name="id">
<?php while ($row1 = mysqli_fetch_array($result1)):;?>
<option value="<?php echo $id?>"><?php echo $row1[1];?> / <?php echo $row1[3];?> / <?php echo $row1[2];?> / <?php echo $row1[4];?></option>
<?php endwhile;?>
</select>
【讨论】:
那么你在 echo $id=$_POST['id']; 之后得到了吗? 我确实放了 echo $id=$_POST['id'];在 if(isset($_POST['btnUpdate'])) 但也没有工作...... 您从哪里调用此页面?共享该页面的表单标签?并提交按钮标签? 不知从何而来?它只是这个页面。这是在 ipad-uitlenen.php 里面 您是如何提交此表格的?你的 ?【参考方案2】:除了关于命名<select>
而不是<option>
的其他答案之外,这是我对自己的评论。
(现在)查看您用于连接的内容,并在以后的编辑中添加:
$db=new PDO("mysql:host=localhost;dbname=i3a", "root", "");
您正在使用mysqli_*
进行查询。
这些不同的 MySQL API 不会混合使用。从连接到查询,您必须使用同一个。
所以...要么全部使用 PDO,要么全部使用 mysqli_
,仅此而已。
因此,您需要使用mysqli_
进行连接,而不是将整个代码更改为 PDO(这取决于您)。
即:
$db = mysqli_connect("yourHost", "User", "Password", "DB");
$db
变量是您需要在整个查询中使用的变量。
即:
$result1 = mysqli_query($db, $sql);
$result=$db->query($sql);
如果使用过错误检查和错误报告,您会对此有所了解。
旁注:这里发生的情况是,您很可能因为必须在另一个查询中重新连接而失去连接。
因此,始终保持连接打开,而不必从一个 API 切换到另一个。
您已经与:
$hostname = "localhost";
$username = "root";
$password = "";
$databaseName = "i3a";
$connect = mysqli_connect($hostname, $username, $password, $databaseName);
那么为什么要使用另一个连接切换到 PDO?
保持相同的(mysqli_)并使用$connection
,那么如果您要使用上述方法来保持连接处于活动状态。
$result1 = mysqli_query($connection, $sql);
$result=$connection->query($sql);
将error reporting 添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存阶段显示错误,而不是在生产阶段。
并检查查询中的错误。
http://php.net/manual/en/mysqli.error.php你没有这样做。
【讨论】:
这是我在互联网上找到的。当我在 connect.php 中将 PDO 更改为 mysqli 时,我的其他页面将无法工作......对不起,我只是一个初学者并试图理解。我将添加另一个由于更改而出现错误的页面示例。 @Khiem 在看到您在问题中发布的错误后将while($keuze=$menu->fetch())
更改为while($keuze=$menu->fetch_assoc())
。
@Khiem 另外$menu= $db->query($sql);
你仍然在这里使用$db
.... 根据你的连接使用相同的变量,对于你的所有查询都是$connection
在$connect = mysqli_connect($hostname, $username, $password, $databaseName);
所以@ 987654345@
成功了!但仍然无法解决我的问题?任何想法.. :(
@Khiem 再次检查我的答案中列出的错误,并使用var_dump();
查看发生了什么,并查看您的 html 源代码,这是一个额外的开发人员工具。除非我为此设置一个完整的数据库,否则我在这里无法为您做很多其他事情。抱歉,我做不到。【参考方案3】:
通过在值中添加这个来解决它:
<option value="<?php echo $row1[0]; ?>">
【讨论】:
以上是关于从下拉列表中更新所选值的 mysql 记录的主要内容,如果未能解决你的问题,请参考以下文章