【问题标题】:"insert into $schoolname ('cat','...) The $_POST " if statement " is not passing values into $schoolname table“插入 $schoolname ('cat','...) $_POST “if 语句”没有将值传递到 $schoolname 表中
【发布时间】:2012-07-28 22:18:14
【问题描述】:

在“插入”mysql 命令中读取 $schoolname 时遇到问题。

我只是在为跨越几所学校的粉丝俱乐部创建一个小东西。所以我为每所学校创建了一个不同的数据库表。每个学校都有一个唯一的 id,表名与之对应。代码如下。请帮忙。好吧,问题区域是插入部分。

"插入 $schoolname ('cat','...) 由于某种原因 $schoolname 没有被 $_POST if 语句捕获

如果我指定硬编码的表名,mysql 命令“insert into ....”会传递值,但如果我指定变量 ($schoolname) 代替表名,它不会传递值。我需要指定变量,因为有很多学校都有自己的表格。

    <?php
    require_once('include.php');
    include('imageupload.php');

$schoolid='';
if(isset($_GET['schoolid']) && isset($_GET['schoolid']) != '')
{
    $schoolid .= 'and id ='.$_GET['schoolid'];
}

$sqlschoolid = "select * from schools where status = 'Active' ".$schoolid;
$resschoolid = $obj->sql_query($sqlschoolid);
$school = $resschoolid[0];

$schoolname = $school['parameter'];
$schoolid2 = $school['id'];

    if($_POST)


{


    (isset($_POST['pr']) && $_POST['pr'] != "") ? $price=mysql_real_escape_string($_POST['pr']) :  $pr="" ;

    $sqlclass = "insert into $schoolname(`category`,`type`,`price`,`title`,`description`,`weburl`,`image`,`email`,`phone`,`address`,`city`,`state`,`zip`,`postdate`,`sponser`,`status`) 
    values('".$_POST['subcategory']."','".$_POST['type']."','".$pr."','".mysql_real_escape_string($_POST['title'])."','".mysql_real_escape_string($_POST['description'])."','".mysql_real_escape_string($_POST['weburl'])."','".$imagename."','".mysql_real_escape_string($_POST['email'])."','".mysql_real_escape_string($_POST['phone'])."','".mysql_real_escape_string($_POST['address'])."','".mysql_real_escape_string($_POST['city'])."','".mysql_real_escape_string($_POST['state'])."','".mysql_real_escape_string($_POST['zip'])."','".date('Y-m-d H:i:s')."','0','Active')";


    }

    ?>

【问题讨论】:

  • “我遇到了问题”——更具体地说?
  • 每个学校不同的数据库,还是每个学校的不同表?
  • 顺便说明一下,即使您的 HTML 自动填充了 $_POST['subcategory'] 和 $_POST['type'],您也应该转义。人们可以轻松更改该值并进行 SQL 注入。
  • 尝试不仅写问题,而且先自己阅读。你的问题解释不了
  • 对不起,我是一个初学者,把一些代码拼凑在一起学习

标签: php mysql variables post insert


【解决方案1】:

由于你没有具体说明你看到了什么问题,这只是一个猜测:

if(isset($_GET['schoolid']) && isset($_GET['schoolid']) != '')

不应该是这样的

if(isset($_GET['schoolid']) && $_GET['schoolid'] != '')

附带说明一下,如果用户在schoolid 中输入以下内容会发生什么:

0; delete from schools

这称为 SQL 注入,您应该使用“绑定变量”而不是通过连接字符串来构建查询。

【讨论】:

  • 我添加了更多细节。我将阅读绑定变量。但在我的包含文件中,我为 $_GET 和 $_POST 使用了 mysql_real_escape 特性。这会涵盖你提到的那个问题吗?问题在于表名的插入部分和 $schoolname,即插入 $schoolname
  • 我想出了如何解决它。 $schoolname 不会在“if (_$POST)”语句中执行,所以我在一个单独的文件中创建了它并使用了包含。现在一切正常并且读取良好。谢谢女士们先生们。现在是时候去做一些 SQL 注入保护了。有什么建议吗?
  • 编辑其实还是不行。出于某种原因,在 $_POST 语句中执行 $schoolname 时出现问题。一个表单指向该帖子声明
【解决方案2】:

问题似乎是以下查询:

$sqlschoolid = "select * from schools where status = 'Active' ".$schoolid;

最后的 $schoolid 变量是什么? 我看到 $schoolid 变量是什么,我认为该变量设置不正确。

据我了解,上述查询可能会引发错误,因此根本不会填充 $schoolname。您能否尝试打印该查询的样子?

EDIT 1 阅读过去的讨论,很明显$schoolname 变量是空的,即没有价值。这不是范围问题,因为您的代码 $schoolname 在全局范围内,因此在 $_POST IF 检查中可用。所以让我们尝试调试代码来分析选项:

  1. 你能在你写查询的地方加上echo $sqlschoolid;吗?这将确认查询格式正确

  2. 假设查询良好,现在让我们检查查询是否返回了正确的数据?我不确定您使用的是什么 DB 类,所以我不能说 $obj->sql_query() 返回什么?也许是 MySQL 结果集。无论如何,你能把var_dump($resschoolid) 放在它初始化的地方吗?下面还有一个var_dump($school)

这就是我希望您放置调试语句的方式:

$sqlschoolid = "select * from schools where status = 'Active' ".$schoolid;
echo $sqlschoolid;
$resschoolid = $obj->sql_query($sqlschoolid);
var_dump($resschoolid);
$school = $resschoolid[0];
var_dump($school);

$schoolname = $school['parameter'];
$schoolid2 = $school['id'];

我希望以上内容可以更深入地了解问题。如果您有任何问题,请告诉我。

【讨论】:

  • 当我在 $_POST if 语句上方执行时,我可以很好地回显它($schoolname 和 $sqlschoolid)。但是当我尝试在 $_POST 语句中回显它时,它不存在。没有读出。所以看来我的变量没有进入 $_POST if 语句。
  • 当我打印 $schoolname 时,它​​会显示 arrayschoolname 。
  • 我的问题是在另一个文件的选择部分中,$schoolname 执行但没有 $_POST if 语句(无表单)。这看起来像 $sqllisting="select * from $schoolname where status = 'Active'".$where.'按赞助商 desc 排序,postdate desc'.$max; $reslisting = $obj->sql_query($sqllisting);
  • 这个网站似乎有解决我的问题webdevrefinery.com/forums/topic/…
  • @BigFreeze,抱歉我的回复晚了。我编辑了我的回复,想知道​​您是否能够进行这些代码调整,然后向我们展示它抛出的输出,也许在您原来的问题中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多