php中未定义的偏移量错误,是php中爆炸数组的一半

时间:2017-04-25 07:39:45

标签: php arrays indexing explode

我目前正在创建一个数据库,该数据库包含一般搜索文本的搜索框,并以表格格式提供搜索。实际数据为17列,但搜索结果仅为5列。 5列中的一列提供了指向另一页面的链接,该页面提供了来自其余列的所有数据。我的页面的PHP代码显示5个来自获取数据的列是

 <?php

$con = new mysqli("localhost","root","","project");

if(!$con){
    die("Database not found" .$con->connect_error);
}

$sw=$_POST['query'];

$sql= "SELECT * FROM ps1 WHERE Entry like '%".$sw."%' OR Prot_name like '%".$sw."%' OR Gene_name like '%".$sw."%' OR Function like '%".$sw."%' OR Org_name like '%".$sw."%'";
$res=mysqli_query($con,$sql);

$number=mysqli_num_rows($res);

echo "<h2>".$number."hits found</h2>";


echo"<br><table class='col3' border=1>
<tr><th>Uniprot ID
</th><th>Entry Name
</th><th>Protein name
</th><th>Gene name
</th><th>Sequence length
</th><th>Organism name
</th><th>Sequence
</th></tr>";

if(mysqli_num_rows($res) > 0)
{
while($row=mysqli_fetch_assoc($res))
    {
    echo "<tr>";
    echo "<td><a href=\"Fullentry.php?rowid=id".$row['Entry']."|".$row['Entry_name']."|".$row['Prot_name']."|".$row['Gene_name']."|".$row['Taxonomic_lineage']."|".$row['Org_name']."|".$row['Length']."|".$row['Subcellular_loc']."|".$row['Intramembrane']."|".$row['Topology']."|".$row['Transmembrane']."|".$row['Function']."|".$row['GO']."|".$row['Cross_ref']."|".$row['Pubmed_ID']."|".$row['Interpro']."\">ENTRY</a></td>";
    echo "<td>" . $row['Entry_name'] . "</td>";
    echo "<td>" . $row['Prot_name'] . "</td>";
    echo "<td>" . $row['Gene_name'] . "</td>";
    echo "<td>" . $row['Length'] . "</td>";
    echo "<td>" . $row['Org_name'] . "</td>";
    echo "<td><a href=\"Sequence.php?rowid=" . $row['Entry']."|".$row['Sequence'] . "\">FASTA SEQUENCE</a></td>";
    echo "</tr>";
    }
}

基本上我在这里做的是,我使用|运算符从表中拆分所有列并压缩成单个href链接。显示链接数据的下一页是 -

<?php

/*Get the previous page data into the variable */

$row = $_GET['rowid'];

/*Explode using the marker*/

$row = explode("|", $row);

/*Check if all indices are present*/

print_r($row);

/*Printing all the data from the previous page*/

echo "<h3>Entry for".$row[0]."</h3>";

echo "<h4>Uniprot ID</h4>";
echo "<h4>".$row[0]."<h4>";
echo "<br><h4>Entry name from Uniprot</h4>";
echo "<h4>".$row[1]."<h4>";
echo "<br><h4>Protein name</h4>";
echo "<h4>".$row[2]."</h4>";
echo "<br><h4>Gene name</h4>";
echo "<h4>".$row[3]."</h4>";
echo "<br><h4>Taxonomic Lineage</h4>";
echo "<h4>".$row[4]."</h4>";
echo "<br><h4>Organism name</h4>";
echo "<h4>".$row[5]."</h4>";
echo "<br><h4>Sequence length</h4>";
echo "<h4>".$row[6]."</h4>";
echo "<br><h4>Subcellular location</h4>";
echo "<h4>".$row[8]."</h4>";
echo "<br><h4>Intramembrane</h4>";
echo "<h4>".$row[9]."</h4>";
echo "<br><h4>Topology</h4>";
echo "<h4>".$row[10]."</h4>";
echo "<br><h4>Transmembrane</h4>";
echo "<h4>".$row[11]."</h4>";
echo "<br><h4>Function</h4>";
echo "<h4>".$row[12]."</h4>";
echo "<br><h4>GO-terminologies</h4>";
echo "<h4>".$row[13]."</h4>";
echo "<br><h4>Cross references</h4>";
echo "<h4>".$row[14]."</h4>";
echo "<br><h4>Pubmed ID</h4>";
echo "<h4>".$row[15]."</h4>";
echo "<br><h4>Interpro ID</h4>";
echo "<h4>".$row[16]."</h4>";
echo "<br><h4>Protein Sequence</h4>";
echo "<h3>".$row[7]."</h3>";

?>

这个页面的作用是,找到|并在explode函数的帮助下给出索引。 但我的问题是我只从索引中得到前4个值。我想要的是我需要显示来自第一页的早期传递值的所有17个值。任何帮助将被理解为什么只有第一个值被解析,为什么不解决?而且,如果有任何解决方案,它将被批评。先感谢您! PS - 我经历了很多PHP文档以及几乎所有与php&#39;中未定义的偏移错误有关的问题,但我找不到与我的问题有关的任何问题。如果有任何重复,我想道歉。

1 个答案:

答案 0 :(得分:1)

请参阅您发布的第一个代码段,$ _GET接收网址对您传递的字符串长度有限制。确保不要超过限制。 请参阅以下链接以获得更多说明。希望它可以帮助你。

Max size of URL parameters in _GET

P.S - 如果你能告诉我你第一段代码的全部代码,我可以帮你更多。

在这里编辑 -

首先,我将非常感谢您为第一个代码段提供完整代码的努力。 使用以下逻辑将条目发送到fullentry.php页面。

$entry = $_GET['rowid'];
$sql= "SELECT * FROM ps1 WHERE Entry like '%".$entry."%'";
$res=mysqli_query($con,$sql);

现在,获取fullentry.php文件中的条目值,然后使用下面的代码获取数据并显示在html上。

{{1}}

使用 $ res 对象,您只需从数据库中获取数据,就像在第一个代码段中一样。 喜欢 - $ res [&#39; Entry_name&#39;],$ res [&#39; Prot_name&#39;]

希望此解决方案可以为您提供帮助。 请点击这个答案很有用。