首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP无法更新SQL

PHP无法更新SQL
EN

Stack Overflow用户
提问于 2014-05-28 13:54:00
回答 3查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
<?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);
?>

我的问题是在更新查询中,它似乎忽略了$t1,数据库中没有任何变化。但是如果我把一些随机的东西放进去,“随机文本”,成功地改变它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-28 14:10:07

你就是这样做的:

test.php

代码语言:javascript
复制
// 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);

?>

我改变了什么

  • 将post提交器向上移动(在select语句之上),以便如果发生更新,表单将显示最新更新的数据。
  • 您的更新查询将id视为字符串,我将其格式化为数字(%d)。
  • 删除while循环,您不需要它,因为它是返回的单个行
  • 添加sql-注入预防(使用sprintfmysqli_real_escape_string)
  • 在db字段名旁边添加text (不确定这是否是一个保留字,因为它是sql数据类型之一)
票数 1
EN

Stack Overflow用户

发布于 2014-05-28 14:10:07

试着做

代码语言:javascript
复制
mysqli_query($con,"UPDATE main SET text='$t1' WHERE id=1");

相反,

代码语言:javascript
复制
mysqli_query($con,"UPDATE main SET text='$t1' WHERE id='1'");

它可能是导致你的问题的原因

票数 0
EN

Stack Overflow用户

发布于 2014-05-28 14:10:58

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

试试这个:

代码语言:javascript
复制
if($_POST['area1']) {
    $t1=$_POST['area1'];
    mysqli_query($con,"UPDATE main SET text='$t1' WHERE id='1'");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23913629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档