2017-04-25 8 views
0

현재 일반 텍스트 기반 검색을위한 검색 상자로 구성된 데이터베이스를 만들고 표 형식으로 검색합니다. 실제 데이터는 17 열이지만 검색 결과는 5 열만 제공합니다. 5 열의 한 열은 나머지 열의 모든 데이터를 제공하는 추가 페이지에 대한 링크를 제공합니다. 데이터를 가져 오는로부터 5 열을 표시 내 페이지에 대한 PHP 코드는 -, 내가이 하나의 href로 테이블의 모든 열을 분할하는 | 연산자를 사용하고 압축 된 것을 내가 여기 짓을 기본적으로PHP에서 폭발 배열의 절반에 대한 PHP에서 정의되지 않은 오프셋 오류가 발생했습니다

<?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>"; 
    } 
} 

링크. 링크가에서 데이터를 보여줍니다 다음 페이지 -이 페이지는 무엇

<?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>"; 

?> 

, 그것은 |를 발견하고 기능을 폭발의 도움으로 색인을 제공합니다. 하지만 내 문제는 인덱스의 처음 4 개 값만 얻는 것입니다. 내가 원하는 것은 첫 번째 페이지에서 전달 된 이전 값의 17 개 값을 모두 표시해야한다는 것입니다. 왜 첫 번째 값만 구문 분석되고 나머지는 왜 분석하지 않는지에 대한 도움이 필요하십니까? 그리고 어떤 해결책이 있다면 그것은 또한 평가 될 것입니다. 미리 감사드립니다. PS - 'PHP에서 정의되지 않은 오프셋 오류'와 관련된 거의 모든 질문뿐만 아니라 많은 PHP 문서를 읽었지만 내 문제와 관련된 문제는 찾을 수 없습니다. 중복이 있으면 사과하고 싶습니다.

+0

왜 이렇게합니까? 필드를'? rowid = id & field1 = row1 & field2 = row2 ....'와 같은 쿼리 문자열로 추가하거나 단순히 id를 보내면 다른 페이지에서 간단한 쿼리를 만들어 그 id를 가진 행을 가져옵니다. – hassan

+0

@ 하산 -이 방법을 좀 더 자세히 설명해 주실 수 있습니까? 나는 실제로 HTML 페이지에있는 테이블 데이터를 얻는 데 이미 한 번 사용 된 mysql 쿼리를 어떻게 겹칠 수 있는지 전혀 모른다. 그리고 그 테이블 데이터에서 나머지 열을 실제로 가져 오는 방법을 모르겠습니다. – Srk

+0

@hassan - 참조 할 수있는 설명서도 제공됩니다. – Srk

답변

1

게시 한 첫 번째 스 니펫을 참조하면 $ _GET 수신 URL에는 전달한 문자열 길이 제한이 있습니다. 한계를 초과해서는 안됩니다. 자세한 내용은 아래 링크를 참조하십시오. 그것이 당신을 도울 수 있기를 바랍니다.

Max size of URL parameters in _GET

P.S - 당신은 내게 첫 번째 조각의 전체 코드를 보여줄 수있는 경우에, 나는 당신을 더 도움이 될 수있다.

모든 편집 여기 -

먼저 나는 첫번째 조각에 대한 전체 코드를 제공하기 위해 노력을 부탁드립니다. 로직을 사용하여 fullentry.php 페이지에 항목을 보냅니다.

echo "<td><a href=\"Fullentry.php?rowid=".$row['Entry']."\">ENTRY</a></td>"; 

지금, fullentry.php 파일의 항목의 값을 취득하고 데이터를 가져 오는 코드 이하로 사용하고 HTML에 표시됩니다. 입술 먼저 코드에서하고있는 것처럼 당신은 단순히 동일한 데이터베이스에서 데이터를 가져올 수 객체 $를 사용

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

. 같은 - $ 입술 [ 'Entry_name은'], $ 입술 [ 'Prot_name'이 솔루션은 당신을 도울 수

희망. 이 답변을 친절하게 클릭하십시오. 유용합니다.

+0

그것이 문제입니다. 나는 한계를 넘었습니다. 왜냐하면 폭발하기 전에 '$ row'를 인쇄하려고 시도했을 때 반 문자열만을 보여주기 때문입니다. 요청한대로 질문을 수정하고 첫 번째 스 니펫 코드 전체를 제공합니다. – Srk

+0

굉장한 해답! 큰 고마워요! 내 쿼리를 해결하는 아주 새로운 방법! – Srk