我是php和MySQL的新手。我有一个用户可以选择州并在该州展示医院的网站。它适用于FireFox适用于所有州,但在IE中,当我拥有几百家医院时,屏幕闪烁,我最终收到一条消息,表明该页面无法显示。对于拥有少数医院的较小州,查询在IE中运行良好。
同样,我是新手,所以任何建议都将不胜感激。这是代码:
<form action="redirect_hosp.php" method="get">
<?php
$link = mysql_connect('SERVERNAME.com', 'USERNAME', 'PASSWORD');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
/*print 'Connected successfully';*/
mysql_select_db(it_phys);
$sql = "SELECT distinct(state) FROM hospitals ORDER BY state";
$rs = mysql_query($sql)or die("Connection to DataBase failed");
print ("<div align=center>");
print("<font color='#008000' size='2' face='Tahoma'><b>Find a Hospital</b></font><br><br>");
print ("Select a State<br>");
print ("<SELECT name='State' onchange='form.submit();'>");
print("<OPTION value='none' selected></OPTION>\n");
for($i = 0; $i < mysql_num_rows( $rs ); $i++)
{
$tmp = mysql_fetch_row( $rs );
print("<OPTION value=\"$tmp[0]\">$tmp[0]</OPTION>\n");
}
print ("</SELECT>");
print ("</div>");
mysql_free_result($rs);
mysql_close($link);
?>
<?php
if(isset($_GET['State']))
{
$State=$_GET['State'];
print "<div align=center><br><br>";
print "State Selected: ".$State;
print "<br><br></div>";
/* run query to pull members based on state */
$link = mysql_connect('SERVERNAME.com', 'USERNAME', 'PASSWORD');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
/*print 'Connected successfully';*/
mysql_select_db(it_phys);
$query = "SELECT
hospitals.`Hospital Name`, hospitals.Address1,
concat(rtrim(hospitals.City),', ',rtrim(upper(hospitals.State)), ' ', hospitals.zip) as City_State,
hospitals.state,hospitals.`Phone Number`,hospitals.`Hospital Type`,hospitals.`Emergency Service`,
hospitals.map
FROM hospitals WHERE hospitals.state='".$State."' ORDER by hospitals.`Hospital Name`";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
/* show in table */
// Printing results in HTML
print "<style>
h2 { border-bottom: 3px solid red; }
table { border-bottom: 1px solid blue; align='left'; cellpadding=0; cellspacing=0 }
td {border-bottom: 0px outset black; cellpadding=0 }
</style>";
print "<div align=center>";
print "<table cellpadding='20'>";
$i=0;
$rows=mysql_num_rows($result);
while($i < $rows) {
print "<tr>";
print "<style> td {border-bottom: 3px outset green; }</style>";
print "<td valign='top' align='left'>";
print "<font color='red'><strong>".mysql_result($result, $i, 0)."</strong></font>";
print "<br>".mysql_result($result, $i, 1);
print "<br><font color='red'>".mysql_result($result, $i, 2)."</font>";
print "<br>".mysql_result($result, $i, 4);
print "</td>";
print "<td width=350 valign='top' align='left'>";
print "<br>Type: ".mysql_result($result, $i, 5);
print "<br>Emergency Care: ".mysql_result($result, $i, 6);
print "<br><br>";
print "<a STYLE='text-decoration:none' target='_blank'
href='http://maps.google.com/maps?f=q&source=s_q&hl=en&q="
.mysql_result($result, $i, 7)."'><b> Show Map</b></a>";
print "</td>";
print "</tr>";
$i=$i+1;
}
mysql_free_result($result);
mysql_close($link);
}
print "</table>"
?>
答案 0 :(得分:2)
这可能是这一部分:
print "<tr>";
print "<style> td {border-bottom: 3px outset green; }</style>";
print "<td valign='top' align='left'>";
您应该将样式数据移动到之前的样式标记。
关于你的PHP代码:
mysql_select_db(it_phys);
除非it_phys是常量,否则应引用
mysql_select_db('it_phys');
而不是for循环,它计算返回的行数N + 1次,其中N是返回的行数,
for($i = 0; $i < mysql_num_rows( $rs ); $i++)
{
$tmp = mysql_fetch_row( $rs );
print("<OPTION value=\"$tmp[0]\">$tmp[0]</OPTION>\n");
}
在循环时尝试这个(并在数组周围使用括号):
while ($tmp = mysql_fetch_row($rs)) {
print("<OPTION value=\"{$tmp[0]}\">{$tmp[0]}</OPTION>\n");
}
使用mysql_real_escape_string转义进入数据库的所有输入:
$query = "SELECT
`Hospital Name`, Address1,
concat(rtrim(hospitals.City),', ',rtrim(upper(State)), ' ', zip) as City_State,
state,`Phone Number`,`Hospital Type`,`Emergency Service`,
map
FROM hospitals WHERE state='".mysql_real_escape_string($State)."' ORDER by `Hospital Name`";
答案 1 :(得分:0)
它可能与MySQL无关。没有查看实际页面(链接?)很难说,但是你在标签属性和其他可能导致IE解析器进入barf的地方输出了许多原始未转义的数据库数据。
应使用urlencode()
转义链接内的数据。属性内或其他内容中的数据可能应使用htmlspecialchars()
进行转义,除非您知道不这样做是安全的。
(也就是说,“无法显示页面”可能是由 lot 引起的,其中一些是早期的DOM访问,附加组件,缓存等。它们可能很难追查。)
答案 2 :(得分:0)
在查询完成检索所有记录之前,您的PHP脚本可能会超时。您的脚本超时设置为什么?
此外,您还需要了解如何将数据与逻辑和逻辑从演示文稿中分离出来。
答案 3 :(得分:0)
当在服务器上生成页面时,查询不能“废弃”IE。也许这是你生成的HTML。
扫描代码时我注意到的一些事情: