Permalänk
Medlem

phpmyadmin

Tjena, använder phpmyadmin och ska låta användaren söka data ut databasen. Problemet är att man måste fylla i alla sökfält för att det ska fungera! Vill såklart att man ska fylla i så många eller så få fält som man vill. Vill också att man ska få söka på tex första bokstaven av någons namn och få upp hela namnet.

Ett fält för enkelhetens skull:

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' ORDER BY id ASC");

Skriver jag här in ett namn som finns i databasen som $namn_form så får jag upp det jag vill.

Här är hela, men man måste fylla i alla fält för att det ska fungera!

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' AND Efternamn='$Efternamn_form' AND Adress='$Adress_form' AND Stad_Post_Nr = '$Stad_form' AND Hemtelefon = '$telefon_form' AND Mobiltelefon = '$Mobil_form' AND Arbetstelefon = '$Jobb_form' ORDER BY id ASC");

Jag har för mej att * betyder allt, och att ifall fältet är tomt så sätter man en stärna där så söker den för alla men det fungerar inte.

Permalänk
Inaktiv

Kolla på LIKE.

Permalänk
Medlem
Skrivet av anon150287:

Kolla på LIKE.

Kolla varsdå?

Permalänk
Medlem

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' AND Efternamn='$Efternamn_form' AND Adress='$Adress_form' AND Stad_Post_Nr = '$Stad_form' AND Hemtelefon = '$telefon_form' AND Mobiltelefon = '$Mobil_form' AND Arbetstelefon = '$Jobb_form' ORDER BY id ASC");

Klar du måste fylla i alla fält när du har AND överallt? dvs
du måste fylla i detta OCH detta OCH detta OCH detta osv... ?

Permalänk
Medlem
Skrivet av =JoNaZ=:

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' AND Efternamn='$Efternamn_form' AND Adress='$Adress_form' AND Stad_Post_Nr = '$Stad_form' AND Hemtelefon = '$telefon_form' AND Mobiltelefon = '$Mobil_form' AND Arbetstelefon = '$Jobb_form' ORDER BY id ASC");

Klar du måste fylla i alla fält när du har AND överallt? dvs
du måste fylla i detta OCH detta OCH detta OCH detta osv... ?

Det är kanske därför jag behöver hjälp

Permalänk
Medlem

Det du vill ha är:

SELECT * FROM newpeople WHERE Namn LIKE '%$Namn_form%'

Om då Namn i databasen är "Petter Johansson" så kan du söka efter t.ex. "tter Jo", "Petter" eller "Johansson" och få upp den personen i resultatet.

Ett procenttecken betyder att du matchar allt. Så du skulle t.ex. kunna köra LIKE '$Namn_form%' istället om du alltid vill att man ska börja med att skriva förnamnet.

Visa signatur

MSI Z370 Gaming Pro Carbon :: Intel Core i5 8600K :: Corsair 16GB DDR4 3000MHz :: MSI RTX 2070 Gaming Z
FD Define R6 Vit TG :: Corsair RMx v2 750W :: 2 x Samsung 850 EVO 250GB :: 2 x Western Digital Caviar Green 2TB
Canon EOS 60D :: Samsung Galaxy S9+

Permalänk
Medlem

Fast det bästa vore om han hade en "radio" där man väljer börjar med eller slutar med för att sedan sätta in % vid rätt ställe, drygt annars om jag vill söka efter alla som börjar med an och får på jossan till exempel

Ett tips, försök göra så här typ
$sql = "SELECT * FROM newpeople WHERE ";
if (isset($_POST['efternamn'])) {
$sql .= "efternamn = '" . $POST_['efternamn'] . "' ";
$i = 1;
}
if (isset($_POST['fornamn'])) {
if ($i = 1)
$sql .= ($_POST['fornamn_radio'] == '1') ? "AND " : "OR ";
$sql .= "fornamn = '" . $POST_['fornamn'] . "' ";
$i = 1;
}
osv för varje kolumn
avslutas med:
mysql_query($sql);

Fornamn_radio är en knapp där man får välja om det ska vara och/eller, kanske lite överkurs men vafan
Enda anledningen till att jag blandar in $i är för om man bara söker efter förnamn blir ju syntaxen trasig annars
Att bara köra echo $sql och inte köra mysql_query($sql) sen är rätt grymt när man ska felsöka

Permalänk
Medlem
Skrivet av Pulchi:

