";插入$schoolname(';猫';,';..)$_POST“;if语句“;没有将值传递


"insert into $schoolname ('cat','...) The $_POST " if statement " is not passing values into $schoolname table

在"insert into"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')";

    }
    ?>

由于您还没有指定您看到的问题,这只是一个猜测:

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

那不应该是吗

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

作为旁注,考虑一下如果用户在schoolid:中输入以下内容会发生什么

0; delete from schools

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

问题似乎是以下查询:

$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'];

我希望以上内容能让我们对这个问题有更多的了解。如果你有任何问题,请告诉我。