PHP LIKE functie

Status
Niet open voor verdere reacties.

hawkelite

Nieuwe gebruiker
Lid geworden
10 jan 2012
Berichten
4
Hallo,

Ik ben bezig met een script om personen te zoeken in een database via een LIKE functie, het script werkt alleen nog niet hoe ik dat wil!

PHP:
$naam= $_POST['naam'];
$searchnaam = mysql_query("SELECT * FROM Users WHERE Username LIKE '%$naam%'"); 

echo"$searchnaam";

Hij werkt niet als ik er een variable van maak maar wel als ik er gewoon tekst in zet.

Wat doe ik fout, Helpmij?
 
Ik zou zeggen: kijk eens naar de mysql_query documentatie, daarin staan ook voorbeelden naar mysql_fetch_assoc (o.a.).
Daarnaast zou ik niet zomaar je POST values klakkeloos in je query stoppen, dat is namelijk niet echt veilig ;)
 
Wat heb ik nodig
* een form waar je de data van verstuurt.

Mogelijke fouten
* je verstuurt geen of foute request naar je server.
* je maakt geen dataconnectie.
* er is geen user met de naam die u invulde

wat je ook kan doen is
maak een user met naam "$naam"
 
Ik heb gecontroleerd of de database contact kon maken, dit lukte.
Verder heb ik de naam
PHP:
Username LIKE '%test%'"
gebruikt en deze kon hij vinden in de database
maar zodra ik een $ plaats werkt hij niet meer.
 
Je zou is kunnen proberen om dit te doen:

PHP:
$naam= $_POST['naam'];
$naam=mysql_real_escape_string($naam);    // maakt het iets veiliger

$sql="SELECT * FROM Users WHERE Username LIKE '%$naam%'";     // query in een variabele zetten
$result=mysql_query($sql);          // query uitvoeren
$row=mysql_fetch_assoc($result);      // resultaten ophalen
 
echo $row['Username'];


Waarom dit? Geen idee... Maar ik kwam de fout ook wel eens tegen. Het hielp altijd om eerst de query in een variabele te zetten en dan pas de query uit te voeren.
 
$naam= $_POST['naam'];
$naam=mysql_real_escape_string($naam); // maakt het iets veiliger

$sql="SELECT * FROM Users WHERE Username LIKE '%$naam%'"; // query in een variabele zetten
$result=mysql_query($sql); // query uitvoeren
$row=mysql_fetch_assoc($result); // resultaten ophalen

echo $row['Username'];

Dit werkt nu helemaal, ik heb alleen nog 1 probleem
hij haalt alleen de eerste die overeenkomt met de LIKE Functie uit de database.

Input als naam = 123


Dus database=

ID Username
1 test123
2 123test


De output wordt nu
Test 123
 
Laatst bewerkt:
even terug komend op milenko.

de query werkt niet omdat je variabele tussen ' ' staat, dit verteld php dat hij niet de data uit de variabele moet gebruiken maar hem letterlijk als text te zien dus $test.
bij milenko wordt dit effect voorkomen doordat het geheel tussen " " staat.

nu voor het feit dat hij maar 1 result laat zien: hij haalt ze allemaal wel op maar mysql_fetch_assoc() gebruikt alleen de eerste row.
Gebruik in dit geval de functie mysql_fetch_array :

PHP:
$naam=mysql_real_escape_string($_POST['naam']);    // maakt het iets veiliger
 
$result=mysql_query("SELECT * FROM Users WHERE Username LIKE '%{$naam}%'");          // query maken en uitvoeren
$row=mysql_fetch_array($result);      // resultaten ophalen
 
echo $row['Username']['0']; // resultaat 1
echo $row['Username']['1']; // resultaat 2, etc.

een andere optie is een while-loop gebruiken:

PHP:
$naam=mysql_real_escape_string($_POST['naam']);    // maakt het iets veiliger
 
$result=mysql_query("SELECT * FROM Users WHERE Username LIKE '%{$naam}%'");          // query maken en uitvoeren

 while($row = mysql_fetch_assoc($result))
        {
echo $row['Username'];
        }

de 2e optie echod Username en gaat dan naar de volgende rij welke opgehaald is
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan