Avatar billede janbb Juniormester
20. april 2004 - 15:20 Der er 37 kommentarer og
2 løsninger

et x en form ? MySQL-søgning

<?php
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "localhost";
    $MYSQL_DEFS["user"] = "username";
    $MYSQL_DEFS["password"] = "password";
    $MYSQL_DEFS["db"] = "databasename";

    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);

    $sql = mysql_query("
        SELECT *
        FROM tabel
        WHERE feltnavn1 LIKE '%link%'
    ") or die(mysql_error());
   
    if (mysql_num_rows($sql)) {
        while ($foo = mysql_fetch_assoc($sql)) {
            echo $foo['feltnavn1'] . $foo['feltnavn2'] . $foo['feltnavn3'] . $foo['feltnavn4'];
        }
    }
?>

Denne kode giver udtræk af alle rec. hvor ordet link forekommer.
Kan man lave en form, hvor input i et felt repræsenterer en slags
X i ækvationen WHERE feltnavn1 LIKE '%X%'
en slags 'variabel.
Tror ikke Jeg må bruge POST og GET hos min webudbyder,
men lad mig bare prøve det hvis det ikke kan undgåes i
formsammenhæng.Er 'grøn' udi PHP og webforms.
Avatar billede Syska Mester
20. april 2004 - 15:28 #1
lol, sikker på du ikke kan bruge POST GET, kunne ikke se hvorfor du ikke skulle kunne bruge det, kan kan jo nada hvis man kan slå det fra.....
Avatar billede hmortensen Nybegynder
20. april 2004 - 15:34 #2
Noget i den her retning:

<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="get">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_GET[search])) && ($_GET[search] <> ""))
{
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "localhost";
    $MYSQL_DEFS["user"] = "username";
    $MYSQL_DEFS["password"] = "password";
    $MYSQL_DEFS["db"] = "databasename";

    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);

    $sql = mysql_query("
        SELECT *
        FROM tabel
        WHERE feltnavn1 LIKE '%".$_GET[search]."%'
    ") or die(mysql_error());
   
    if (mysql_num_rows($sql)) {
        while ($foo = mysql_fetch_assoc($sql)) {
            echo $foo['feltnavn1'] . $foo['feltnavn2'] . $foo['feltnavn3'] . $foo['feltnavn4'];
        }
    }
}
?>
Avatar billede jakobdo Ekspert
20. april 2004 - 15:35 #3
Omvendt bør du bruge noget tjek på $_GET['search'] ellers kan der laves SQL-injection.
Avatar billede janbb Juniormester
20. april 2004 - 16:04 #4
faktisk har jeg problemer med den her linie jeg opgav

$sql = mysql_query("
        SELECT *
        FROM tabel
        WHERE feltnavn1 LIKE '%link%'
    ") or die(mysql_error());

og jeg er nødt til at bruge denne - der virker



$sql = mysql_query('SELECT * '
        . ' FROM `minsql` '
        . ' WHERE emne'
        . ' LIKE \'%link\' LIMIT 0, 30') or die(mysql_error());

, men kan ikke få din kode

  WHERE feltnavn1 LIKE '%".$_GET[search]."%'
    ") or die(mysql_error());

sat ind i den der virker (får parse error i linie 17).

Nogen forslag ?

( kan man ikke bruge en inputbox og undgå post ?),
men som sagt har nogen syntakxx probs ve queryen.
Avatar billede jakobdo Ekspert
20. april 2004 - 16:06 #5
inputbox poster "værdien" videre, så du skal bruge POST, eller evt GET.

Prøv at vis hele koden engang?
Avatar billede janbb Juniormester
20. april 2004 - 16:27 #6
<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="get">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_GET[search])) && ($_GET[search] <> ""))
{

    # mySQL Definitons
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "localhost";
    $MYSQL_DEFS["user"] = "username";
    $MYSQL_DEFS["password"] = "password";
    $MYSQL_DEFS["db"] = "databasename";


    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);



$sql = mysql_query('SELECT * '
        . ' FROM `minsql` '
        . ' WHERE emne'
        . ' LIKE \'%".$_GET[search]\' LIMIT 0, 30') or die(mysql_error());

if (mysql_num_rows($sql)) {
  while ($foo = mysql_fetch_assoc($sql)) {

echo $foo['nummer'] . $foo['emne'] . $foo['forfatter'] . $foo['tekst'];

     
  }
}

?>

Og det er altsaa denne her linie, der forløb er knas med hvor jeg pøver at samføre
queryen med den 'nye' query.
Avatar billede janbb Juniormester
20. april 2004 - 16:28 #7
$sql = mysql_query('SELECT * '
        . ' FROM `minsql` '
        . ' WHERE emne'
        . ' LIKE \'%".$_GET[search]\' LIMIT 0, 30') or die(mysql_error());

