新人做一个表单编辑功能的实现,遇到瓶颈求帮助

WBOY
Freigeben: 2016-06-23 13:29:54
Original
848 Leute haben es durchsucht

<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id" value="<?php echo $row['objid']?>">				<input type="text" name="objname" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$objname=$_POST["objname"];					$objinfo=$_POST["objinfo"];					$id = $_POST['id'];					$strSql="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";					$result=mysql_query($strSql,$myconn);					if(!$result){    					die(mysql_error());					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren

以上是代码,只能成功修改最后一行,原因是我用while读取后Post选择的总是最后一行,想了有段时间了想不出怎么做
求指导,最好有代码,js可以看懂一点,Jquery咱不会使,毕竟php和js还没完全搞明白


回复讨论(解决方案)

顺带一提,这个页面的前一个页面没有传任何值出来,没有session。
这个页面表单打印全是直接从数据库调的

没人吗

你post的应该只有最后一个记录

input 的name属性名一样,取最后一个

你post的应该只有最后一个记录


这个我知道了,我想求个解决思路或者具体代码来实现我的目的

你每个表单的name得不同,不然只能获取到$_POST[‘objname’]和$_POST['objinfo']两个post值

你每个表单的name得不同,不然只能获取到$_POST[‘objname’]和$_POST['objinfo']两个post值



中改成:




input 的name属性名一样,取最后一个


我是用id调的数据,问题在三个column的name都是一样的,只有value不一样,怎么才能把他们分开分别调用


你每个表单的name得不同,不然只能获取到$_POST[‘objname’]和$_POST['objinfo']两个post值



中改成:





这个思路好!我试试


你每个表单的name得不同,不然只能获取到$_POST[‘objname’]和$_POST['objinfo']两个post值



中改成:





这么一改怎么用post提数据啊?
$objname=$_POST["objname"];怎么写

你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行

你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$i=0;					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[i]"];						$objinfo=$_POST["objinfo[i]"]; 						$id = $_POST["id[i]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}						$i++;					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

我按照你的思路改成这样了
post获得的是一整个表单,我让他逐条更新写入,但是为啥数据库那边没改啊
post获得的值打在这里:Array ( [id] => Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 10 ) [objname] => Array ( [0] => 123123 [1] => 321 [2] => 456 [3] => 654 ) [objinfo] => Array ( [0] => 132132 [1] => 321 [2] => 456 [3] => 654 ) )

你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


这个数组思路好,赞一个,这样post取值的通过遍历数组就可以区分不同的name:_POST['objname[0],学习了,我想法是通过js修改name值,有点蛋疼!


你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$i=0;					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[i]"];						$objinfo=$_POST["objinfo[i]"]; 						$id = $_POST["id[i]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}						$i++;					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

我按照你的思路改成这样了
post获得的是一整个表单,我让他逐条更新写入,但是为啥数据库那边没改啊
post获得的值打在这里:Array ( [id] => Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 10 ) [objname] => Array ( [0] => 123123 [1] => 321 [2] => 456 [3] => 654 ) [objinfo] => Array ( [0] => 132132 [1] => 321 [2] => 456 [3] => 654 ) )



$_POST["objname[i]"];这个是不是有问题。



你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$i=0;					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[i]"];						$objinfo=$_POST["objinfo[i]"]; 						$id = $_POST["id[i]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}						$i++;					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

我按照你的思路改成这样了
post获得的是一整个表单,我让他逐条更新写入,但是为啥数据库那边没改啊
post获得的值打在这里:Array ( [id] => Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 10 ) [objname] => Array ( [0] => 123123 [1] => 321 [2] => 456 [3] => 654 ) [objinfo] => Array ( [0] => 132132 [1] => 321 [2] => 456 [3] => 654 ) )



$_POST["objname[i]"];这个是不是有问题。


改成$i了还是不行,有引号方面的问题吗?




你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$i=0;					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[i]"];						$objinfo=$_POST["objinfo[i]"]; 						$id = $_POST["id[i]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}						$i++;					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

我按照你的思路改成这样了
post获得的是一整个表单,我让他逐条更新写入,但是为啥数据库那边没改啊
post获得的值打在这里:Array ( [id] => Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 10 ) [objname] => Array ( [0] => 123123 [1] => 321 [2] => 456 [3] => 654 ) [objinfo] => Array ( [0] => 132132 [1] => 321 [2] => 456 [3] => 654 ) )



$_POST["objname[i]"];这个是不是有问题。


改成$i了还是不行,有引号方面的问题吗?


这样想好像不是很好,现在不是可以获得post过来的3个数组了吗,你根据3个数组再组合下,分别插入数据库,不要想着把$_POST[["objname[i]"]插入数据库,而是把$data=array();$data=$_POST["objname"],然后在分别把3个新定义的数组插入数据库。

				if(!empty($_POST)){					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[]"];						print_r($_POST["objname[]"]);						print_r($objname);						$objinfo=$_POST["objinfo[]"];						$id = $_POST["id[]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}					}					echo"修改成功!";									}
Nach dem Login kopieren
Nach dem Login kopieren

想了一下,是不是不用$i也行,但是还是取不出post里数组的数据(感觉是个基础问题)
有劳大佬了


你还要能分条保存啊?那分数组。





这样,获得三个数组。之后你想直接插还是整合成一个数组再插都行


<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					$i=0;					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[i]"];						$objinfo=$_POST["objinfo[i]"]; 						$id = $_POST["id[i]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}						$i++;					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

我按照你的思路改成这样了
post获得的是一整个表单,我让他逐条更新写入,但是为啥数据库那边没改啊
post获得的值打在这里:Array ( [id] => Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 10 ) [objname] => Array ( [0] => 123123 [1] => 321 [2] => 456 [3] => 654 ) [objinfo] => Array ( [0] => 132132 [1] => 321 [2] => 456 [3] => 654 ) )



找了半天,你这执行的是$sqlstr,但定义的字符串是$sqlstr2






$limit = 5;
$strSql="select * from news limit ".$limit;
$result=mysql_query($strSql,$myconn);
while($row=mysql_fetch_array($result))
{
$title1=$row['title'];
$link1=$row['link'];
?>





}
print_r($_POST);
if(!empty($_POST)){
for($i=0;$i<$limit;$i++)
{
$title=$_POST["title"][$i];
$link=$_POST["link"][$i];
$id = $_POST["id"][$i];

$strSql = "UPDATE news SET title='".$title."' , link='".$link."' WHERE id='".$id."'";
$result2=mysql_query($strSql,$myconn);
if(!$result2){
die(mysql_error());
}else{
//echo"修改成功!";
}
}


}
?>
title link



我本地测试了一下,这样是可以用的,以上是table里的代码

				if(!empty($_POST)){					while($row=mysql_fetch_array($result))					{						$objname=$_POST["objname[]"];						print_r($_POST["objname[]"]);						print_r($objname);						$objinfo=$_POST["objinfo[]"];						$id = $_POST["id[]"];						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql,$myconn);						if(!$result2){	    					die(mysql_error());						}					}					echo"修改成功!";									}
Nach dem Login kopieren
Nach dem Login kopieren

想了一下,是不是不用$i也行,但是还是取不出post里数组的数据(感觉是个基础问题)
有劳大佬了


我写了print_r($_POST["$objname"]);和print_r($_POST["$objname[]"]); 都没反应

$objname=array();
$bojname=$_POST['bojname'];
$objinfo=array();
$bojname=$_POST['bojname'];
$id=array();
$id=$_POST['id'];
for ($i=0,i $sql='update table_test set objname='.$objname[$i].',objinfo='.$objinfo[$i].' where objid='.$id[$i];
}
试试这个思路


用 $objname=$_POST["objname"][$i]; 吧。






$limit = 5;
$strSql="select * from news limit ".$limit;
$result=mysql_query($strSql,$myconn);
while($row=mysql_fetch_array($result))
{
$title1=$row['title'];
$link1=$row['link'];
?>





}
print_r($_POST);
if(!empty($_POST)){
for($i=0;$i<$limit;$i++)
{
$title=$_POST["title"][$i];
$link=$_POST["link"][$i];
$id = $_POST["id"][$i];

$strSql = "UPDATE news SET title='".$title."' , link='".$link."' WHERE id='".$id."'";
$result2=mysql_query($strSql,$myconn);
if(!$result2){
die(mysql_error());
}else{
//echo"修改成功!";
}
}


}
?>
title link



我本地测试了一下,这样是可以用的,以上是table里的代码


原来是这样写的,受教了

用 $objname=$_POST["objname"][$i]; 吧。

一下子没想到这个,$_POST["objname"][$i]这样的得到post的值,应该就可以插入了,问题应该可以解决了。

用 $objname=$_POST["objname"][$i]; 吧。


多谢大佬帮助,基本上问题都解决了,还差一个定循环里i的终止值为表单长度,这个我自己来吧
真是太感谢了!



用 $objname=$_POST["objname"][$i]; 吧。

一下子没想到这个,$_POST["objname"][$i]这样的得到post的值,应该就可以插入了,问题应该可以解决了。


也多些这位仁兄的热心帮助!太感动了

<?php	$myconn=mysql_connect("localhost","root","");	mysql_select_db("login_test",$myconn);	if(!$myconn){    	echo "连接失败".mysql_error();	}?><html>	<head>		<title>Edit</title>		<link href="css.css" rel="stylesheet" type="text/css" />	</head>	<body>		<form method="POST">			<table>				<tr class="table_head">				<td>objname</td>				<td>objinfo</td>				</tr>				<?php					$strSql="select * from table_test";					$result=mysql_query($strSql,$myconn);					while($row=mysql_fetch_array($result))					{					$objname1=$row['objname'];					$objinfo1=$row['objinfo'];				?>				<tr>				<td><input type="hidden" name="id[]" value="<?php echo $row['objid']?>">				<input type="text" name="objname[]" value="<?php echo $objname1?>" /></td>				<td><input type="text" name="objinfo[]" value="<?php echo $objinfo1?>" /></td>				</tr>				<?php					}				print_r($_POST);				if(!empty($_POST)){					for($i=0;$i< mysql_num_rows($result);$i++){						$objname=$_POST["objname"][$i];						print_r($objname);						$objinfo=$_POST["objinfo"][$i];						print_r($objinfo);						$id = $_POST["id"][$i];						print_r($id);						$strSql2="update table_test set objname='$objname',objinfo='$objinfo' where objid='$id'";						$result2=mysql_query($strSql2,$myconn);						if(!$result2){	    					die(mysql_error());						}					}					echo"修改成功!";									}				?>			</table>			<br>			<div style="display:inline;">				<input type="submit" class="button_black"/>				<input type="button" class="button_black" value="返回" onclick="javascript:document.location.href='test.php'"/>		</form>	</body><?php mysql_close($myconn); ?></html>
Nach dem Login kopieren

这里是最终成型代码
感谢fedcgfedbe和csjazqx的热心帮助!



用  $objname=$_POST["objname"][$i]; 吧。


多谢大佬帮助,基本上问题都解决了,还差一个定循环里i的终止值为表单长度,这个我自己来吧
真是太感谢了!
咱不是大佬。。做这行也没多久的。只是在帮助别人的时候自己也能温习。
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage