从下拉列表中更新所选值的 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】:

除了关于命名&lt;select&gt; 而不是&lt;option&gt; 的其他答案之外,这是我对自己的评论。

(现在)查看您用于连接的内容,并在以后的编辑中添加:

$db=new PDO("mysql:host=localhost;dbname=i3a", "root", "");

您正在使用mysqli_* 进行查询。

这些不同的 MySQL API 不会混合使用。从连接到查询,您必须使用同一个。

所以...要么全部使用 PDO,要么全部使用 mysqli_,仅此而已。

因此,您需要使用mysqli_ 进行连接,而不是将整个代码更改为 PDO(这取决于您)。

http://php.net/manual/en/function.mysqli-connect.php

即:

$db = mysqli_connect("yourHost", "User", "Password", "DB");

$db 变量是您需要在整个查询中使用的变量。

即:

$result1 = mysqli_query($db, $sql); $result=$db-&gt;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-&gt;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-&gt;fetch()) 更改为while($keuze=$menu-&gt;fetch_assoc()) @Khiem 另外$menu= $db-&gt;query($sql); 你仍然在这里使用$db .... 根据你的连接使用相同的变量,对于你的所有查询都是$connection$connect = mysqli_connect($hostname, $username, $password, $databaseName); 所以@ 987654345@ 成功了!但仍然无法解决我的问题?任何想法.. :( @Khiem 再次检查我的答案中列出的错误,并使用var_dump(); 查看发生了什么,并查看您的 html 源代码,这是一个额外的开发人员工具。除非我为此设置一个完整的数据库,否则我在这里无法为您做很多其他事情。抱歉,我做不到。【参考方案3】:

通过在值中添加这个来解决它:

&lt;option value="&lt;?php echo $row1[0]; ?&gt;"&gt;

【讨论】:

以上是关于从下拉列表中更新所选值的 mysql 记录的主要内容,如果未能解决你的问题,请参考以下文章

Angular 材质:在下拉列表中获取所选值的 id

在表中插入记录时将所选值作为城市下拉列表的空值

无法从离子中的下拉列表中获取所选值

下拉列表刷新

MFC组合框控件下拉列表式如何读取所选值和设置默认选项

语义 ui 滚动下拉列表不显示所选项目