anpera.net
https://anpera.homeip.net/phpbb3/

Suchfunktion
https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=2907
Seite 1 von 1

Autor:  Drazaar [ Mo 18 Sep, 2006 22:30 ]
Betreff des Beitrags:  Suchfunktion

So...
Ich versuche hier gerade ne Suchfunktion zusammenzubasteln. Sowas wie in der list.php. Wo man eben einfach einen Spieler mit einem eingabefeldchen sucht. Jetzt sagt nicht: Dann guck in der list.php ;)
Das habe ich schon 10000x gemacht...und ich schiebs nimmer. *gg*

[php]
<?

// invite, who
require_once "common.php";

page_header("asdf");
switch($_GET[op]){
case '':
output("<form action='privat.php?op=search' method='POST'>Nach Name suchen: <input name='name'><input type='submit' class='button' value='Suchen'></form>",true);
addnav("","privat.php?op=search");
break;
case 'search':
$who = $_POST['name'];
$sql = " SELECT acctid,name,alive,sex FROM accounts WHERE locked=0 AND name LIKE '$who' ";
$result = db_query($sql) or die(sql_error($sql));
if($result<1) output("Keine Spieler vorhanden");
else{
output("<table border=0 cellpadding=2 cellspacing=1 bgcolor='#999999'>",true);
output("<tr class='trhead'><td><b>ID</b></td><td><b>Name</b></td><td><b>lebt?</b></td><td><b><img src=\"images/female.gif\">/<img src=\"images/male.gif\"></b></td></tr>",true);
for($i=0;$i<db_num_rows($result);$i++){
$row = db_fetch_assoc($result);
output("<tr class='".($i%2?"trdark":"trlight")."'><td>",true);
output("<td align='center'>",true);
output("`&$row['acctid']`0");
output("</td><td>",true);
output("$row['name']");
output("</td><td>",true);
output($row['alive']?"`@Ja!":"`4Nein!");
output("</td><td align='center'>",true);
output($row['sex']?"<img src='images/female.gif'>":"<img src='images/male.gif'>",true);
output("</td></tr>",true);
}
output("</table>",true);
}
break;
}
page_footer();
?>[/php]
Das hab ich zusammengepuzzelt. Ich habe keinen Plan, warum es net geht. Die Tabelle bleibt leer. (nein, das ist kein vollständiges Script, das ist lediglich ein Versuch^^)

HLP, oder ich krieg hier noch die Krätze -.-

Autor:  Auric [ Di 19 Sep, 2006 16:30 ]
Betreff des Beitrags: 

guck in die bank.php :D

Nee, mal ernsthaft, da ist ein recht hübsches Suchsystem drinne, das sehr weit gestreut suchen kann... schau's dir mal an!

Autor:  Harthas [ Di 19 Sep, 2006 17:01 ]
Betreff des Beitrags: 

Könnte es daran liegen, dass in der accountsspalte `name` der Name PLUS Titel PLUS Farbcodes enthalten sind? ;-)

Da könnte man dann entweder nach dem Login suchen, oder ein weiteres db-feld...
Oder dann die namen abrufen, die farbcodes entfernen, mit name LIKE '%$who%' (oder so xD) Arbeiten... So würde man auch etwas bekommen wenn man nur den titel angibt... Oder eben nur den namen...

Ausserdem sollte

[php]if($result<1) output("Keine Spieler vorhanden");[/php]

Doch eigentlich

[php]if(db_num_rows($result)<1) output("Keine Spieler vorhanden");[/php]

heissen ;-) oder irre ich mich hier auch? *gg*

Autor:  Eliwood [ Di 19 Sep, 2006 17:05 ]
Betreff des Beitrags: 

Drazi... Du hast auch genau den richtigen Namen eingegeben? ^^
Denn MySQL wird nur diese finden... ;)

Also entweder gibst du immer schön %-Zeichen ein, oder aber du nimmst folgende "Krücke".
Alternativ würde ich nicht nur im Feld "name" danach suchen sondern noch "login" und "emailaddress".

Anstatt:
[php]$who = $_POST['name'];[/php]

