【问题标题】:update function: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING更新函数:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING
【发布时间】:2014-07-03 14:51:30
【问题描述】:

我想放更新功能。 我已经制作了一个表格,所以在用户更改他想要的所有内容后,他可以在“保存”处输入,并且此信息将被更新。但是当我按下“保存”时,它不会保存任何内容并显示错误:

"语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,期待 V:\home\op\www\edit.php 中的 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 第 20 行"

这是脚本,需要更新信息。 (我更新了你的建议)

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?
error_reporting(E_ALL|E_STRICT);
mysql_connect("localhost", "root", "") or die (mysql_error ());
mysql_select_db("university") or die(mysql_error()); 
$program = '".$_POST['program']."',
$code = '".$_POST['code']."',
$course = '".$_POST['course']."',
$form = '".$_POST['form']."',
$time = '".$_POST['time']."',
$price = '".$_POST['price']."',
$accreditation = '".$_POST['accreditation']."',
$department = '".$_POST['department']."',
$type = '".$_POST['level']."',
$type = '".$_POST['type']."',
$result = mysql_query("UPDATE news SET program='".$_POST['program']."', code='".$_POST['code']."', course='".$_POST['course']."', form='".$_POST['form']."', time='".$_POST['time']."', price='".$_POST['price']."', accreditation='".$_POST['accreditation']."', department='".$_POST['department']."', level='".$_POST['level']."', type='".$_POST['type']."' WHERE id='".$_POST['id']."'");
if ($result == true) {
echo "Данные успешно сохранены!";
}
else {
echo "Произошла ошибка, пожалуйста повторите попытку.";
}

表单(用户可以在其中放置新信息)

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="container">
<?php
mysql_connect("localhost", "root", "") or die (mysql_error ());
mysql_select_db("university") or die(mysql_error());
$res=mysql_query("SELECT * FROM news WHERE id=" . intval($_GET['id']) );
if($res !== false)
{
if(mysql_num_rows($res) > 0)
{
    $news=mysql_fetch_assoc($res);
    ?>
        <form id="form1" name="form1" method="post" action="edit.php">
        <label>Название <input name="program" type="text" id="program"     value="<?php echo $news['program'];?>" />
        <br />
        Код:  <input name="code" type="text" id="code"  value="<?php echo $news['price'];?>" />
        Курс:  <input name="course" type="text" id="course"  value="<?php echo $news['course'];?>" />
        Форма:  <input name="form" type="text" id="form"  value="<?php echo $news['form'];?>" />
        Срок:  <input name="time" type="text" id="time"  value="<?php echo $news['time'];?>" />
        Цена:  <input name="price" type="text" id="price"  value="<?php echo $news['price'];?>" />
        Акредитация:  <input name="accreditation" type="text" id="accreditation"  value="<?php echo $news['accreditation'];?>" />
        Кафедра:  <input name="department" type="text" id="department"  value="<?php echo $news['department'];?>" />
        Уровень:  <input name="level" type="text" id="level"  value="<?php echo $news['level'];?>" />
        Тип:  <input name="type" type="text" id="type"  value="<?php echo $news['type'];?>" />
        </label>
        <input name="id" type="hidden" id="id" value=”<?php echo $news['id']?>”/>
        <input name="program" type="hidden" id="program" />
        <p>
        <label>
        <input type="submit" name="Submit" value="сохранить" />
        </label>
        </p>
        </div>
    <?php
}
else
{
    echo 'Нет новости с таким ID';
}
}
else
{
echo 'Ошибка запроса к DB';
}

【问题讨论】:

  • 只是一个建议,尽量不要使用 mysql* 扩展,因为它们已被正式弃用。将您的代码移动到 mysqli* 或 pdo* 以获得更好的支持、模块化和安全性。

标签: php sql-update


【解决方案1】:

首先你需要检查更新语法http://dev.mysql.com/doc/refman/5.0/en/update.html

表格更新完成

Update table set col = 'someval'

我在查询中没有看到 SET

那么对于所有字符串值,它们必须用单引号括起来

你更愿意接受 sql 注入并开始使用 mysqli 准备好的语句 或 PDO

但是,在您学习preparedStatement之前,它应该如下所示

$result = mysql_query("UPDATE news set 
program='".$_POST['program']."', 
code='".$_POST['code']."',  
course='".$_POST['course']."', 
form='".$_POST['form']."', 
time='".$_POST['time']."',   
price='".$_POST['price']."', 
accreditation='".$_POST['accreditation']."', 
department='".$_POST['department']."', 
level='".$_POST['level']."', 
type='".$_POST['type']."' 
WHERE id='$id'");

【讨论】:

  • 我添加了 SET 并更改了 program='".$_POST['program']."', code='".$_POST['code']."', 但现在它显示错误 syntax error, unexpected T_STRING in V:\home\op\www\edit.php on line 10 这意味着:$program = '".$_POST['program']."',
  • 可以使用您拥有的新代码更新问题,因为我没有看到任何语法错误。
  • 哦不,你做错了,我已经添加了完整的更新代码eval.in/151621检查它应该是什么样子。
  • pff 我不知道我怎么了,现在它说Undefined variable: id in V:\home\op\www\edit.php on line 16 但我认为没关系,对吧?只是很奇怪,现在它显示我的消息“回声”Данные успешно сохранены!”这意味着“信息已成功保存”但是当我检查数据库时我没有看到任何变化
  • 我知道您需要在查询之前添加此行$id = $_POST['id'],它应该可以修复它。
【解决方案2】:

您需要更正查询变量的引用并使用 set 关键字尝试更改

$result = mysql_query("UPDATE news program='$_POST['program']', code='$_POST['code']',    course='$_POST['course'], form='$_POST['form']', time='$_POST['time']',   price='$_POST['price']', accreditation='$_POST['accreditation']', department='$_POST['department']', level='$_POST['level']', type='$_POST['type']' WHERE id='$id'");

$result = mysql_query("UPDATE news set program='".$_POST['program']."', code='".$_POST['code']."',    course='".$_POST['course']."', form='".$_POST['form']."', time='".$_POST['time']."',   price='".$_POST['price']."', accreditation='".$_POST['accreditation']."', department='".$_POST['department']."', level='".$_POST['level']."', type='".$_POST['type']."' WHERE id='$id'");

此外,如果您想在查询中使用设置的变量,请使用

mysql_query("UPDATE news set program='$program', code='$code',

...等等

同样使用mysql_real_escape_string()来防止sql注入

注意 :- 停止使用mysql_* 函数使用PDOmysqli_*

【讨论】:

  • 正如Abhik 在他的回答中提到的,您需要添加set 以更新查询
  • 我照你说的做了$result = mysql_query("UPDATE news program='".$_POST['program']."', code='".$_POST['code']."' 但它没有用,它显示了我的最后一条消息“回声”Произошла ошибка, пожалуйста повторите попытку。什么意思是“错误,再试一次”
  • @user3624030 见Abhik 答案。您需要添加SET 来更新查询
  • 是的,我做到了$result = mysql_query("UPDATE news SET program='".$_POST['program']."', code='".$_POST['code']."'
猜你喜欢
  • 2012-01-14
  • 2011-11-07
  • 2012-03-23
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多