13. februar 2014 - 18:49 Der er 6 kommentarer og
1 løsning

SELECT ** WHERE virker ikke ...

HEJ,

Sender fra side1.php (submit ) variablen user og "genopretter" den igen i page2.php.

$user = $Request['user'];

Jeg har en database:

$user_name = "xxxxxxxxx";
$password = "xxxxxxxxxx";
$database = "xxxxxxxxxxx";
$server = "xxxxxxxxx";



$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

if ($db_found)
{
    echo('Databasen fundet '. "<br><br>");

Alt fungerer hertil.

    Har prøvet med

$result = mysql_query("SELECT navn FROM Minedata WHERE navn = $user"); */

(Minedata = tabellen og kolonne0 i Minedata har navnet navn).

Tester herefter $result og skriver *OK" hvis det går godt og "IKKE OK" hvis det ikke går godt.

Men uanset hvad jeg taster ind - virker det ikke. Jeg får Ikke syntaksfejl eller noget - bare at det ikke virker (dvs. IKKE OK ).

Derfor måtte jeg lave følgende :

(og det virker:)


    $result = mysql_query("SELECT navn FROM Minedata");
    while($row = mysql_fetch_assoc($result))
    {
        if ($row['navn'] == $user)
        {
                    echo 'OK';
        }
        else
        {
                    echo 'ikke ok';
        }
    }
}
else
{
    print "Database NOT Found.";
}

mysql_close($db_handle);


Echo'erne er kun medtaget som debug's .

Men hvorfor vil ***** WHERE navn = $USER .. ikke virke ?


Kristian
Avatar billede repox Seniormester
13. februar 2014 - 19:11 #1
Fordi du ikke har quotes om indholdet:
$result = mysql_query("SELECT navn FROM Minedata WHERE navn = '$user'");

De MySQL funktioner du bruger er forældede og du bør bruge MySQLi udvidelsen eller PDO, så ville du have undgået problemet ved at anvende prepared statements. Din kode, som den ser ud nu, er nemlig sårbar overfor SQL injections.

Jeg vil også opfordre dig til ikke at bruge $_REQUEST, men i stedet bruge det superglobale array der matcher den http metode du bruger, f.eks. $_POST eller $_GET.
Avatar billede erikjacobsen Ekspert
13. februar 2014 - 19:12 #2
$result = mysql_query("SELECT navn FROM Minedata WHERE navn = '$user'");

vil virke, men kan bestemt ikke anbefales, da du så er åben for SQL-injection. Du skal bruger mysqli med parameters.
13. februar 2014 - 20:28 #3
HEJ,

Tak for svar.

Det er over 5 år siden jeg sidst arbejdede effektivt med PHP / MYSQL så der er (som I siger) sket meget i den retning.

Har I nogen ideer om hvor jeg kan læse mere om PHP  + PDO udvidelserne  og eventuelt samtidig inkludere eksempler på netop det jeg skal i gang med.

Det siger sig selv at når det er forældet må jeg opdatere.
13. februar 2014 - 20:31 #4
HEJ IGEN,

til Repox,

Har du et LYN-eksempel på anvendelsen af $_POST  og $_GET  ?

(10000  tak)

KR
Avatar billede erikjacobsen Ekspert
13. februar 2014 - 22:12 #5
Du kan evt begynde her: http://www.eksperten.dk/guide/1480
15. februar 2014 - 22:33 #6
HEJ,

Nærlæste artiklen i #5  (1 milliørd tak til erikjacobsen ), så jeg blev meget, meget klogere (forhåbentligvis)...

Rettede koden til mysqli og efter 2 - 4 fejl (mest slåfejl) kørte det.

Kan dog stadig ikke få koden til at selecte på 1 USER (altså
$result = select navn from Minedata Where navn = '$user' ;  )

UC ignoreret-- )

mysql1 siger 'OK' men jeg kan ikke få fat i $row['navn']  - mysql siger den er tom .. Ditto for $Result ..

Laver derfor en scanning af $result (0 til $rowCount)  og søger på $user og det funker...

Hvad siger I til en 15 / 15 Deling ?

Kristian
28. februar 2014 - 09:05 #7
HEJ,

Jeg lukker spm. da jeg ikke har fået respons inden for den tidsfrist jeg har sat.

Hvis protester skriv.

Kristian
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester