【问题标题】:Insert php record from mysql table into a different table将mysql表中的php记录插入到另一个表中
【发布时间】:2011-08-15 21:11:44
【问题描述】:

我一直在寻找一个解决我觉得很简单的问题的方法。

我有一个动态创建的页面,其中包含一个具有唯一 ID 的视频。我还有一个用户可以提交内容的表单。我希望将视频的 id 包含在提交给 tableA 的内容中。

此代码仅在 $id = 1 时才有效。

$vidq = "SELECT * FROM tutorials";
$vidresult = mysql_query($vidq);
$vidrow = mysql_fetch_array($vidresult);

//form submission
if($_POST['formname'] == "submit") {

$name = $_POST['name'];
$id = $vidrow['id'];
$errorMessage = "";
if(empty($name)) {
    $errorMessage .= "<li>Please enter a valid name</li>";
    }

if(empty($errorMessage)) {

    $insert = "INSERT INTO tableA (videoid, name) VALUES (".$id.", ".$name.")"; 

    mysql_query($insert);
    exit();
    }
}

当我将 $id 更改为 = 1 时,它会发布,但是当我将 $id 更改为 = $vidrow['id'] 时,它不会发布。

我做错了什么?

【问题讨论】:

  • 提防Bobby Tables。然后尝试list($vidrow) = mysql_fetch_array(...)
  • 您不想从表单中保存视频的id 吗?您正在从教程表中选择一个随机行并使用其id。您应该在表单的隐藏输入中拥有与表单关联的视频的id,然后从$_POST 中读出与名称相同的内容。您还遇到$name 的值既没有转义也没有用单引号括起来的问题。
  • @Linus 他为什么要这样做? mysql_fetch_array 返回单行作为关联数组,这就是他尝试使用它的方式。
  • tutorial 表中具有视频 ID 的列是否名为 id?你得到了什么错误?更多关于it doesn`t post的信息,请
  • 你的教程表是空的吗?

标签: php mysql forms


【解决方案1】:

尝试使用 mysql_errno/mysql_error 显示 mysql 错误消息。比如……

if (!mysql_query($insert))
{
    die('MySQL Fail (' . mysql_errno() . ') - ' . mysql_error());
}

mysql_errno() 文档 - http://php.net/manual/en/function.mysql-errno.php

【讨论】:

    【解决方案2】:
    1. 您是否尝试在$id = $vidrow['id']; 之后打印出$id 的内容?它可能会揭示为什么它不能按您想要的方式工作......

    2. 您是否想过如果恶意(或只是好奇)用户使用 ?name=%27%27%29%3b%20DROP%20TABLE%20tableA%3B 调用您的脚本会发生什么?

    【讨论】:

    • 是的。我认为在正确提交表单后添加该代码是最简单的。不过还是谢谢
    • 这是一种可能的策略,但它承担着因任何原因被遗忘的风险(可能是因为人类就像他们一样)。最好立即做这些事情——这只是对mysql_real_escape() 的一个电话。顺便提一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2014-08-12
    相关资源
    最近更新 更多