PHP Input Problem

Amorok

Well-known member
ID: 397794
L
10 Oktober 2007
1.484
63
Hallo,

ich habe ein kleines "Input" Problem.
Ich habe eine suche die soll mir eine Klamm ID oder Nickname raussuchen egal was ich suche von beiden.

PHP:
<form class="quick_search" method="post">
<input type="text" name="userid" name="unickname" value="" placeholder="Klamm ID">  
<br><br />
<input type="submit"  value="Suchen" name="search">
</form>


Jetzt kommt das Problem wenn ich denn Input so nehme sucht er nur das der Klamm ID (name="userid").
Wie kann ich es machen das er beide berücksichtigt?
 
Code:
<?  
    if (!isset($_POST['search'])) $_POST['search'] = '';
	if (!isset($_POST['userid'])) $_POST['userid'] = '';
	if (!isset($_POST['unickname'])) $_POST['unickname'] = '';
    $error = '';
	
    if ($_POST['search'] == 'Suchen') {
        
		if ($_POST['userid'] > 0) {
		    $num = mysql_num_rows(db_query("SELECT uid FROM ".$db_prefix."_userdaten WHERE uid = ".$_POST['userid'].""));
			$userid = $_POST['userid'];
		} elseif ($_POST['unickname'] != '') {
		    $nick = mysql_fetch_array(mysql_query('SELECT uid FROM '.$db_prefix.'_userdaten WHERE `nickname` LIKE \'%'.$_POST['unickname'].'%\''));
			$num = $nick['uid'];
			$userid = $num;
		} else {
		    $error = '<h4 class="alert_error">Ungültige Eingabe!</h4>';
		}
		
		if ($error == '' && $num > 0) {
		   echo '<meta http-equiv="refresh" content="0; URL=?content=/usersystem/userbearbeiten&uid='.$userid.'">';
		} else {
		    $error = '<h4 class="alert_error">Kein User gefunden!</h4>';
		}
     

}
?>
 
Dein input-Element hat zwei name-Attribute. Und dann fragst du im PHP-Script auch noch beide ab. Das kann ja gar nicht gut gehen. Außerdem solltest du die POST-Variablen nicht direkt in den SQL-Statement integrieren. Das öffnet Angreifern Tür und Tor.

Also:

1) ein "name"-Attribut
2) im PHP abprüfen ob es eine Zahl oder ein String ist
3) Variablen von Schadcode reinigen*
4) entsprechende Datenbankabfrage

* Schau dir dazu mal https://php.net/manual/de/function.mysql-real-escape-string.php bzw. die entsprechenden Nachfolge-Funktionen an.
 
Zuletzt bearbeitet:
Dein input-Element hat zwei name-Attribute. Und dann fragst du im PHP-Script auch noch beide ab. Das kann ja gar nicht gut gehen. Außerdem solltest du die POST-Variablen nicht direkt in den SQL-Statement integrieren. Das öffnet Angreifern Tür und Tor.

Also:

1) ein "name"-Attribut
2) im PHP abprüfen ob es eine Zahl oder ein String ist
3) Variablen von Schadcode reinigen*
3) entsprechende Datenbankabfrage

* Schau dir dazu mal https://php.net/manual/de/function.mysql-real-escape-string.php bzw. die entsprechenden Nachfolge-Funktionen an.

Danke,

ich schaue mal ob ich es hinbekomme.
Das ganze wird in einem Adminforce benutzt daher wird da keiner so schnell reinkommen.
 
Das ganze wird in einem Adminforce benutzt daher wird da keiner so schnell reinkommen.
Wenn der Zugang genauso mit den $_POST-Variablen umgeht, wäre ich mir da nicht so sicher... ;)

BTW: Ich würde nicht den Weg gehen, nach Zahlen und String zu unterscheiden. Ein Nickname könnte bspw. ja auch nur aus Zahlen bestehen. Stattdessen würde ich einfach das Query entsprechend aufbauen. Beispielcode:
Code:
[FONT="Courier New"]SELECT user_id
FROM users
WHERE :needle IN (nickname, klamm_id)
   OR nickname LIKE CONCAT('%', :needle, '%')[/FONT]