PHP无法更新SQL

时间:2014-05-28 13:54:01

标签: php mysql sql

我在我的网站中使用了一个php部分,我有一个textarea从数据库中获取文本。用户可以编辑此文本,完成后按保存按钮,使用UPDATE我将更改数据库中的文本。 这是我的代码:

<?php 
    $con=mysqli_connect("localhost","userdb","codedb","projectdb");
    mysqli_set_charset($con, 'utf8');  
    // Check connection
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }


    $myQueryfac="SELECT text FROM main WHERE id=1";
    $result = mysqli_query($con,$myQueryfac);

    while($row = mysqli_fetch_array($result)) { 
        $t1=$row['text'];
    }

    $form="<form action='adminindex.php' method='post'>
        <textarea name='area1' maxlength='1500' cols='50' rows='10'>$t1</textarea>
        <input type='submit' name='enter' value='Save'>
        </form>";


    if($_POST['enter']) {
        $t1=$_POST['area1'];
        mysqli_query($con,"UPDATE main SET text='$t1' WHERE id='1'");
    }

    echo $form;
    mysqli_close($con);
?>

我的问题是在UPDATE查询中,它似乎忽略了$ t1并且数据库中没有任何变化。但是,如果我在那里随意放置一些东西,“RANDOM TEXT”,请将其改为成功。

3 个答案:

答案 0 :(得分:1)

您就是这样做的:

<强> test.php的     

// DB Connect
$con=mysqli_connect("localhost","userdb","codedb","projectdb");
mysqli_set_charset($con, 'utf8');  
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Handle POST
if (count($_POST))
{
    // Save In DB
    mysqli_query($con, sprintf("UPDATE main SET `text`='%s' WHERE id=%d",
        mysqli_real_escape_string($con, $_POST['area1']),
        1)); // id

    // Success
    echo "<p>Data updated.</p>";
}

// Load Existing Data
$myQueryfac="SELECT `text` FROM main WHERE id=1";
$result = mysqli_query($con, $myQueryfac);
$row = mysqli_fetch_array($result);

// Display Form
echo "<form action='test.php' method='post'>
    <textarea name='area1' maxlength='1500' cols='50' rows='10'>". $row['text'] ."</textarea>
    <input type='submit' name='enter' value='Save'>
    </form>";

// DB Close
mysqli_close($con);

?>

我改变了什么

  • 移动帖子处理程序(在select语句上方),以便在发生更新时,表单将显示最新更新的数据
  • 您的更新查询将id视为字符串,我将其格式化为数字(%d
  • 删除了while循环,你不需要它,因为它是一行返回
  • 添加了sql-injection预防(使用sprintfmysqli_real_escape_string
  • 在db字段名称text周围添加了反引号“(不确定这是否是保留字,因为它是sql数据类型之一)

答案 1 :(得分:0)

尝试

mysqli_query($con,"UPDATE main SET text='$t1' WHERE id=1");

相反

mysqli_query($con,"UPDATE main SET text='$t1' WHERE id='1'");

可能是带来问题的WHERE条件

答案 2 :(得分:0)

您正在检查$_POST数组中是否存在值。 enter是您的提交按钮,不会发送值。

试试这个:

if($_POST['area1']) {
    $t1=$_POST['area1'];
    mysqli_query($con,"UPDATE main SET text='$t1' WHERE id='1'");
}