更新MySql/PHP表-插入变量名而不是值
我已经搜索了太多关于它的内容,但是,我甚至不是PHP脚本的新手。。。所以我需要帮助 我正在开发一个自制的家庭自动化系统,基于PHP/MySql,我需要一个后端来更新数据库表,让事情真正在现场发生 所以,我找到了我需要的代码,经过一些修改后,它就在这里更新MySql/PHP表-插入变量名而不是值,php,mysql,forms,Php,Mysql,Forms,我已经搜索了太多关于它的内容,但是,我甚至不是PHP脚本的新手。。。所以我需要帮助 我正在开发一个自制的家庭自动化系统,基于PHP/MySql,我需要一个后端来更新数据库表,让事情真正在现场发生 所以,我找到了我需要的代码,经过一些修改后,它就在这里 <?php $username = "root"; $password = ""; $hostname = "localhost"; $database = "domon
<?php
$username = "root";
$password = "";
$hostname = "localhost";
$database = "domonet";
$tabela = "AtuadorAnalogico";
$valor1 = "AA_id";
$valor2 = "AA_nome";
$valor3 = "AA_valor";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
//select a database to work with
$selected = mysql_select_db($database,$dbhandle)
or die("Could not select examples");
echo "Connected ao banco<br>";
//get data from db
$sql = mysql_query("SELECT * FROM $tabela");
$count=mysql_num_rows($sql);
//start a table
echo '<form name="form1" method="post" action="">
<table width="292" border="0" cellspacing="1" cellpadding="0">';
//start header of table
echo '<tr>
<th> </th>
<th>Name</th>
<th>Email</th>
</tr>';
//loop through all results
while($r=mysql_fetch_object($sql)){
//print out table contents and add id into an array and email into an array
echo '<tr>
<td><input type="hidden" name="id[]" value='.$r->$valor1.' readonly></td>
<td>'.$r->$valor2.'</td>
<td><input name="email[]" type="text" id="price" value="'.$r->$valor3.'"></td>
</tr>';
}
//submit button
echo' <tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>';
// if form has been submitted, process it
if(isset($_POST["Submit"]))
{
// get data from form
$name = $_POST['name'];
// loop through all array items
foreach($_POST['id'] as $value)
{
// minus value by 1 since arrays start at 0
$item = $value-1;
//update table
//appending suggested changes
//place of var_dumps
//$sql1 = mysql_query("UPDATE $tabela SET $valor3='$valor3[$item]' WHERE $valor1='$value'") or die(mysql_error());
$sql1 = mysql_query("UPDATE $tabela SET $valor3='$email[$item]' WHERE $valor1='$value'") or die(mysql_error());
}
// redirect user
$_SESSION['success'] = 'Updated';
header("location:index.php");
}
及
拜托,我真的看不出我的错误
非常感谢代码的修订
附言:我只是想记住。当我在浏览器中运行php时,它会按原样显示数据库表的内容。点击提交后,事情变得疯狂
编辑1
将“valor3”重命名为“email”后,它不再将字符串写入表中。
但是,将整列留空(如上图所示,在所有列单元格中写入空白)
编辑2
在注释中,我们认为这是代码的逻辑问题。
就是不知道该怎么办
更新
附言:我减少了行数,因此更容易看到和思考
我找到了!
stack不允许我回答自己的问题,所以,我正在按他们的意愿编辑
将此行字段“name”和“id”重命名为“anything”:
将其更改为相等(如@JA所述):
并对查询进行如下调整:
$sql1 = mysql_query("UPDATE $tabela SET $valor3='$valores[$item]' WHERE $valor1='$value'") or die(mysql_error());
完成了
非常感谢你的头脑风暴。
特别感谢@arielnmz,他给了我一个想法,让我能找到逻辑错误
顺便说一下,代码完成了
<?php
$username = "root";
$password = "";
$hostname = "localhost";
$database = "domonet";
$tabela = "AtuadorAnalogico";
$valor1 = "AA_id";
$valor2 = "AA_nome";
$valor3 = "AA_valor";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
//select a database to work with
$selected = mysql_select_db($database,$dbhandle)
or die("Could not select examples");
echo "Connected ao banco<br>";
//get data from db
$sql = mysql_query("SELECT * FROM $tabela");
$count=mysql_num_rows($sql);
//start a table
echo '<form name="form1" method="post" action="">
<table width="292" border="0" cellspacing="1" cellpadding="0">';
//start header of table
echo '<tr>
<th> </th>
<th>Name</th>
<th>Email</th>
</tr>';
//loop through all results
while($r=mysql_fetch_object($sql)){
//print out table contents and add id into an array and email into an array
echo '<tr>
<td><input type="hidden" name="id[]" value='.$r->$valor1.' readonly></td>
<td>'.$r->$valor2.'</td>
<td><input name="valores[]" type="text" id="valores" value="'.$r->$valor3.'"></td>
</tr>';
}
//submit button
echo' <tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>';
// if form has been submitted, process it
if(isset($_POST["Submit"]))
{
// get data from form
$valores = $_POST['valores'];
// loop through all array items
foreach($_POST['id'] as $value)
{
// minus value by 1 since arrays start at 0 (not anymore)
$item = $value;
//update table
$sql1 = mysql_query("UPDATE $tabela SET $valor3='$valores[$item]' WHERE $valor1='$value'") or die(mysql_error());
}
// redirect user
$_SESSION['success'] = 'Updated';
header("location:index.php");
};
更改电子邮件的表单元素,如下所示
<input name="email['.$r->$valor1.']" type="text" id="price" value="'.$r->$valor3.'">
在点击提交之前,请确保在电子邮件字段中输入内容。这没有意义:设置$valor3='$valor3[$item]'
$valor3
是一个字符串,而不是一个数组,为什么要索引它?有意义。但是,当我为表单中创建的数组更改它时,什么也没有发生。好吧,那你做错了。请将更新后的代码附加到问题。还显示表单的HTML,这样我们就可以知道您是否正在访问正确的$\u POST
变量。$item=$value-1这是什么意思?$valor3没有用户发布的值。可能应该是类似于SET$valor3='{$\u POST[$valor3][$item]}'
?酷!很高兴你自己找到了解决办法。var_dump()肯定是开始调试的最佳方式,不是吗?
<td><input name="valores[]" type="text" id="valores" value="'.$r->$valor3.'"></td>
$valores = $_POST['valores'];
$item = $value;
$sql1 = mysql_query("UPDATE $tabela SET $valor3='$valores[$item]' WHERE $valor1='$value'") or die(mysql_error());
<?php
$username = "root";
$password = "";
$hostname = "localhost";
$database = "domonet";
$tabela = "AtuadorAnalogico";
$valor1 = "AA_id";
$valor2 = "AA_nome";
$valor3 = "AA_valor";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
//select a database to work with
$selected = mysql_select_db($database,$dbhandle)
or die("Could not select examples");
echo "Connected ao banco<br>";
//get data from db
$sql = mysql_query("SELECT * FROM $tabela");
$count=mysql_num_rows($sql);
//start a table
echo '<form name="form1" method="post" action="">
<table width="292" border="0" cellspacing="1" cellpadding="0">';
//start header of table
echo '<tr>
<th> </th>
<th>Name</th>
<th>Email</th>
</tr>';
//loop through all results
while($r=mysql_fetch_object($sql)){
//print out table contents and add id into an array and email into an array
echo '<tr>
<td><input type="hidden" name="id[]" value='.$r->$valor1.' readonly></td>
<td>'.$r->$valor2.'</td>
<td><input name="valores[]" type="text" id="valores" value="'.$r->$valor3.'"></td>
</tr>';
}
//submit button
echo' <tr>
<td colspan="3" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>';
// if form has been submitted, process it
if(isset($_POST["Submit"]))
{
// get data from form
$valores = $_POST['valores'];
// loop through all array items
foreach($_POST['id'] as $value)
{
// minus value by 1 since arrays start at 0 (not anymore)
$item = $value;
//update table
$sql1 = mysql_query("UPDATE $tabela SET $valor3='$valores[$item]' WHERE $valor1='$value'") or die(mysql_error());
}
// redirect user
$_SESSION['success'] = 'Updated';
header("location:index.php");
};
<input name="email['.$r->$valor1.']" type="text" id="price" value="'.$r->$valor3.'">
foreach($_POST['email'] as $id=>$value)
$sql1 = mysql_query('UPDATE '.$tabela.' SET '.$valor3.'="'.$value.'" WHERE '.$valor1.'="'.$id.'" LIMIT 1') or die(mysql_error());