Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Php 替换数据库中的不更新_Php_Mysql - Fatal编程技术网

Php 替换数据库中的不更新

Php 替换数据库中的不更新,php,mysql,Php,Mysql,我有一个带有id的表,它是主键,user\u id是外键,但会话在我的代码中基于此。 我已经尝试了一切,所以我会发布我的完整代码。 如果表中没有具有相同会话id的用户id,则应插入表单。如果有,它应该更新。 此时,当用户以前没有访问过表单(表中没有用户id)并且插入了数据时,页面返回到位置页面:但数据没有插入到表中。如果用户在数据更新后更改了数据,则数据也不会更改。 这是表结构: `thesis` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user

我有一个带有
id
的表,它是主键,
user\u id
是外键,但会话在我的代码中基于此。 我已经尝试了一切,所以我会发布我的完整代码。 如果表中没有具有相同会话id的
用户id
,则应插入表单。如果有,它应该更新。 此时,当用户以前没有访问过表单(表中没有用户id)并且插入了数据时,页面返回到位置页面:但数据没有插入到表中。如果用户在数据更新后更改了数据,则数据也不会更改。 这是表结构:

`thesis` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `thesis_Name` varchar(200) NOT NULL,
  `abstract` varchar(200) NOT NULL,
  `complete` int(2) NOT NULL DEFAULT '1',
   PRIMARY KEY (`id`),
    KEY `user_id` (`user_id`)
   )
我一直在使用的代码(失败):

$err=array();
$user\u id=intval($\会话['user\u id']);
//否则
如果(isset($_POST['doThesis'])){
$link=mysql\u connect(DB\u主机、DB\u用户、DB\u密码)或die(“无法建立连接”);
//检查当前用户是否被禁止
$the_query=sprintf(“选择COUNT(*)来自以下用户:`banked`=“0”和`id`=“d”,
$user_id);
$result=mysql\u查询($u查询,$link);
$user\u check=mysql\u num\u行($result);
//用户还好吗
如果($user\u check>0){
//必需的字段名在这里。。。
$required_fields=array('thesis_Name','abstract');
//检查是否有空字段
foreach($field\u name为必填字段){
$value=trim($\u POST[$field\u name]);
if(空($value)){
$err[]=“错误-$field\u名称是必填字段”;
}
}//没有错误
if(空($err)){
$id=mysql\u real\u escape\u字符串($\u POST['id']);
$thesis\u Name=mysql\u real\u escape\u字符串($\u POST['thesis\u Name']);
$abstract=mysql\u real\u escape\u字符串($\u POST['abstract']);
//替换查询
$query=“替换为论文(论文名称,摘要)值(“$thesis\u Name”,
“$abstract'),其中id=”$\u会话[user\u id]”;
if(!mysql_query($the_query))
回显“查询失败”;
else头(“location:myaccount.php?id='.$user_id”);
}}}
$rs\u settings=mysql\u query(“从论文中选择*,其中user\u id=$user\u id;”;
?>

class=“forms”> 论文题目* 摘要* //再次显示字段而不显示回显
我尝试了var_dum($query),但什么都没有出现


PS我知道代码并不完美,但我现在不是在问这个问题

也许你的意思是
用户id
不是
id

$query = "REPLACE INTO thesis ( thesis_Name, abstract) 
          VALUES ('$thesis_Name','$abstract') 
          WHERE user_id='{$_SESSION['user_id']}'";
或者如果您的意思是来自
$\u POST['id']

$query = "REPLACE INTO thesis ( thesis_Name, abstract) 
          VALUES ('$thesis_Name','$abstract') 
          WHERE id='$id'";
您还应该使用
UPDATE
,而不是
REPLACE
。我很确定它的速度更快,因为REPLACE基本上删除了行,然后再次插入它,我很确定你需要所有的字段和值,否则就插入默认值。从:

所有列的值均取自中指定的值 替换语句。任何缺少的列都将设置为默认列 值,就像INSERT一样

因此,您应该使用:

$query = "UPDATE thesis 
          SET thesis_Name='$thesis_Name', abstract='$abstract' 
          WHERE id='$id'";

我看不出replace语句将如何插入初始行,因为where子句总是会为false(不会有具有该用户Id的行)。 我认为您想要使用replace,您需要将其替换为论文(id、userid等),而不需要where子句。如果id和userid有唯一的约束,并且存在userid的行,那么它将被更新;如果它不存在,将插入它。 但是,如果您不知道id,而如果您使用的是自动增量,您将不知道id,那么我不确定您是否可以使用replace来执行此操作。看

为什么不检查行的存在,然后使用update或insert


顺便问一下,用户可以在一个表单中输入多篇论文,还是只输入一篇?您的表格表明他们可以有多个。如果这是您试图实现的,那么我认为您应该将每个论文的id存储在一个隐藏字段中,作为表单数据的一部分。然后可以使用REPLACE-INTO-thesis(id,user\u id,thesis\u name,abstract)值($id,$user\u id,$thesis\u name,$abstract),其中id是从每个隐藏字段获得的论文的id。如果不存在,即用户输入了新论文,则在插入中使用NULL作为id。由于id列是自动递增的,这将使用REPLACE-INTO进行操作。

您做的每件事都是正确的,但有一件事您做错了 您的replace查询变量是$query,您正在执行$u查询。 你错在这里了:

$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
   '$abstract') where id='$_SESSION[user_id]'";
    if (!mysql_query($the_query)) // this is wrong 
        echo "the query failed";
替换为:

$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
   '$abstract') where id='$_SESSION[user_id]'";
    if (!mysql_query($query)) // use $query
        echo "the query failed";

谢谢你的建议!我尝试过这样做,但始终没有成功。要查看用户是否存在一行,请执行:从论文中选择1,其中user\u id=$user\u id。如果返回一行,则您知道该用户存在一行,以便您可以执行UPDATE thesis SET[etc],其中user\u id=user\id。否则,执行INSERT INTO thesis(user\u id,etc)值($user\u id等)您正在执行的是
mysql\u query($the\u query)
,而不是
mysql\u query($query)
。显示此项是正确的,查询失败将替换为论文(论文名称,摘要)值('test','test'),其中user\u id='55'我可以输入什么来显示查询试图输入的内容吗?
$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
   '$abstract') where id='$_SESSION[user_id]'";
    if (!mysql_query($query)) // use $query
        echo "the query failed";