2012-04-09 15 views
0

Ich habe diesen Code - der versucht, Variablen aus der URL zu erhalten und dann eine MYSQL-Auswahl basierend auf den Kriterien (mit Ausnahme der NULL-Werte). Ich glaube jedoch, ich gehe irgendwo hin, aber ich weiß nicht wo:Suche basierend auf URL-Variablen

<?php 

    include('db.php'); // include your code to connect to DB. 
    $tbl_name="mobile"; //your table name 

    $model = ($_GET['model'] ? $_GET['model'] : NULL); 
    $mins = ($_GET['mins'] ? $_GET['mins'] : NULL);  
    $texts = ($_GET['texts'] ? $_GET['texts'] : NULL); 
    $freegift = ($_GET['free-gift'] ? $_GET['free-gift'] : NULL); 
    $network = ($_GET['network'] ? $_GET['network'] : NULL); 
    $plan = ($_GET['plan'] ? $_GET['plan'] : NULL); 
    $vars = array($model, $mins, $texts, $freegift, $network, $plan); 


    foreach($vars as $value) { 
     $value = (isset($_GET[$value]) ? $_GET[$value] : NULL); 
     unset ($vars[$value]); //sweeping the NULL ones 
    } 
    $where_clause = $vars[0]; //the only remaining value after previous cleanup 


    $where = ''; 
    if (count($whereClauses) > 0) { 
     $where = ' WHERE '.implode(' AND ',$whereClauses); 
    } 
    $sql5 = mysql_query("SELECT * FROM $tbl_name".$where); 

Dies funktioniert überhaupt nicht. Es sollte funktionieren wie www.domain.com/page.php?mobile=Samsung&mins=500 - die Vars sollten verwendet werden, um die Suche durchzuführen.

+2

Was ist die Frage hier? – iambriansreed

+0

Meine Anfrage für 'Plan' ist' 1 '= 1 ODER 1 = 1' (oder ähnlich im Geiste). Dies wird an einem Tag durch die Monatsbandbreitenzuteilung essen. –

+0

Sie sind derzeit sehr anfällig für SQL Injection mit diesem Code. Da ich eine Zeichenfolge wie diese in der URL 'model = 1 = 1 LIMIT 1000000; übergeben könnte, die Ihre Datenbank durch die Rückgabe von einer Million Datensätze lähmen würde. Könnte unter den richtigen Bedingungen viel schlimmer machen. – DampeS8N

Antwort

0

Ich glaube, ich verstehe, was Sie wollen. Aber Ihr Code hat zu viele Fehler (sowohl semantische als auch Sicherheit). Daher schlage ich folgenden Code vor:

include 'db.php'; 
$tbl_name = 'mobile'; 

$default_list = array('model', 'mins', 'texts', 'free-gift', 'network', 'plan'); 
$ins_vars = array_intersect_key($_GET, array_flip($default_list)); 

if(!empty($ins_vars)) 
{ 
    foreach($ins_vars as $key => $val) 
    { 
     $val = mysql_real_escape_string($val); 
     $ins_vars[$key] = "{$key}='{$val}'"; 
    } 

    $where_clause = implode(' AND ', $ins_vars); 
    $sql5 = mysql_query("SELECT * FROM {$tbl_name} WHERE {$where_clause}"); 
} 

ps. Nicht getestet, sollte aber funktionieren.

+0

Es funktioniert, wenn ich $ where_clause Echo zurückgibt: model = 'Doro PhoneEasy 610' UND mins = '5000'. Wenn ich jedoch $ sql zurück gebe, gibt es die Ressource id # 11 –

+0

Versuchen Sie dies: 'while ($ row = mysql_fetch_assoc ($ sql5)) { drucken ($ Zeile); } ' ps. Es scheint, dass Sie PHP und MySQL lernen müssen. – B7ackAnge7z

+0

Danke, ja ich weiß, ich muss. Ich bin ein Anfänger. –

Verwandte Themen