Könnte ich mir so etwas vorstellen:
[php]
$_POST['name'] = stripslashes($_POST['name']);
$StrLen = StrLen($_POST['name']);
$who = '';
for($i = 0; $i < $StrLen; $i++) {
$who .= '%'.substr($_POST['name'], $i);
}
$who .= '%';
$who = mysql_real_escape_string($who);
[/php]

Autor:  Drazaar [ Di 19 Sep, 2006 17:37 ]
Betreff des Beitrags: 

omfg...

Okok, ich glaub, wenn ich nach dem DB Feld Name guck, kann er auch nichts finden...sollte wohl schon login gucken^^

Ansonsten halt farbcodes und so raushauen, or?^^

€:

[php]
<?

// invite, who
require_once "common.php";

page_header("asdf");
switch($_GET[op]){
case '':
output("<form action='privat.php?op=search' method='POST'>Nach Name suchen: <input name='name'><input type='submit' class='button' value='Suchen'></form>",true);
addnav("","privat.php?op=search");
break;
case 'search':
$_POST['name'] = stripslashes($_POST['name']);
$StrLen = StrLen($_POST['name']);
$who = '';
for($i = 0; $i < $StrLen; $i++) {
$who .= '%'.substr($_POST['name'], $i);
}
$who .= '%';
$who = mysql_real_escape_string($who);
$sql = " SELECT acctid,name,alive,sex FROM accounts WHERE locked=0 AND name LIKE '$who' ";
$result = db_query($sql) or die(sql_error($sql));
if(db_num_rows($result)<1) output("Keine Spieler vorhanden");
else{
output("<table border=0 cellpadding=2 cellspacing=1 bgcolor='#999999'>",true);
output("<tr class='trhead'><td><b>ID</b></td><td><b>Name</b></td><td><b>lebt?</b></td><td><b><img src=\"images/female.gif\">/<img src=\"images/male.gif\"></b></td></tr>",true);
for($i=0;$i<db_num_rows($result);$i++){
$row = db_fetch_assoc($result);
output("<tr class='".($i%2?"trdark":"trlight")."'><td>",true);
output("<td align='center'>",true);
output("`&$row['acctid']`0");
output("</td><td>",true);
output("$row['name']");
output("</td><td>",true);
output($row['alive']?"`@Ja!":"`4Nein!");
output("</td><td align='center'>",true);
output($row[sex]?"<img src='images/female.gif'>":"<img src='images/male.gif'>",true);
output("</td></tr>",true);
}
output("</table>",true);
}
break;
}
page_footer();
?>[/php]

So schaut das nu aus, nach Eliwoods Verbesserung...

Dummerweise peil ich http kein bisschen und jetzt meckert er das rum:

Zitat:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /is/htdocs/wp1037182_J4AY65IMLD/www/logd/privat.php on line 31



Der Fehler befindet sich also in der Zeile:
[php]
output("`&$row['acctid']`0");[/php]


Ich find' ihn aber nicht Oo

Autor:  Eliwood [ Di 19 Sep, 2006 17:53 ]
Betreff des Beitrags: 

1. HTTP kann ich auch nicht. Ausser Content-Typen senden und n' paar andere Header kann ich da gar nichts... Naja. ^^

2. [php]output("`&$row['acctid']`0"); [/php]
Das muss so aussehen:
[php]output("`&{$row['acctid']}`0"); [/php]
Oder so:
[php]output("`&".$row['acctid']."`0"); [/php]

Autor:  Drazaar [ Di 19 Sep, 2006 17:55 ]
Betreff des Beitrags: 

Man bin ich blind -.-

Vielleicht liegts auch einfach nur an dem:

$this->bbcode_second_pass_code('', '
output("<tr class='".($i%2?"trdark":"trlight")."'><td>",true);
output("<td align='center'>",true);
')
da ist zwei mal ein <td> geöffnet und eines davon nicht geschlossen Oo

€: Ok, nach Elis neuer Verbesserung funzt auch das nun wieder....dummerweise meint er jetzt die ganze zeit, dass er überhaupt niemanden gefunden hat...O_o

Autor:  Eliwood [ Di 19 Sep, 2006 17:58 ]
Betreff des Beitrags: 

Das ist doch egal... oO
Mach meinen Fix rein... Was verstehst du bitte nicht? ^^
Lösung 1 hat um die Variable {} drum rum. Das erlaubt, auch die keys mit ' oder " zu markieren, weil {} es zulassen, Konstanten zu parsen.
Die Zweite Lösung unterbricht den String einfach und hängt die variable dazwischen.

// Achja:
[php]output("$row['name']"); [/php] ist genauso falsch:

[php]output($row['name']); [/php]

Autor:  Drazaar [ Di 19 Sep, 2006 18:01 ]
Betreff des Beitrags: 

Hab ich hab ich, keine Sorge, ich beachte schon, was du schreibst. $row['name'] hab ich auch schon in{} gesetzt...

Leider findet er nun keine Spieler Oo

Autor:  Eliwood [ Di 19 Sep, 2006 18:04 ]
Betreff des Beitrags: 

Nach:
[php]$who = mysql_real_escape_string($who); [/php]
Ein:
[php]output('`$Debug: `0'.$who);[/php]

// Dann bitte die Ausgabe nach "Debug" mitteilen... danke.

Autor:  Drazaar [ Di 19 Sep, 2006 18:10 ]
Betreff des Beitrags: 

Zitat:
Debug: %Draza´ar%raza´ar%aza´ar%za´ar%a´ar%´ar%ar%r% Keine Spieler vorhanden


Das meint er nun zu mir...Oo

Autor:  Eliwood [ Di 19 Sep, 2006 18:16 ]
Betreff des Beitrags: 

Drazaar hat geschrieben:
Zitat:
Debug: %Draza´ar%raza´ar%aza´ar%za´ar%a´ar%´ar%ar%r% Keine Spieler vorhanden


Das meint er nun zu mir...Oo


Mein Fehler... Sorry.

[php]$who .= '%'.substr($_POST['name'], $i); [/php]
Ersetzen mit:
[php]$who .= '%'.$_POST['name']{$i}; [/php]

(Ja, das ist richtige Syntax *g*)

Autor:  Drazaar [ Di 19 Sep, 2006 18:18 ]
Betreff des Beitrags: 

Um ehrlich zu sein, ich hab keinen Plan, was die funktion substr() überhaupt macht....

und dieses $i peil ich auch nicht :P (ich glaub ich sollte bei Waldspecials bleiben ^^)

ABER: Es funktioniert nun perfekt. Ich danke dir Eliwood, und auch ein Danke an Harthas :)

MfG Draz

Autor:  Eliwood [ Di 19 Sep, 2006 18:29 ]
Betreff des Beitrags: 

Drazaar hat geschrieben:
Um ehrlich zu sein, ich hab keinen Plan, was die funktion substr() überhaupt macht....

und dieses $i peil ich auch nicht :P (ich glaub ich sollte bei Waldspecials bleiben ^^)

ABER: Es funktioniert nun perfekt. Ich danke dir Eliwood, und auch ein Danke an Harthas :)

MfG Draz


$i is ne Variable... Die von 0 hochgezählt wird =P

Und Substr kannst du mit Parameter 2 den Startpunkt des Strings und mit Parameter 3 die Anzahl zeichen in Parameter 1 festlegen.
Hast du ein string:
"abcde"

[php]echo substr("abcde", 1, 2);[/php]
Das gibt zum Beispiel bc als. Zeichen 1 (0 ist das erste Zeichen), 2 Zeichen ab da und mit dem.
Also bc... Mein Fehler war, dass ich, ohne Angabe des Dritten Parameters, immer den ganzen RestString bekommen hab... Was Natürlich nicht Ziel war ;)

Autor:  Auric [ Di 19 Sep, 2006 19:09 ]
Betreff des Beitrags: 

Sag mal Eli, greift man auf einzelne Chars eines Strings nicht ber $string[ZAHL] zu? Oder geht das auch mit {ZAHL}?

*mal aus interesse frag*

Autor:  Eliwood [ Di 19 Sep, 2006 19:32 ]
Betreff des Beitrags: 

Auric hat geschrieben:
Sag mal Eli, greift man auf einzelne Chars eines Strings nicht ber $string[ZAHL] zu? Oder geht das auch mit {ZAHL}?

*mal aus interesse frag*


Um Verwechslungen zu vermeiden sollten {} gebraucht werden... Man könnte ja meinen es sei ein array ;)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/