【问题标题】:Updating MySQL data table with php用 php 更新 MySQL 数据表
【发布时间】:2014-10-07 02:30:28
【问题描述】:

我正在为客户做一个简单的项目,但我无法在 mysql 中编辑和更新数据。这是我从编辑提交表单传递的代码:

updateinfo.php

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
if (mysqli_connect_errno()){
  echo "Failed to connect to MySql: " . mysqli_connect_error();
}
  $id = $row['id'];
  $fname = $row['firstName'];

$sql = "UPDATE  `db`.`client_information` SET  `firstName` =  '$fname' WHERE  `client_information`.`id` = '$id'";
mysqli_query($con, $sql);
echo "Updated!";
mysqli_close($con);
?>

clientedit.php

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
if (mysqli_connect_errno()){
echo "Failed to connect to MySql: " . mysql_connect_error();
}
$id=$_GET['id'];
$result = mysqli_query($con, "SELECT * FROM `client_information` WHERE id='$id'");
while ($row = mysqli_fetch_array($result)){
  $id = $row['id'];
  $fname = $row['firstName'];
}
mysqli_close($con);
?>
<?php include 'header.php';?>
<form role="form" action="updateinfo.php" method="post">
<div class="col-md-4">
  <fieldset disabled>
  <div class="form-group">
    <label for="id">ID</label>
    <input type="text" value="<?php echo $id;?>" class="form-control" id="id">
  </div>
  </fieldset>
  <div class="form-group">
    <label for="fname">First Name</label>
    <input type="text" value="<?php echo $fname;?>" class="form-control" id="fname">
  </div>
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>
<?php include 'footer.php';?>

提前感谢您的帮助!

更新 更改变量后,当我通过表单(clientedit.php)传递信息时,updateinfo.php 用新信息更新表。但是,它只有在我说:“SELECT * FROM client_information WHERE id ='31' 时才有效。如果我将其更改为:“SELECT * FROM client_information WHERE id ='$id'”,然后它完全失败了。我知道我不是“动态地”跨文件连接 id。

【问题讨论】:

  • 您需要遍历初始查询才能获取行。
  • 您遇到了什么问题?你需要更具体。有没有错误?只是不更新​​吗?
  • 为我的问题添加了更多内容。 @Arif_suhail_123 我不确定是否有任何东西通过表单。
  • @Nathan 我不确定是否有任何东西通过或如何检查。帮助? :)
  • @Fred-ii- 我在表单中循环。

标签: php html mysql forms


【解决方案1】:

向下滚动并开始阅读新答案。 如果您的 php 代码在同一页面中,您需要像这样更改表单操作

如果不保持原样。

<form role="form" action="" method="post">

您需要像这样为您的两个输入命名

<input type="text" value="<?php echo $id;?>" class="form-control" id="id" name="id">

<input type="text" value="<?php echo $fname;?>" class="form-control" id="fname" name="fname">

你在表单中使用了 post 方法,所以你的 $id 应该是这样的

$id=$_POST['id'];

像这样对第二个字段做同样的事情

$fname=$_POST['fname'];

新答案

我们昨天错过的唯一一件事。是您正在使用禁用字段集。用于输入字段。删除这个。您的查询代码和查询应该可以工作。请参阅下面的代码。并且不要忘记更改连接信息,因为我的与您的不同。

我假设您不希望用户更改他们的 ID。只需在输入中使用隐藏属性。不禁用

更新一个

<?php
//you may have to change the value in connection variable. 
$con = mysqli_connect("localhost", "root", "", "db");
if (mysqli_connect_errno()){
  echo "Failed to connect to MySql: " . mysqli_connect_error();
}
  $id = $_POST['id'];
  $fname = $_POST['fname'];



$sql = "UPDATE  `db`.`client_information` SET  `firstName` =  '$fname' WHERE  `client_information`.`id` = '$id'";
mysqli_query($con, $sql) or  mysqli_error($con);
echo "Updated!";
mysqli_close($con);
?>

客户一个

