0

我有一个 php 页面,它从包含电子邮件地址的 dbms 中提取数据。这行得通。然后它会显示电子邮件地址和其他存储的数据数据。然后,用户可以选择在 php 页面中设计的名为 emailselected 的字段中放置一个“X”。这也有效。我现在想根据存储的电子邮件地址使用新字段更新 dbms,但更新语句不起作用。请帮忙。php 文件的这一部分在这里。

    include("db.php");
if (isset($_POST['ssubmit']))
    {
    $id_save = $test['id'];
    $emailselected_save = $_POST['emailselected'];
    $email_save = $test['email'];

    mysql_query("UPDATE emails SET selected='$emailselected_save' WHERE id = 'id'");
    echo "<input type='button' value='Email(s) sent' onclick='goBack()' />";
mysql_close($conn);
    } else {echo "hello";}
?>
</head>
<form method='post'>
    <div id='headd'>
    <br />
    <input type='button' value='Close this window without Sending' onclick='goBack()' />
    <input type='submit' name='ssubmit' id='ssubmit' value='Send Email Now!!!' />
    <p>Place an "X" in the emails you wish to send!!!</p>
    </div>
    <body>
        <br /><br/>

<?php
    include("db.php");  
    $result = mysql_query("SELECT * FROM emails WHERE unsubscribe  != 'x' ORDER BY lastname ASC");
            while($test = mysql_fetch_array($result))
            {
?>
    <table border='1' width='78%'>
    <tr align=\"left\">
        <td width='4%'><font color='black'><input type='text' size='1' id='emailselected' name='emailselected' /></font></td>
        <td width='15%'><font color='black'><?php echo $test['lastname']?></font></td>
        <td width='15%'><font color='black'><?php echo $test['firstname']?></font></td>
        <td width='40%'><font color='black'><?php echo $test['email']?></font></td>
        <td width='4%'><font color='black'><?php echo $test['id']?></font></td>
    </tr>
</table>
<?php
            }
?>
</form>

表单顶部是一个包含语句。这是有效的,因为它提取了电子邮件地址并将其显示在 php 文件中。

我究竟做错了什么?

4

1 回答 1

0

如果数据没有更新,您几乎受限于以下可能性:

  • 声明失败;或者
  • 该语句不影响任何行;或者
  • 该语句影响了错误的行。

要找出哪个,您应该检查返回代码mysql_query,看看它是否失败:

$rc = mysql_query('my hovercraft is full of eels');
if (!$result) {
    die('What?: ' . mysql_error());
}

如果它没有失败,那么您应该检查它影响了多少行mysql_affected_rows()

$num = mysql_affected_rows();
printf("Updated %d rows\n", $num);

检查返回它们的函数的返回值是一种很好的编程习惯。

输出或记录您在 SQL 语句中使用的所有变量以确保它们是您认为的那样也是一个好主意。

而且,尽管现在应该不言而喻,但不鼓励mysql_*使用这些功能,您应该使用(or )代替。mysqli_*PDO


而且我刚刚注意到您的 HTML 元素层次结构似乎不太正确。您有效地:

<head>
    :
</head>
<form>
    :
    <body>
        :

这不适合我。我不确定这在体外form是否有效。根据w3c 规范,html 元素必须包含:

一个头部元素,后跟一个主体元素。

于 2012-12-13T12:59:54.523 回答