- Timestamp:
- 03/17/05 18:02:08 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/new-search-20050223/cgi-bin/search.cgi
r197 r201 62 62 $webvar{input} =~ s/^\s+//; 63 63 $webvar{input} =~ s/\s+$//; 64 if ($webvar{input} =~ /^(\d{1,3}\.){3}\d{1,3}\/\d{1,3}$/) { 65 # "Perfect" IP subnet match 66 $searchfor = "ipblock"; 67 } elsif ($webvar{input} =~ /^(\d{1,3}\.){3}\d{1,3}$/) { 68 # "Perfect" IP address match (shows containing block) 69 $searchfor = "ipblock"; 70 } elsif ($webvar{input} =~ /^(\d{1,3}\.){2}\d{1,3}(\.\d{1,3}?)?/) { 71 # Partial IP match 64 if ($webvar{input} =~ /^[\d\.]+(\/\d{2})?$/) { 65 # IP addresses should only have numbers, digits, and maybe a slash+netmask 72 66 $searchfor = "ipblock"; 73 67 } elsif ($webvar{input} =~ /^\d+$/) { … … 85 79 print "Complex Search...............\n"; 86 80 87 print "<pre>\n"; 88 foreach my $key (keys %webvar) { 89 print "key: $key value: $webvar{$key}\n"; 90 } 91 print "</pre>\n"; 81 # Several major cases, and a whole raft of individual cases. 82 # -> Show all types means we do not need to limit records retrieved by type 83 # -> Show all cities means we do not need to limit records retrieved by city 84 # Individual cases are for the CIDR/IP, CustID, Description, Notes, and individual type 85 # requests. 86 87 my $sql = "SELECT cidr,custid,type,city,description FROM searchme"; 88 89 my $sqlconcat; 90 if ($webvar{which} eq 'all') { 91 # Must match *all* specified criteria. ## use INTERSECT or EXCEPT 92 $sqlconcat = "INTERSECT"; 93 # $sqlconcat = "and"; 94 } elsif ($webvar{which} eq 'any') { 95 # Match on any specified criteria ## use UNION 96 $sqlconcat = "UNION"; 97 # $sqlconcat="or"; 98 } else { 99 # We can't get here. PTHBTT! 100 printAndExit "PTHBTT!! Your search has been rejected due to Microsoft excuse #4432: Not enough mana"; 101 } 102 103 # Cases: 104 # -> No search terms. Display everything. 105 # -> One or more terms (cidr/custid/desc/notes) 106 107 # -> Type/city restrictions 108 109 my $cols = "cidr,custid,type,city,description"; 110 111 $sql = "(select $cols from searchme where $webvar{custexclude} custid ilike '%$webvar{custid}%')". 112 " $sqlconcat (select $cols from searchme where $webvar{descexclude} description ilike '%$webvar{desc}%')". 113 " $sqlconcat (select $cols from searchme where $webvar{notesexclude} notes ilike '%$webvar{notes}%')"; 114 115 if ($webvar{alltypes} ne 'on') { 116 $sql .= " $sqlconcat (select $cols from searchme where $webvar{typeexclude} type in ("; 117 foreach my $key (keys %webvar) { 118 $sql .= "'$1'," if $key =~ /type\[(..)\]/; 119 } 120 chop $sql; 121 $sql .= "))"; 122 } 123 124 if ($webvar{allcities} ne 'on') { 125 $sql .= " $sqlconcat (select $cols from searchme where $webvar{cityexclude} city in ("; 126 $sth = $ip_dbh->prepare("select city from cities where id=?"); 127 foreach my $key (keys %webvar) { 128 if ($key =~ /city\[(\d+)\]/) { 129 $sth->execute($1); 130 my $city; 131 $sth->bind_columns(\$city); 132 $sth->fetch; 133 $city =~ s/'/''/; 134 $sql .= "'$city',"; 135 } 136 } 137 chop $sql; 138 $sql .= "))"; 139 } 140 141 142 # gotta find a way to search cleanly... 143 144 #if (!(!$webvar{cidr} && !$webvar{custid} && !$webvar{desc} && !$webvar{notes} && 145 # $webvar{alltypes} && $webvar{allcities})) { 146 # $sql .= " INTERSECT "; 147 #} 148 # 149 #$sql .= 150 # ($webvar{custid} eq '' ? '' : "SELECT cidr,custid,type,city,description FROM searchme WHERE custid LIKE '%$webvar{custid}%'"). 151 # ($webvar{desc} eq '' ? '' : " $sqlconcat SELECT cidr,custid,type,city,description FROM searchme WHERE description like '%$webvar{desc}%'"). 152 # ($webvar{notes} eq '' ? '' : " $sqlconcat SELECT cidr,custid,type,city,description FROM searchme WHERE notes like '%$webvar{notes}%'"). 153 #""; 154 155 print $sql."\n"; 156 157 $sth = $ip_dbh->prepare($sql); 158 $sth->execute; 159 160 print "<table border=1>\n"; 161 while (my @data = $sth->fetchrow_array) { 162 print "<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td><td>$data[4]</td></tr>\n"; 163 } 164 165 #print "<pre>\n"; 166 #foreach my $key (keys %webvar) { 167 # print "key: $key value: -'$webvar{$key}'-\n"; 168 #} 169 #print "</pre>\n"; 92 170 93 171 } else {
Note:
See TracChangeset
for help on using the changeset viewer.