denne linie altsaa.
Avatar billede janbb Juniormester
20. april 2004 - 16:32 #8
den linie der virker jvf ovenfor er konstrueret udfra faciliteten på phpadmin, der er en service på freepaq hvor databasen ligger.
Avatar billede jakobdo Ekspert
20. april 2004 - 16:36 #9
Prøv denne:

<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="get">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_GET[search])) && ($_GET[search] <> ""))
{
    // mySQL Definitons
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "localhost";
    $MYSQL_DEFS["user"] = "username";
    $MYSQL_DEFS["password"] = "password";
    $MYSQL_DEFS["db"] = "databasename";


    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);
   
    $q = mysql_query("SELECT * FROM minsql WHERE emne LIKE '%".$_GET['search']."%' LIMIT 0, 30'") or die(mysql_error());

    if (mysql_num_rows($q))
    {
      while ($r = mysql_fetch_assoc($q))
      {
            echo "Nummer: ".$r['nummer']."<br>Emne: ".$r['emne']."<br>Forfatter: ".$r['forfatter']."<br>Tekst: ".$r['tekst']."<br>";
      }
    }
}

?>
Avatar billede janbb Juniormester
20. april 2004 - 16:37 #10
Kan man ikke teste om formen virker ved at lave et simpelt udprint i stedet for at vikle databasedelen ind i det før bagefter ?.
Problemet med freepaq er at de oprindelig havde VB-script og ville gerne bevare det da de gik over til php, men så kom der pludselig en meddelse om at man ikke kunne bruge post og get, men jeg tror det kun er for asp-filers vedkommende i virkeligheden.Er dog først fornylig beg. at afprøve på php foreløbig har det været meget inspirerende.Har mest leget med Delphi gennem årene.
Avatar billede janbb Juniormester
20. april 2004 - 16:38 #11
ja jeg prøver lige dit forslag :) jacobdo
Avatar billede janbb Juniormester
20. april 2004 - 16:46 #12
Noget må der foregå, men

jeg får denne fejlmeddelse
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1
Avatar billede janbb Juniormester
20. april 2004 - 16:48 #13
Jeg prøver lige at sætte apostroffer omkring tabelnavnet.
Avatar billede jakobdo Ekspert
20. april 2004 - 19:08 #14
Mærkeligt, for koden virker fint her!
Avatar billede janbb Juniormester
20. april 2004 - 19:27 #15
ja jeg undrer mig osse lidt - har prøvet og prøvet er ved at være lidt træt.
Men jeg kom ordet %get_search ind i phpadmins php-maskine og fik dette ud

$sql = 'SELECT * '
        . ' FROM `minsql` '
        . ' WHERE 1 AND `emne` '
        . ' LIKE \'%.get_search\' LIMIT 0, 30';

og det skal jo nok være $_GET['search'] i stedet for get_search

$sql = 'SELECT * '
        . ' FROM `minsql` '
        . ' WHERE 1 AND `emne` '
        . ' LIKE \'%.$_GET['search']\' LIMIT 0, 30';

Det blir det næste jeg prøver. Puha.

Hvad betyder punktummerne ?.
Avatar billede jakobdo Ekspert
20. april 2004 - 19:36 #16
Prøv at giv mig din kode igen?
Har du evt også et link til siden hvor du har koden liggende?
Avatar billede jakobdo Ekspert
20. april 2004 - 19:38 #17
.'er bruges til at sætte strenge samme,
f.eks.
$fornavn = "Jakob";
$efternavn = "Olsen";
$fuldenavn = $fornavn." ".$efternavn; //Dette vil give Jakob Olsen
echo $fuldenavn;
Avatar billede janbb Juniormester
20. april 2004 - 20:11 #18
Koden:


<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="get">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_GET[search])) && ($_GET[search] <> ""))
{
    // mySQL Definitons
    $MYSQL_DEFS = array();
 

$MYSQL_DEFS["host"] = "mysql.freepaq.dk";
    $MYSQL_DEFS["user"] = "jababa.dk";
    $MYSQL_DEFS["password"]    = "*******";
    $MYSQL_DEFS["db"] = "jababa_dk_db";



    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);
   
    $q = mysql_query("SELECT * FROM FROM `minsql` WHERE emne LIKE '%".$_GET['search']."%' LIMIT 0, 30'") or die(mysql_error());

    if (mysql_num_rows($q))
    {
      while ($r = mysql_fetch_assoc($q))
      {
            echo "Nummer: ".$r['nummer']."<br>Emne: ".$r['emne']."<br>Forfatter: ".$r['forfatter']."<br>Tekst: ".$r['tekst']."<br>";
      }
    }
}

?>


ligger her:

http://www.jababa.dk/min7bsql.php?search=link
Avatar billede janbb Juniormester
20. april 2004 - 20:25 #19
Hvordan kan man lave en kodelinie om til en kommentarlinie i PHP ?
(a la // i asp)
Avatar billede jakobdo Ekspert
20. april 2004 - 20:32 #20
Jep, du kan bruge:

// Kommentar...
Eller
/* Her
starter
en lang
kommentar */
Avatar billede jakobdo Ekspert
20. april 2004 - 20:36 #21
Prøv denne kode:

<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="POST">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_POST[search])) && ($_POST[search] != ""))
{
    // mySQL Definitons
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "mysql.freepaq.dk";
    $MYSQL_DEFS["user"] = "jababa.dk";
    $MYSQL_DEFS["password"]    = "*******";
    $MYSQL_DEFS["db"] = "jababa_dk_db";

    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);
   
    $q = mysql_query("SELECT * FROM FROM `minsql` WHERE emne LIKE '%".$_POST['search']."%' LIMIT 0, 30'") or die(mysql_error());

    if (mysql_num_rows($q))
    {
        while ($r = mysql_fetch_assoc($q))
        {
            echo "Nummer: ".$r['nummer']."<br>Emne: ".$r['emne']."<br>Forfatter: ".$r['forfatter']."<br>Tekst: ".$r['tekst']."<br>";
        }
    }
}

?>
Avatar billede jakobdo Ekspert
20. april 2004 - 20:38 #22
Mener ikke du kan bruge <> i PHP, men du skal bruge !=
Avatar billede janbb Juniormester
20. april 2004 - 21:23 #23
http://www.jababa.dk/min11sql.php

Er den nye kode.Ingen fremskridt.
Holder en lille tænkepause, da det er svært at oploade i øjeblikket.
skal nok vende tilbage når jeg får 'pusten' igen. :)
Avatar billede jakobdo Ekspert
20. april 2004 - 21:42 #24
Prøv at fjern `` om minsql, så din SQL sætning bliver:
SELECT * FROM FROM minsql WHERE emne LIKE '%".$_POST['search']."%' LIMIT 0, 30
og fjern ' efter 30

Prøv at brug denne:
$q = mysql_query("SELECT * FROM FROM minsql WHERE emne LIKE '%".$_POST['search']."%' LIMIT 0, 30") or die(mysql_error());
Avatar billede janbb Juniormester
20. april 2004 - 22:43 #25
jacobdo: Nej det er det samme.
Har haft en 2 - 3 queryer der har virket her de sidste dage, hvor jeg har leget med det en anden variant jeg fik til at virke var:

$sql =  mysql_query('SELECT * '
        . ' FROM `minsql` '
        . ' WHERE `nummer` =2 OR `nummer` =0 LIMIT 0, 30') or die(mysql_error());

Men man kan vel ikke bruge noget med et lighedstegn ?
Kommer ud her: http://www.jababa.dk/min2sql.php

Saa et andet spm med den her kode:
$result = mysql_query("SELECT name, address, zip, city, phone, email FROM breeder WHERE medlemsnr =".$_GET['id']) or die(mysql_error());
Men det er jo noget helt andet.

Har osse prøvet at la vaer med at bruge dobbelte apostroffer, men der var ikke umiddelbart stor forskel.(den første jeg fik til at virke med select * var vist med dobbelte apostroffer:
$sql = mysql_query("
  SELECT *
  FROM minsql
") or die(mysql_error());)
Der er osse noget der tyder på man godt kan bruge GET på frepaq-sider,
men ku man ikke lave en test med at udskrive det man skriver i rubrikken ?
bare for at få en lille succes i al elendigheden.:)
Avatar billede janbb Juniormester
21. april 2004 - 01:46 #26
POST virker i hvert fald.
(<?php echo $_POST['name']; ?>)
http://www.jababa.dk/post1.php
et lille form-program jeg fandt.
Så det er ikke det.Og programmet er jeg heller ikke i tvivl om er fejlfrit.
Det må skyldes den mystiske SQL-syntaks de bruger på mysql.freepaq.dk
Deres side med dokumentation er 'nede' i dag, men jeg maa prøve at kigge noget mer på det (det ser ret 'kringlet' ud).

Prøvede med den her - da jeg tænkte man ku indtaste et tal i nummer-datafeltet og saa få den aktuelle record skrevet ud, men den gav 'parsefejl'.

$q =  mysql_query('SELECT * '
        . ' FROM `minsql` '
        . ' WHERE `nummer` =".$_GET['search'] OR `nummer` =0 LIMIT 0, 30') or die(mysql_error());
Avatar billede janbb Juniormester
21. april 2004 - 01:49 #27
Det er måske fordi nummerfeltet er af typen varchar ?
Avatar billede janbb Juniormester
21. april 2004 - 04:29 #28
Jeg får kun parse error i linie 19 (og det er den famøse query):
Har brugt regler fra Delphi, men lige fedt ..

$q = mysql_query('SELECT * FROM minsql WHERE emne LIKE ''%'.$_POST['search'].'%''') or die(mysql_error());
  //Delphiinspiration
// 0: D1.CommandText := 'SELECT ID FROM tbl_mening WHERE Tekst1 LIKE ''%' + Edit1.Text + '%''';
Avatar billede janbb Juniormester
21. april 2004 - 04:41 #29
I må godt få points for jeres tålmodighed hvis i lægger svar.
Det lykkes jo nok en dag.
Det er osse blevet lidt træls fordi der er knas med FTP'en.
Jeg er i hvert fald blevet lidt klogere på PHP :)
Avatar billede jakobdo Ekspert
21. april 2004 - 08:46 #30
Denne linie er også forkert...
Skift denne linie:
'SELECT * FROM minsql WHERE emne LIKE ''%'.$_POST['search'].'%'''
ud med denne:
"SELECT * FROM minsql WHERE emne LIKE '%".$_POST['search']."%'"
Avatar billede janbb Juniormester
21. april 2004 - 14:00 #31
HURA HURRA NU VIRKER DET :) :)

Fantastisk smart program som jeg er virkelig glad for.Tak.

Og smid nu de svar.
Avatar billede janbb Juniormester
21. april 2004 - 14:02 #32
Ligger her:

http://www.jababa.dk/min12sql.php

og søg paa ordet link
(der er ikke saa mange record endnu)
Avatar billede jakobdo Ekspert
21. april 2004 - 14:04 #33
Svar... (var det blot min løsning:
Denne linie er også forkert...
Skift denne linie:
'SELECT * FROM minsql WHERE emne LIKE ''%'.$_POST['search'].'%'''
ud med denne:
"SELECT * FROM minsql WHERE emne LIKE '%".$_POST['search']."%'"
)

eller var der andet galt?
Avatar billede janbb Juniormester
21. april 2004 - 14:21 #34
Det var udelukkende et spm om brugen af dobbeltapostroffer så vidt jeg kan skønne: her er den tot kode


<form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="POST">
Søgeord:
<input type="text" name="search"><br>
<input type="submit">
</form>
<?php
if ((isset($_POST[search])) && ($_POST[search] != ""))
{
    // mySQL Definitons
    $MYSQL_DEFS = array();
    $MYSQL_DEFS["host"] = "localhost";
    $MYSQL_DEFS["user"] = "username";
    $MYSQL_DEFS["password"]    = "password";
    $MYSQL_DEFS["db"] = "databasename";

    mysql_connect($MYSQL_DEFS["host"],$MYSQL_DEFS["user"],$MYSQL_DEFS["password"]);
    mysql_select_db($MYSQL_DEFS["db"]);
   
$q = mysql_query("SELECT * FROM minsql WHERE emne LIKE '%".$_POST['search']."%'") or die(mysql_error());
 
// "SELECT * FROM minsql WHERE emne LIKE '%".$_POST['search']."%'"
    if (mysql_num_rows($q))
    {
        while ($r = mysql_fetch_assoc($q))
        {
            echo "Nummer: ".$r['nummer']."<br>Emne: ".$r['emne']."<br>Forfatter: ".$r['forfatter']."<br>Tekst: ".$r['tekst']."<br>";
        }
    }
}

?>
Avatar billede jakobdo Ekspert
21. april 2004 - 14:23 #35
Jamen det er da herligt! :o)
Avatar billede janbb Juniormester
21. april 2004 - 14:23 #36
Vil gerne gi hundu skp lidt points osse så jeg giver ham lige nogle dage til at få lagt et svar osse :)
Avatar billede janbb Juniormester
23. april 2004 - 13:56 #37
jokobdo:

  Jeg ville jo gerne gi hundu_skp 50 points da han jo var temmelig tæt på noget af det rigtige efter mit skøn.Mennu er jeg jo oppe mod at jeg ikke kan forhøje point for spm her og fx lægge 50 points til ham i et nyt spm.'
Hvis jeg nu selv svarer og yager 50 points, som jeg så lægger ud til hindu_skp,
tror du så jeg overtræder nogen E-regler.Der har jo været nogen ret hidsige reaktioner på den slags spm, hvor man lægger ponts til nogen (kan jeg gi et par eksempler på).Så hvis du osse har forstand på det :) hører jeg gerne dit råd.
Avatar billede jakobdo Ekspert
23. april 2004 - 13:59 #38
Jeg er ligeglad, du kan give ham 50...
Pointene er ikke noget jeg tager så højt! (de er blot gode at have, når man skal have hjælp) :o)
Avatar billede janbb Juniormester
23. april 2004 - 14:03 #39
Jamen så prøver jeg den 'model' og endnu engang tak for din hjælp :)
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