Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新MySql/PHP表-插入变量名而不是值_Php_Mysql_Forms - Fatal编程技术网

更新MySql/PHP表-插入变量名而不是值

更新MySql/PHP表-插入变量名而不是值,php,mysql,forms,Php,Mysql,Forms,我已经搜索了太多关于它的内容,但是,我甚至不是PHP脚本的新手。。。所以我需要帮助 我正在开发一个自制的家庭自动化系统,基于PHP/MySql,我需要一个后端来更新数据库表,让事情真正在现场发生 所以,我找到了我需要的代码,经过一些修改后,它就在这里 <?php $username = "root"; $password = ""; $hostname = "localhost"; $database = "domon

我已经搜索了太多关于它的内容,但是,我甚至不是PHP脚本的新手。。。所以我需要帮助

我正在开发一个自制的家庭自动化系统,基于PHP/MySql,我需要一个后端来更新数据库表,让事情真正在现场发生

所以,我找到了我需要的代码,经过一些修改后,它就在这里

<?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>&nbsp;</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>&nbsp;</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>&nbsp;</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());