Avatar billede jdjensen Juniormester
06. november 2011 - 17:06 Der er 27 kommentarer og
1 løsning

SQL - Hjælp til en filtreringsfunktion

Min process.php fil
------------------------------------------------------------------------------

<?php
$host = "value"; // Host name
$username = "value"; // Mysql username
$password = "value"; // Mysql password
$db_name = "value"; // Database name
$tbl_name = "users"; // Table name

// Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("Cannot connect");
mysql_select_db("$db_name")or die("Cannot select DB");

// Get values from form
$firstname = $_POST['firstname']; // textfield
$lastname = $_POST['lastname']; // textfield
$emailaddress = $_POST['emailaddress']; // textfield
$answer = $_POST['answer']; // select
$newsletter = $_POST['newsletter']; // checkbox

// Insert data into table
$sql = "INSERT INTO $tbl_name(firstname, lastname, emailaddress, answer, newsletter, date) VALUES ('$firstname', '$lastname', '$emailaddress', '$answer', '$newsletter', CURDATE())";
$result = mysql_query($sql);

// If successfully insert data into database, displays message "Successful"
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='insert.php'>Back to main page</a>";
}

else {
echo "ERROR";
}

// Close connection
mysql_close();
?>

------------------------------------------------------------------------------

Samtidig har jeg fundet en filtreringsfunktion på nettet som ser ud til at bruge nogle af de metoder jeg mangler til at filtrere dataerne fra mine formfelter. Men hvordan kobler jeg lige det bedst sammen med ovenstående kode (min process.php fil)? Du er velkommen til at komme med forbedringer til nedenstående hvis du kan se der mangler noget.

------------------------------------------------------------------------------

function filter($data) {

   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes) {
   
  $data = stripslashes($data);}

   // normalize $data because of whitespace on beginning and end
   $data = trim($data);

   // strip tags
   $data = strip_tags($data);

   // replace characters with their HTML entitites
   $data = htmlentities($data);

   // mysql escape string    
   $data = mysql_real_escape_string($data);

   return $data;
 }

------------------------------------------------------------------------------

Jeg har lagt comments ind forskellige steder for at gøre det nemmere at overskue.
Avatar billede olebole Juniormester
06. november 2011 - 17:29 #1
<ole>

I dag er der ingen grund til at 'hacke' sig til sikkerhed(s lignende tilstande). Brug i stedet mysqli eller PDO - se dette indlæg for links

/mvh
</bole>
Avatar billede jdjensen Juniormester
06. november 2011 - 18:03 #2
Hej ole,
Jeg vil rigtig gerne gøre det smart og lære nyt, men efter at have kørt lidt rundt på sider som denne http://dk.php.net/manual/en/mysqli.installation.php har jeg stadig svært ved at se hvad jeg konkret skal gøre for at få det til at virke og om det overhovedet er muligt hos GIGAHOST som hoster mit webhotel. Jeg er desværre rimelig grøn når det kommer til php så ved ikke hvor jeg skal starte når vi snakker mysqli/PDO. Jeg går ud fra at hvis man får det aktiveret, så kan jeg droppe alle de hacks i min process.php hvilket ville være lækkert men er der en nem step-by-step guide for en som mig? :d
Avatar billede erikjacobsen Ekspert
06. november 2011 - 18:20 #3
Hvad er det du vil filtrere for?
Avatar billede danco Nybegynder
06. november 2011 - 18:57 #4
Du fortæller ikke hvad det er du gerne vil opnå.
Med al respekt. Vi kan ikke gætte hvad du vil ..
Avatar billede olebole Juniormester
06. november 2011 - 21:34 #5
@jdjensen: Som Erik og danco anfører, kommer det anpå, hvad det egentlig er, du vil. Vil du sikre dig mod sql injections, er prepared statements i mysqli eller PDO de bedste løsninger - men det er noget af pose blandede bolcher, du hoster op med i spørgsmålet  =)

Der er mange, der beder om 'et skohorn' til mysqli, da API'et ved første øjekast kan virke uoverskueligt. Derfor har jeg uploaded en wrapper funktion - iQuery - som letter brugen her.

Der er to hovedgevinster ved at bruge prepared statements: God sikkerhed i forhold til sql injections og bedre performance ved mange ens kald - typisk i løkker. Wrapper funktionen gør ikke noget for performance, men den gør det lettere at komme i gang med at sikre sine brugerinput, så de ikke kompromitterer databasen.

Har du derimod mange identiske og repeterende kald i (nestede) løkker, bør du først overveje din struktur. Hvis den ikke kan ændres, bør du hardcode kaldene, så du undgår at lukke dit statement, før løkken er kørt færdig.
Avatar billede jdjensen Juniormester
07. november 2011 - 12:27 #6
Sorry, jeg ønsker bare at sikre mig mod SQL injections som det hedder. Jeg ville bare have hjælp til at udvide min process.php fil.

Jeg tror jeg er nød til droppe at finde en løsning her for fatter ikke mysqli og hvordan det skal gøres. Sorry.

olebole, du kan bare smide et svar så får du points...
Avatar billede jdjensen Juniormester
07. november 2011 - 16:01 #7
Tror bare jeg prøver at forhinde SQL injections på mine textfields ved hjælp af en funktion istedet (check_input) nu jeg ikke fatter mysqli og PDO:

<?php

$host = "value"; // Host name
$username = "value"; // Mysql username
$password = "value"; // Mysql password
$db_name = "value"; // Database name
$tbl_name = "users"; // Table name

// Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("Cannot connect");
mysql_select_db("$db_name")or die("Cannot select DB");

// Get values from form
$firstname = check_input($_POST['firstname']); // textfield
$lastname = check_input($_POST['lastname']; // textfield
$emailaddress = check_input($_POST['emailaddress']; // textfield
$answer = $_POST['answer']; // select
$other = $_POST['newsletter']; //checkbox

// Clean input
function check_input($value) {

if (get_magic_quotes_gpc()) {
$value = stripslashes($value);}

if (mysql_real_escape_string($value)) {
$value = mysql_real_escape_string($value);}

return $value;}

// Insert data into table
$sql = "INSERT INTO $tbl_name(firstname, lastname, emailaddress, answer, other, date) VALUES ('$firstname', '$lastname', '$emailaddress', '$answer', '$other', CURDATE())";
$result = mysql_query($sql);

// Close connection
mysql_close();
?>
Avatar billede olebole Juniormester
07. november 2011 - 23:19 #8
Ikke en uinterssant argumentation - men ganske kompleks! Som jeg læser denne tråd, så vil du forstætte med mysql, som du ikke forstår, fordi du ikke forstår mysqli. Inden jeg arbejder videre med forståelsen af den begrundelse, vil jeg lige give eksemplet på, hvordan du kan bruge mysqli-wrapperen til samme opgave:


<?php
define('DB_HOST', 'value'); // Host name
define('DB_USERNAME', 'value'); // Mysql username
define('DB_PASSWORD', 'value'); // Mysql password
define('DB_DEFAULT_DB', 'value'); // Database name
$tbl_name = "users"; // Table name

$sql = "INSERT INTO $tbl_name (firstname, lastname, emailaddress, answer, other, date) VALUES (?, ?, ?, ?, ?, CURDATE())";
$arrParams = array('sssss', $_POST['firstname'], $_POST['lastname'], $_POST['emailaddress'], $_POST['answer'], $_POST['newsletter']);
$result = iQuery( $sql, $arrParams);
?>


Jeg har svært ved at se, det skulle være mere kompliceret. Til gengæld er det sikkert - og mysqli dagens/morgendagens måde at kode mod mysql på. I min verden er der ingen grund til at bruge tid på at udvide sin forståelse af en altmodish kodestil - men det er nok bare mig, der er sær  =)
Avatar billede jdjensen Juniormester
08. november 2011 - 00:06 #9
olebole: Mange tak. Kan godt se koden lige pludselig bliver kogt og sat op på en pænere mere moderne måde.
De 5 sssss'er i starten af array, hvad er det præcis de gør? Kan se det svarer til antallet af felter jeg trækker ind som også er 5.
Og ved at køre $sql, $arrParams igennem iQuery så opnår jeg sikkerheden mod sql injections?
Du må gerne lige smide et svar. :)
Avatar billede olebole Juniormester
08. november 2011 - 00:20 #10
De fem s'er angiver, at de fem argumenter er strenge. De forskellige datatype, mysqli accepterer, er:

*) s: String
*) i: Integer
*) d: Double
*) b: Blob (binære data pakker)

Du fortæller med andre ord databasen, hvilke datatyper den kan forvente i de forskellige parametre/argumenter. Modtager den andet, kaster den det bort - og det er langt sikrere.

Jeg samler ikke point. Du lægger bare selv et svar og accepterer det, så tråden lukkes ... men tak for tilbudet  =)
Avatar billede jdjensen Juniormester
08. november 2011 - 09:21 #11
Det lyder som den helt rigtige måde at gøre det på. Det er mig der takker. :-)
Avatar billede jdjensen Juniormester
08. november 2011 - 09:41 #12
Hvad hvis den siger:
Fatal error: Call to undefined function iQuery() in /process.php on line 17
Hvordan skal iquery defines? :)
Avatar billede olebole Juniormester
08. november 2011 - 14:27 #13
Du henter funktionen i det indlæg på php.net, jeg linkede til ovenfor. Du kan f.eks. have den liggende som en include fil
Avatar billede jdjensen Juniormester
08. november 2011 - 15:36 #14
Mystisk, har lige prøvet at inkluderet funktionen men fik desværre en fejl op ved submit:

Fatal error: Uncaught exception 'ReflectionException' with message 'Invocation of method mysqli_stmt::bind_param() failed' in /process.php:22 Stack trace: #0 /process.php(22): ReflectionMethod->invokeArgs(Object(mysqli_stmt), Array) #1 /process.php(65): iQuery('INSERT INTO use...', Array) #2 {main} thrown in /process.php on line 22


-------------------------------------------------------
// Connect to server and select database
mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD)or die("Cannot connect");
mysql_select_db(DB_DEFAULT_DB)or die("Cannot select DB");

// Get values from form
$arrParams = array('sssss', $_POST['firstname'], $_POST['lastname'], $_POST['emailaddress'], $_POST['answer'], $_POST['newsletter']);

// Insert data into table
$sql = "INSERT INTO $tbl_name (firstname, lastname, emailaddress, answer, newsletter, date) VALUES ('$firstname', '$lastname', '$emailaddress', '$answer', '$newsletter', CURDATE())";
$result = iQuery($sql, $arrParams);

// iQuery
function iQuery($sql, $arrParams, $arrBindNames=false) {
    $result = new stdClass();
    $mysqli = @new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DEFAULT_DB);
    if (mysqli_connect_errno()) {
        $result->error = 'Connection failed: '.mysqli_connect_error();
        return $result;
    }
    if ($stmt = $mysqli->prepare($sql)) {
        $method = new ReflectionMethod('mysqli_stmt', 'bind_param');
        $method->invokeArgs($stmt, $arrParams);   
        $stmt->execute();
        $meta = $stmt->result_metadata();
        if (!$meta) {           
            $result->affected_rows = $stmt->affected_rows;
            $result->insert_id = $stmt->insert_id;
        } else {
            $stmt->store_result();
            $params = array();
            $row = array();
            if ($arrBindNames) {
                for ($i=0,$j=count($arrBindNames); $i<$j; $i++) {
                    $params[$i] = &$row[$arrBindNames[$i]];
                }
            } else {
                while ($field = $meta->fetch_field()) {
                    $params[] = &$row[$field->name];
                }
            }
            $meta->close();
            $method = new ReflectionMethod('mysqli_stmt', 'bind_result');
            $method->invokeArgs($stmt, $params);           
            $result->rows = array();
            while ($stmt->fetch()) {
                $obj = new stdClass();
                foreach($row as $key => $val) {
                    $obj->{$key} = $val;
                }
                $result->rows[] = $obj;
            }
            $stmt->free_result();
        }
        $stmt->close();
    }
    $mysqli->close();
    return $result;
}
Avatar billede olebole Juniormester
08. november 2011 - 16:31 #15
iQuery forbinder selv til databasen, så det behøver du ikke gøre.

Desuden skal du ikke skrive værdierne i SQL-strengen. De skal erstattes af spørgsmålstegn. Så sætter databasen selv værdierne ind fra parameterarray'et, hvis de passer til de datatyper, du har angivet (de fem s'er):


// Get values from form
$arrParams = array('sssss', $_POST['firstname'], $_POST['lastname'], $_POST['emailaddress'], $_POST['answer'], $_POST['newsletter']);

// Insert data into table
$sql = "INSERT INTO $tbl_name (firstname, lastname, emailaddress, answer, newsletter, date) VALUES (?, ?, ?, ?, ?, CURDATE())";
$result = iQuery($sql, $arrParams);
var_dump($result);

// iQuery
function iQuery($sql, $arrParams, $arrBindNames=false) {
    $result = new stdClass();
    $mysqli = @new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DEFAULT_DB);
    if (mysqli_connect_errno()) {
        $result->error = 'Connection failed: '.mysqli_connect_error();
        return $result;
    }
    if ($stmt = $mysqli->prepare($sql)) {
        $method = new ReflectionMethod('mysqli_stmt', 'bind_param');
        $method->invokeArgs($stmt, $arrParams);   
        $stmt->execute();
        $meta = $stmt->result_metadata();
        if (!$meta) {           
            $result->affected_rows = $stmt->affected_rows;
            $result->insert_id = $stmt->insert_id;
        } else {
            $stmt->store_result();
            $params = array();
            $row = array();
            if ($arrBindNames) {
                for ($i=0,$j=count($arrBindNames); $i<$j; $i++) {
                    $params[$i] = &$row[$arrBindNames[$i]];
                }
            } else {
                while ($field = $meta->fetch_field()) {
                    $params[] = &$row[$field->name];
                }
            }
            $meta->close();
            $method = new ReflectionMethod('mysqli_stmt', 'bind_result');
            $method->invokeArgs($stmt, $params);           
            $result->rows = array();
            while ($stmt->fetch()) {
                $obj = new stdClass();
                foreach($row as $key => $val) {
                    $obj->{$key} = $val;
                }
                $result->rows[] = $obj;
            }
            $stmt->free_result();
        }
        $stmt->close();
    }
    $mysqli->close();
    return $result;
}

Avatar billede olebole Juniormester
08. november 2011 - 16:37 #16
Værdierne skrives ikke i SQL-strengen, da lidt fantasifulde værdier så kan kompromitere strengen og få den til at udføre en helt anden kommando.

I stedet sende SQL-strengen til databasen, som sætter en procedure op for lige netop den type kald. Derefter sender du så værdierne og en angivelse af deres forventede datatyper.

Værdierne kommer aldrig i berøring med selve SQL-kommandoen og kan derfor heller ikke ødelægge/ændre den. Lever de (eller bare én) ydermere ikke op til de forventede typeerklæringer, forkastes kaldet
Avatar billede jdjensen Juniormester
08. november 2011 - 18:27 #17
Ok. Jeg får dog stadig en fejl og tænker om det måske kan være fordi 2 af formfelterne ikke er textfields?

Answer = select
Newslettter = checkbox

---

Fatal error: Uncaught exception 'ReflectionException' with message 'Invocation of method mysqli_stmt::bind_param() failed' in /process.php:26 Stack trace: #0 /process.php(26): ReflectionMethod->invokeArgs(Object(mysqli_stmt), Array) #1 /process.php(13): iQuery('INSERT INTO use...', Array) #2 {main} thrown in /process.php on line 26
Avatar billede jdjensen Juniormester
08. november 2011 - 18:37 #18
Eller fordi datatypen på nogle af kolonnerne i min tabel i databasen har forkert datatype. De står alle til datatype = Text, pånær Date som har datatype Date.
Avatar billede olebole Juniormester
08. november 2011 - 20:17 #19
Sorry, det er en fejl, der opstår i PHP 5.3 og op. Her kræver 'bind_param', at array'et består af referencer - ikke værdier  :o|

Løsningen er følgende funktion:


function getRefArray($a){
    if (strnatcmp(phpversion(),'5.3')>=0) {
        $ret = array();
        foreach($a as $key => $val) {
            $ret[$key] = &$a[$key];
        }
        return $ret;
    }
    return $a;
}


- og denne lille ændring i iQuery:


    if ($stmt = $mysqli->prepare($sql)) {
        $arrParams = getRefArray($arrParams); // <-- Added due to changes since PHP 5.3
        $method = new ReflectionMethod('mysqli_stmt', 'bind_param');
        $method->invokeArgs($stmt, $arrParams);   
        $stmt->execute();
        $meta = $stmt->result_metadata();


Så burde det funke  =)
Avatar billede jdjensen Juniormester
08. november 2011 - 20:59 #20
Æv æv, der melder stadig fejl efter jeg har ændret koden med ovenstående:

Fatal error: Uncaught exception 'ReflectionException' with message 'Invocation of method mysqli_stmt::bind_param() failed' in /process.php:27 Stack trace: #0 /process.php(27): ReflectionMethod->invokeArgs(Object(mysqli_stmt), Array) #1 /process.php(13): iQuery('INSERT INTO use...', Array) #2 {main} thrown in /process.php on line 27

Andre forslag? ;)


-----------


// Get values from form
$arrParams = array('sssss', $_POST['firstname'], $_POST['lastname'], $_POST['emailaddress'], $_POST['answer'], $_POST['newsletter']);

// Insert data into table
$sql = "INSERT INTO $tbl_name (firstname, lastname, emailaddress, answer, newsletter, date) VALUES (?, ?, ?, ?, ?, CURDATE())";
$result = iQuery($sql, $arrParams);
var_dump($result);

// iQuery
function iQuery($sql, $arrParams, $arrBindNames=false) {
    $result = new stdClass();
    $mysqli = @new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DEFAULT_DB);
    if (mysqli_connect_errno()) {
        $result->error = 'Connection failed: '.mysqli_connect_error();
        return $result;
    }
    if ($stmt = $mysqli->prepare($sql)) {
        $arrParams = getRefArray($arrParams); // Added due to changes since PHP 5.3
        $method = new ReflectionMethod('mysqli_stmt', 'bind_param');
        $method->invokeArgs($stmt, $arrParams);   
        $stmt->execute();
        $meta = $stmt->result_metadata();
        if (!$meta) {           
            $result->affected_rows = $stmt->affected_rows;
            $result->insert_id = $stmt->insert_id;
        } else {
            $stmt->store_result();
            $params = array();
            $row = array();
            if ($arrBindNames) {
                for ($i=0,$j=count($arrBindNames); $i<$j; $i++) {
                    $params[$i] = &$row[$arrBindNames[$i]];
                }
            } else {
                while ($field = $meta->fetch_field()) {
                    $params[] = &$row[$field->name];
                }
            }
            $meta->close();
            $method = new ReflectionMethod('mysqli_stmt', 'bind_result');
            $method->invokeArgs($stmt, $params);           
            $result->rows = array();
            while ($stmt->fetch()) {
                $obj = new stdClass();
                foreach($row as $key => $val) {
                    $obj->{$key} = $val;
                }
                $result->rows[] = $obj;
            }
            $stmt->free_result();
        }
        $stmt->close();
    }
    $mysqli->close();
    return $result;
}

function getRefArray($a){
    if (strnatcmp(phpversion(),'5.3')>=0) {
        $ret = array();
        foreach($a as $key => $val) {
            $ret[$key] = &$a[$key];
        }
        return $ret;
    }
    return $a;
}
Avatar billede olebole Juniormester
08. november 2011 - 21:12 #21
Nej, det fungerer fint hos mig. Jeg tester med dette:


<?php
define('DB_HOST', 'localhost');
define('DB_USERNAME', '');
define('DB_PASSWORD', '');
define('DB_DEFAULT_DB', 'test');
$tbl_name = 'my_table';

function getRefArray($a){
    if (strnatcmp(phpversion(),'5.3')>=0) {
        $ret = array();
        foreach($a as $key => $val) {
            $ret[$key] = &$a[$key];
        }
        return $ret;
    }
    return $a;
}

if (!empty($_POST)) {
    // iQuery
    function iQuery($sql, $arrParams, $arrBindNames=false) {
        $result = new stdClass();
        $mysqli = @new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DEFAULT_DB);
        if (mysqli_connect_errno()) {
            $result->error = 'Connection failed: '.mysqli_connect_error();
            return $result;
        }
    if ($stmt = $mysqli->prepare($sql)) {
        $arrParams = getRefArray($arrParams); // <-- Added due to changes since PHP 5.3
        $method = new ReflectionMethod('mysqli_stmt', 'bind_param');
        $method->invokeArgs($stmt, $arrParams);   
        $stmt->execute();
        $meta = $stmt->result_metadata();
            if (!$meta) {           
                $result->affected_rows = $stmt->affected_rows;
                $result->insert_id = $stmt->insert_id;
            } else {
                $stmt->store_result();
                $params = array();
                $row = array();
                if ($arrBindNames) {
                    for ($i=0,$j=count($arrBindNames); $i<$j; $i++) {
                        $params[$i] = &$row[$arrBindNames[$i]];
                    }
                } else {
                    while ($field = $meta->fetch_field()) {
                        $params[] = &$row[$field->name];
                    }
                }
                $meta->close();
                $method = new ReflectionMethod('mysqli_stmt', 'bind_result');
                $method->invokeArgs($stmt, $params);           
                $result->rows = array();
                while ($stmt->fetch()) {
                    $obj = new stdClass();
                    foreach($row as $key => $val) {
                        $obj->{$key} = $val;
                    }
                    $result->rows[] = $obj;
                }
                $stmt->free_result();
            }
            $stmt->close();
        }
        $mysqli->close();
        return $result;
    }

    // Get values from form
    $arrParams = array('sssss', $_POST['firstname'], $_POST['lastname'], $_POST['emailaddress'], $_POST['answer'], $_POST['newsletter']);
   
    // Insert data into table
    $sql = "INSERT INTO $tbl_name (firstname, lastname, emailaddress, answer, newsletter, date) VALUES (?, ?, ?, ?, ?, CURDATE())";
    $result = iQuery($sql, $arrParams);
    var_dump($result);
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<form action="" method="post">
    <div>Fornavn: <input name="firstname" type="text"></div>
    <div>Efternavn: <input name="lastname" type="text"></div>
    <div>E-mail: <input name="emailaddress" type="text"></div>
    <div>Svar: <input name="answer" type="text"></div>
    <div>Nyhedsbrev: <input name="newsletter" type="text"></div>
   
    <p><button type="submit">Send</button></p>
</form>

</body>
</html>

Avatar billede jdjensen Juniormester
08. november 2011 - 22:13 #22
Har præcis det samme. Lige bortset fra "svar" er en selectbox og "nyhedsbrev" en checkbox i html'en.

Jeg har også prøvet at skifte fra php 5.2 > 5.3 og fik nu en helt anden fejlbesked (måske det er mere sigende):

object(stdClass)#1 (2) { ["affected_rows"]=> int(1) ["insert_id"]=> int(0) }

Ellers må jeg gå tilbage til "the old-coding-style". :-)
Avatar billede olebole Juniormester
08. november 2011 - 22:29 #23
Jamen, tillykke! Med den besked har du lige indsat en række  =)
Avatar billede olebole Juniormester
08. november 2011 - 22:30 #24
Det er ikke en fejlbesked, men resultatet af din var_dump  *o)
Avatar billede olebole Juniormester
08. november 2011 - 22:32 #25
- var_dump($result); udskriver bare resultatet af handlingen. Den linje skal normalt ikke stå der, men er kun til fejlfinding
Avatar billede jdjensen Juniormester
08. november 2011 - 22:43 #26
Ahhhhhhh!!
Og jeg troede bare det var endnu en fejlbesked. :D
Testet og virker kan jeg bare sige!
Tak for hjælpen endnu engang og tak for kampen. :-)
Avatar billede olebole Juniormester
08. november 2011 - 23:08 #27
Hehe ... selvtak  :D
Avatar billede jdjensen Juniormester
11. november 2011 - 11:41 #28
Hej olebole (såfremt du stadig får mails fra denne tråd). Jeg mangler nu bare at lave et lille database-check til min process.php fil. Jeg ved ikke om der er nogen smart iQuery metode for det. Eller om det er klogest helt at holde det udenfor iQuery løkken. Tråden ligger her hvis du er interesseret i at tage et kig: http://www.eksperten.dk/spm/951073
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