Det du vill ha är:

SELECT * FROM newpeople WHERE Namn LIKE '%$Namn_form%'

Om då Namn i databasen är "Petter Johansson" så kan du söka efter t.ex. "tter Jo", "Petter" eller "Johansson" och få upp den personen i resultatet.

Ett procenttecken betyder att du matchar allt. Så du skulle t.ex. kunna köra LIKE '$Namn_form%' istället om du alltid vill att man ska börja med att skriva förnamnet.

Förnamn och efternamn är 2 olika fält, hur blir det om man lämnar ett fält tomt?

Skrivet av dEnnA:

Fast det bästa vore om han hade en "radio" där man väljer börjar med eller slutar med för att sedan sätta in % vid rätt ställe, drygt annars om jag vill söka efter alla som börjar med an och får på jossan till exempel

Ett tips, försök göra så här typ
$sql = "SELECT * FROM newpeople WHERE ";
if (isset($_POST['efternamn'])) {
$sql .= "efternamn = '" . $POST_['efternamn'] . "' ";
$i = 1;
}
if (isset($_POST['fornamn'])) {
if ($i = 1)
$sql .= ($_POST['fornamn_radio'] == '1') ? "AND " : "OR ";
$sql .= "fornamn = '" . $POST_['fornamn'] . "' ";
$i = 1;
}
osv för varje kolumn
avslutas med:
mysql_query($sql);

Fornamn_radio är en knapp där man får välja om det ska vara och/eller, kanske lite överkurs men vafan
Enda anledningen till att jag blandar in $i är för om man bara söker efter förnamn blir ju syntaxen trasig annars
Att bara köra echo $sql och inte köra mysql_query($sql) sen är rätt grymt när man ska felsöka

Ja, lite väl överkurs. Är bara en enkel hemsida till våran släkt där telefonnummer osv ska finnas.

Kanske skippar att kan skriva delar av namnet, kommer bli rätt dåligt resultat som du säger!

Om jag använder OR i koden istället för AND kanske det fungerar? Men då kanske jag får upp dubbla resultat om man skriver in båda för och efternamn?

Eller så gör jag på det krångliga viset och sätter inte IF satser och kollar ifall fälten är tomma...

Permalänk
Medlem

Om du bara ska göra ett litet telefonregister skulle jag nog slå ihop för och efternamn till ett fält, sen använda ajax för att filtrera ut
http://www.w3schools.com/Ajax/ajax_aspphp.asp
Där har dom ett liknande exempel

Permalänk
Medlem
Skrivet av dEnnA:

Om du bara ska göra ett litet telefonregister skulle jag nog slå ihop för och efternamn till ett fält, sen använda ajax för att filtrera ut
http://www.w3schools.com/Ajax/ajax_aspphp.asp
Där har dom ett liknande exempel

Får se om det blir så eller inte. Såg krångligt ut och jag jobbar helre med saker jag förstår än att bara kopiera en massa kod.

Kan jag inte lägga in en if-statement i min:

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' ORDER BY id ASC");

Typ såhär:

mysql_query("SELECT * FROM newpeople WHERE if ($Namn_form=='') (gör inget) else Namn='$Namn_form' AND if ($Efternamn_form=='') (gör inget) else Efternamn='$Efternamn_form' ORDER BY id ASC");

Testade ett göra så men det fungerar inte, kan man inte ha en if-statement i mysql_query()?

Permalänk
Medlem

Nope, då får du köra i stil med min först där du sätter en variabel till sql-queryt som ska utföras och sen köra mysql_query($sql) typ
Dock, om det står SELECT * FROM newpeople WHERE namn='johan' AND ORDER BY id ASC tror jag du får error syntax på

Permalänk
Medlem
Skrivet av kobb3:

Får se om det blir så eller inte. Såg krångligt ut och jag jobbar helre med saker jag förstår än att bara kopiera en massa kod.

Kan jag inte lägga in en if-statement i min:

mysql_query("SELECT * FROM newpeople WHERE Namn='$Namn_form' ORDER BY id ASC");

Typ såhär:

mysql_query("SELECT * FROM newpeople WHERE if ($Namn_form=='') (gör inget) else Namn='$Namn_form' AND if ($Efternamn_form=='') (gör inget) else Efternamn='$Efternamn_form' ORDER BY id ASC");

Testade ett göra så men det fungerar inte, kan man inte ha en if-statement i mysql_query()?

Borde fungera:

$SQLrequest = 'SELECT * from newpeople WHERE '; if (isset($Namn_form)) { $SQLrequest .= "Namn='$Namn_form'"; } if (isset($Namn_form, $Efternamn_form)) { $SQLrequest .= ' AND '; } if (isset($Efternamn_form)) { $SQLrequest .= "Efternamn='$Efternamn_form'"; } $SQLrequest .= ' ORDER BY id';

edit: fixade misstag, tack dEnna

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Borde fungera:

$SQLrequest = 'SELECT * from newpeople WHERE '; if (isset($Namn_form)) { SQLrequest .= "Namn='$Namn_form'"; } if (isset($Namn_form, $Efternamn_form)) { SQLrequest .= ' AND '; } if (isset($Efternamn_form)) { SQLrequest .= "Efternamn='$Efternamn_form'"; } $SQLrequest .= ' ORDER BY id';

utöver att du glömde $-tecknet framför variabelnamnet i if-satserna så ser det rätt bra ut

Permalänk
Medlem
Skrivet av Teknocide:

Borde fungera:

$SQLrequest = 'SELECT * from newpeople WHERE '; if (isset($Namn_form)) { $SQLrequest .= "Namn='$Namn_form'"; } if (isset($Namn_form, $Efternamn_form)) { $SQLrequest .= ' AND '; } if (isset($Efternamn_form)) { $SQLrequest .= "Efternamn='$Efternamn_form'"; } $SQLrequest .= ' ORDER BY id';

edit: fixade misstag, tack dEnna

Variabeln $SQLrequest sätter jag in i min mysql_query () såhär: mysql_query ($SQLrequest)???

Ser bra ut och ska testa den! Ska bara krångla lite mer då det finns fler saker än för och efternamn.

Tack

Edit: Har problem med att isset löser ut utan att jag har något värde i den, troligen då värdet '' finns i den, dvs inget finns i den.

@inlägget nedan: Annars fungerar det bra, körde bara echo $SQLrequest för att felsöka

Edit: löst

Permalänk
Medlem
Skrivet av kobb3:

Variabeln $SQLrequest sätter jag in i min mysql_query () såhär: mysql_query ($SQLrequest)???

Ser bra ut och ska testa den! Ska bara krångla lite mer då det finns fler saker än för och efternamn.

Tack

Japp, och om du får skumma felmeddelanden så är det bara köra echo $SQLrequest och kolla om den ser helt galen ut, släng gärna in mysql_query($SQLrequest) or die("<b>A fatal MySQL error occured</b>.\n<br />Query: " . $query . "<br />\nError: (" . mysql_errno() . ") " . mysql_error()); så får du ett fint svar som är lite enklare att tolka

Permalänk

Nu kan jag inte php men blir inte det där känsligt för SQLInjections?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Nu kan jag inte php men blir inte det där känsligt för SQLInjections?

Kommer ha lösenord innan man kommer in på själva sidan och det borde väl lösa alla säkerhetsproblem i koden?

Edit: Sådär ja! Nu är alla problem lösta

Permalänk
Skrivet av kobb3:

Kommer ha lösenord innan man kommer in på själva sidan och det borde väl lösa alla säkerhetsproblem i koden?

Edit: Sådär ja! Nu är alla problem lösta

Njae, du får nog läsa på om sqlinjections. Eller vem kan logga in?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Njae, du får nog läsa på om sqlinjections. Eller vem kan logga in?

Bara släktingar!

Direkt man går in på adressen ska det komma upp en inloggningsbox eller så.

Permalänk
Skrivet av kobb3:

Bara släktingar!

Direkt man går in på adressen ska det komma upp en inloggningsbox eller så.

Aha, då lär ju ingen illasinnad gå in iaf. Men testa att göra ett ' i en sträng. Sök efter non som heter O'leary eller nåt

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Aha, då lär ju ingen illasinnad gå in iaf. Men testa att göra ett ' i en sträng. Sök efter non som heter O'leary eller nåt

Lade in

$Namn_form = mysql_real_escape_string($Namn_form) $Efternamn_form = mysql_real_escape_string($Efternamn_form)

Och

if ($Namn_form=='FALSE' || $Efternamn_form=='FALSE') echo 'FEL'; else{

Så, om den hittar något sådant returnerar den FALSE och all övrig kod avbryts (incl min mysql_query(SELECT etc...))

Byter snart nu 'FEL' till något mer informativt så släktingarna inte sitter där och svär att det inte fungerar

Permalänk
Inaktiv

if ($Namn_form=='FALSE' || $Efternamn_form=='FALSE') echo 'FEL';

borde vara

if ($Namn_form == false || $Efternamn_form == false) echo 'FEL';

Permalänk
Medlem
Skrivet av anon150287:

if ($Namn_form=='FALSE' || $Efternamn_form=='FALSE') echo 'FEL';

borde vara

if ($Namn_form == false || $Efternamn_form == false) echo 'FEL';

w3schools.com skrev att det skulle returera FALSE men den sätter bara ett / framför alla skadliga tecken. Så om någon skriver O'leary blir det O/'leary.

Kör sedan ett filter just innan den visar informationen på sidan som tar bort /, på så sätt kommer man kunna ha ' i namnet utan att databasen nekar det.

Permalänk
Inaktiv

mysql_real_escape_string returnerar en sträng med "\" före alla skadliga tecken, tex. ' och ". Om det blir ett fel, tex. om du inte är ansluten till en databas returnerar den false.
Det du kollar i din kod är om funktionen returnerar "false", alltså en sträng. Detta kommer den endast göra om du ger den strängen "false".
För att kolla om det blir ett fel, vilket jag antar är det du vill, ska du använda dig av false, utan citationstecken.

Permalänk
Medlem
Skrivet av anon150287:

mysql_real_escape_string returnerar en sträng med "\" före alla skadliga tecken, tex. ' och ". Om det blir ett fel, tex. om du inte är ansluten till en databas returnerar den false.
Det du kollar i din kod är om funktionen returnerar "false", alltså en sträng. Detta kommer den endast göra om du ger den strängen "false".
För att kolla om det blir ett fel, vilket jag antar är det du vill, ska du använda dig av false, utan citationstecken.

Okej

Tar nog bort den if-satsen helt och hållet. Den är lite onödig.

Permalänk
Medlem

Spinner vidare på denna tråd istället för att göra en ny.

Varför fungerar inte detta?

$change = mysql_query("UPDATE newpeople SET Namn='$Namn' AND Efternamn='$Efternamn' AND Adress='$Adress' AND Stad_Post_Nr='$Stad' AND Hemtelefon='$Telefon' AND Mobiltelefon'$Mobil' AND Arbetstelefon'$Jobb' WHERE id='$Id'");

Men detta gör:

$change = mysql_query("UPDATE newpeople SET Namn='$Namn' WHERE id='$Id'"); Alltså, hur uppdaterar man flera fält samtidigt?

Permalänk

du ska inte ha and, använd kommatecken istället

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

du ska inte ha and, använd kommatecken istället

Tack tack, försökte flera gånger utan att lyckas men det visade sig att jag saknade ett =

Permalänk
Medlem

Här har du UPDATE syntaxen ifall du har fler frågor: http://dev.mysql.com/doc/refman/5.0/en/update.html

Permalänk
Medlem
Skrivet av Teknocide:

Borde fungera:

$SQLrequest = 'SELECT * from newpeople WHERE '; if (isset($Namn_form)) { $SQLrequest .= "Namn='$Namn_form'"; } if (isset($Namn_form, $Efternamn_form)) { $SQLrequest .= ' AND '; } if (isset($Efternamn_form)) { $SQLrequest .= "Efternamn='$Efternamn_form'"; } $SQLrequest .= ' ORDER BY id';

edit: fixade misstag, tack dEnna

Kan meddela att allt fungerar som det ska nu.

$SQLrequest = 'SELECT * from newpeople WHERE '; $SQLrequest .= "Extra='Ja'"; if (isset($Namn_form)) { $SQLrequest .= " AND Namn='$Namn_form'"; } } if (isset($Efternamn_form)) { $SQLrequest .= " AND Efternamn='$Efternamn_form'"; } $SQLrequest .= ' ORDER BY id';

Körde såhär för att kunna använda alla 7 sökkriterier, koden som listades i något inlägg ovan blev lite väl komplicerad ifall man sökte i exempelvis fält 2,4 och 7 samtidigt.

Så istället har jag AND inne istället för utanför. Detta medför att jag måste ha något längst fram så jag lade bara till ett fält som heter extra.

Tack alla som hjälpt.