<?php
//again you might have to change connection value in the below line
$con = mysqli_connect("localhost", "root", "", "db");
if (mysqli_connect_errno()){
echo "Failed to connect to MySql: " . mysql_connect_error();
}
$id=$_GET['id'];
$result = mysqli_query($con, "SELECT * FROM `client_information` WHERE id='$id'");
while ($row = mysqli_fetch_array($result)){
  $id = $row['id'];
  $fname = $row['firstName'];
}
mysqli_close($con);
?>
<?php include 'header.php';?>
<form role="form" action="updateinfo.php" method="post">
<div class="col-md-4">
    <fieldset >
  <div class="form-group">
    <label for="id">ID</label>
    <input type="text" value="<?php echo $id;?>" class="form-control" id="id" name="id">
  </div>
  </fieldset>
  <div class="form-group">
    <label for="fname">First Name</label>
    <input type="text" value="<?php echo $fname;?>" class="form-control" id="fname" name="fname">
  </div>
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>
<?php include 'footer.php';?>

【讨论】:

  • $_GET['id'] 似乎是从以前的形式中选择 id。
  • 好吧,clientedit.php 似乎是导致 updateinfo.php 的文件(根据表单操作)。当他在clientedit.php中选择where id='$id'时,它必须来自以前的表单或get传输。
  • 所以我改变了一切,但不是在数据库中更新,而是完全删除了该字段。我很困惑。
  • 啊哈...我在添加错误报告后收到此消息:“注意:未定义的索引:第 10 行 /var/www/html/updateinfo.php 中的名字。此刻,我”我选择一个 id 来操作,但后来想动态地将它添加到“编辑”表单中。
  • 如果您在 client.php 中获得 $id 值,则无需更改任何内容。你只需要改变我提到的表格。在解决方案中。其次,您得到未定义的 inedex frstname;我会告诉你为什么你会得到这个。在论坛中更改输入字段后。通过表格告诉你你想做什么。意味着当每个人提交表格时。如果这是您想要做的,您想在updateinfo.php 中运行更新查询。让我知道。我也会告诉你你的错误。请记住,您的原始代码无需更改 client.php 中的任何内容。仅输入字段
【解决方案2】:

试一试,看看这是否是您想要的,它有效。由于某种原因,我无法让你的工作。

它将首先查询您的数据库,然后您可以立即编辑您喜欢的数据库。

注意:仅用于更新现有数据,不能添加或删除。

我修改了我在网上找到的现有脚本,其中缺少一些部分以使其正常工作。

这些列已用于以下用途:

  • 身份证
  • 名字
  • 姓氏
  • 电子邮件

HTML/PHP/SQL (update.php)

<?php
$DB_HOST = "xxx";
$DB_NAME = "xxx";
$DB_USER = "xxx";
$DB_PASS = "xxx";

$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($con->connect_errno > 0) {
  die('Connection failed [' . $con->connect_error . ']');
}

$sql="SELECT * FROM `your_table`";
$result=mysqli_query($con,$sql);

// Count table rows
$count=mysqli_num_rows($result);
?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>Email</strong></td>
</tr>

<?php
while($rows=mysqli_fetch_array($result)){
?>

<tr>
<td align="center">
<?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?>
</td>
<td align="center">
<input name="name[]" type="text" id="name" value="<?php echo $rows['firstName']; ?>">
</td>
<td align="center">
<input name="lastname[]" type="text" id="lastname" value="<?php echo $rows['lastName']; ?>">
</td>
<td align="center">
<input name="email[]" type="text" id="email" value="<?php echo $rows['email']; ?>">
</td>
</tr>

<?php
}
?>

<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php

if(isset($_POST['Submit'])){

for($i=0;$i<$count;$i++){

// these variables were missing from the tutorial. Not having those made entries blank when doing the UPDATE.
$email = $_POST['email'];
$name = $_POST['name'];
$lastname  = $_POST['lastname'];

$sql1="UPDATE `your_table` SET firstName='".mysqli_real_escape_string($con, stripslashes($name[$i]))."', lastName='".mysqli_real_escape_string($con, stripslashes($lastname[$i]))."', email='".mysqli_real_escape_string($con, stripslashes($email[$i]))."' WHERE id='".mysqli_real_escape_string($con, stripslashes($id[$i]))."'";

// Old unsecure method. Do not use mysqli_real_escape_string and/or stripslashes as predefined variables, it won't work
// $sql1="UPDATE `your_table` SET firstName='$name[$i]', lastName='$lastname[$i]', email='$email[$i]' WHERE id='$id[$i]'";
$result1=mysqli_query($con,$sql1);
   }
}

if($result1){
    header("location: update.php");
}
mysqli_close($con);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多