我在使用$ insertname读取“插入到”mysql命令时遇到问题。
我只是为一个跨越几所学校的粉丝俱乐部创造一件小事。所以我为每所学校创建了一个不同的数据库表。每个学校都有一个唯一的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')";
}
?>
答案 0 :(得分:2)
由于你没有指明你所看到的问题,这只是一个猜测:
if(isset($_GET['schoolid']) && isset($_GET['schoolid']) != '')
不应该是
if(isset($_GET['schoolid']) && $_GET['schoolid'] != '')
作为旁注,请考虑如果用户在schoolid
中输入以下内容会发生什么:
0; delete from schools
这称为SQL注入,您应该使用“绑定变量”而不是通过连接字符串来构建查询。
答案 1 :(得分:0)
问题似乎是以下问题:
$sqlschoolid = "select * from schools where status = 'Active' ".$schoolid;
最后$ schoolid变量是什么?我看到什么是$ schoolid变量,我认为变量没有正确设置。
根据我的理解,上述查询可能会抛出错误,因此$ schoolname根本没有填充。您能否尝试打印该查询的样子?
编辑1 阅读过去的讨论,显然$schoolname
变量为空,即没有值。这不是范围问题,因为您的代码$schoolname
位于全局范围内,因此可在$ _POST IF检查中使用。因此,让我们尝试调试代码来分析选项:
您可以在编写查询后放置echo $sqlschoolid;
吗?这将确认查询格式是否正确
假设查询是好的,现在让我们检查查询是否返回正确的数据?我不确定你使用的是哪个DB类,所以我不能说$ obj-&gt; 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'];
我希望以上内容能够更深入地了解这个问题。如果您有任何疑问,请与我联系。