/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
function query
Fra : Christoffer \(Guide\~


Dato : 05-08-06 12:10

Jeg er ret ny hvad det angår funktioner, så jeg har et spørgsmål! følgende
kode:

if($_POST['soeg']) {
function soeg ($emne) {
$goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$_POST[soeg]'")
or die(mysql_error());
return $goGet;
}

print soeg($_POST[html]);
print soeg($_POST[php]);
print soeg($_POST[artikler]);
}

1) Hvordan får jeg det til at virke så det udfører den query?
2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres med
en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere på
at queryen jo bliver afsluttet med et semi-kolon.

Christoffer



 
 
Christoffer \(Guide\~ (05-08-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 05-08-06 15:43


"Christoffer (Guide)" <hjeir@motherdk.dk> skrev i en meddelelse
news:44d47c78$0$20309$edfadb0f@dread16.news.tele.dk...

> if($_POST['soeg']) {
> function soeg ($emne) {
> $goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$_POST[soeg]'")
[klip]
> 1) Hvordan får jeg det til at virke så det udfører den query?
> 2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres med
> en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere på
> at queryen jo bliver afsluttet med et semi-kolon.
Har nu forsøgt mig med

if($_POST['soeg']) {
function soeg ($emne) {
$goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$_POST[soeg]'")
or die(mysql_error());
return $goGet;
while($vis = mysql_fetch_array($goGET)) {
$str = substr( $vis[text], 0, 200);
print "<p>$str</p>";
}
}

soeg($_POST[html]);
soeg($_POST[php]);
soeg($_POST[artikler]);
}

Men det virker heller ikke, er virkelig på herrens mark her..



Christian Joergensen (05-08-2006)
Kommentar
Fra : Christian Joergensen


Dato : 05-08-06 15:49

"Christoffer \(Guide\)" <hjeir@motherdk.dk> writes:

> Jeg er ret ny hvad det angår funktioner, så jeg har et spørgsmål! følgende
> kode:
>
> if($_POST['soeg']) {
> function soeg ($emne) {
> $goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$_POST[soeg]'")
> or die(mysql_error());
> return $goGet;
> }
>
> print soeg($_POST[html]);
> print soeg($_POST[php]);
> print soeg($_POST[artikler]);
> }
>
> 1) Hvordan får jeg det til at virke så det udfører den query?

Hvilken fejl faar du?

Udfra ovenstaaende kode vil jeg tillade mig at komme med et par anbefalinger :)

Ligner html, php og artikler-tabellerne hinanden? I saa fald kunne du proeve at
kigge paa UNION[1]. Noget kunne ogsaa godt tyde paa din normalisering[2] var i
stykker. Hvordan ser din databasestruktur ud? Hvis nu du strukturerede det noget
i retning af understaaende, kunne du noejes med at soege een gang:

pages
-----
page_id : int unsigned
section_id : int unsigned
page_title : varchar
page_text : text

sections
--------
section_id : int unsigned
section_title : varchar

Saa kan du hente sidetitel og sektionstitel ud med:

SELECT page_title, section_title
FROM pages NATURAL JOIN sections
WHERE page_text LIKE '%foo%';

> 2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres med
> en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere på
> at queryen jo bliver afsluttet med et semi-kolon.

Her et et eksempel:

function soeg($text) {

$pages = mysql_query("...);

if (mysql_num_rows($pages) > 0) {

while ($page = mysql_fetch_assoc($pages)) {
printf("%s: %s<br>", $page['section_title'], $page['page_title']);
}

} else {
print "Ingen fundne resultater.";
}

}

Husk i oevrigt at lave noget validering af dine inddata fra $_POST saa du
undgaar at give mulighed for SQL-injections[3].

[1] http://mysql.com/doc/refman/5.0/en/union.html
[2] http://en.wikipedia.org/wiki/Database_normalization
[3] http://en.wikipedia.org/wiki/SQL_Injection

--
Christian Joergensen | Linux, programming or web consultancy
http://www.razor.dk | Visit us at: http://www.gmta.info

Christoffer \(Guide\~ (05-08-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 05-08-06 17:18


"Christian Joergensen" <mail@razor.dk> skrev i en meddelelse
news:87wt9nutk9.fsf@jamie.razor.dk...
> "Christoffer \(Guide\)" <hjeir@motherdk.dk> writes:
>
> > Jeg er ret ny hvad det angår funktioner, så jeg har et spørgsmål!
følgende
> > kode:
> >
> > if($_POST['soeg']) {
> > function soeg ($emne) {
> > $goGet = mysql_query("SELECT * FROM $emne WHERE text =
'%$_POST[soeg]'")
> > or die(mysql_error());
> > return $goGet;
> > }
> >
> > print soeg($_POST[html]);
> > print soeg($_POST[php]);
> > print soeg($_POST[artikler]);
> > }
> >
> > 1) Hvordan får jeg det til at virke så det udfører den query?
>
> Hvilken fejl faar du?
>
> Udfra ovenstaaende kode vil jeg tillade mig at komme med et par
anbefalinger :)
> Ligner html, php og artikler-tabellerne hinanden? I saa fald kunne du
proeve at
> kigge paa UNION[1]. Noget kunne ogsaa godt tyde paa din normalisering[2]
var i
> stykker. Hvordan ser din databasestruktur ud? Hvis nu du strukturerede det
noget
> i retning af understaaende, kunne du noejes med at soege een gang:
>
> pages
> -----
> page_id : int unsigned
> section_id : int unsigned
> page_title : varchar
> page_text : text
>
> sections
> --------
> section_id : int unsigned
> section_title : varchar
>
> Saa kan du hente sidetitel og sektionstitel ud med:
>
> SELECT page_title, section_title
> FROM pages NATURAL JOIN sections
> WHERE page_text LIKE '%foo%';
>
> > 2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres
med
> > en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere

> > at queryen jo bliver afsluttet med et semi-kolon.
>
> Her et et eksempel:
>
> function soeg($text) {
>
> $pages = mysql_query("...);
>
> if (mysql_num_rows($pages) > 0) {
>
> while ($page = mysql_fetch_assoc($pages)) {
> printf("%s: %s<br>", $page['section_title'], $page['page_title']);
> }
>
> } else {
> print "Ingen fundne resultater.";
> }
>
> }
>
> Husk i oevrigt at lave noget validering af dine inddata fra $_POST saa du
> undgaar at give mulighed for SQL-injections[3].
>
> [1] http://mysql.com/doc/refman/5.0/en/union.html
> [2] http://en.wikipedia.org/wiki/Database_normalization
> [3] http://en.wikipedia.org/wiki/SQL_Injection
>
> --
> Christian Joergensen | Linux, programming or web consultancy
> http://www.razor.dk | Visit us at: http://www.gmta.info



Christoffer \(Guide\~ (05-08-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 05-08-06 17:27


"Christian Joergensen" <mail@razor.dk> skrev i en meddelelse
news:87wt9nutk9.fsf@jamie.razor.dk...
> "Christoffer \(Guide\)" <hjeir@motherdk.dk> writes:
> > if($_POST['soeg']) {
> > function soeg ($emne) {
> > $goGet = mysql_query("SELECT * FROM $emne WHERE text =
'%$_POST[soeg]'")
> > or die(mysql_error());
> > return $goGet;
> > }
> > print soeg($_POST[html]);
> > print soeg($_POST[php]);
> > print soeg($_POST[artikler]);
> > }
> > 1) Hvordan får jeg det til at virke så det udfører den query?
>
> Hvilken fejl faar du?
Jeg får ingen.. har uploadet mine sider http://www.buur.info/nag/index.php
... det er meningen at resultatet af søgningen skulle vises under den 2 <hr>

> Udfra ovenstaaende kode vil jeg tillade mig at komme med et par
anbefalinger :)
> Ligner html, php og artikler-tabellerne hinanden? I saa fald kunne du
proeve at
> kigge paa UNION[1]. Noget kunne ogsaa godt tyde paa din normalisering[2]
var i
> stykker. Hvordan ser din databasestruktur ud? Hvis nu du strukturerede det
noget
> i retning af understaaende, kunne du noejes med at soege een gang:
Jeg vil kigge på det, og se om jeg forstår det i løbet af aftenen!

> > 2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres
med
> > en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere

> > at queryen jo bliver afsluttet med et semi-kolon.
>
> Her et et eksempel:
>
> function soeg($text) {
>
> $pages = mysql_query("...);
>
> if (mysql_num_rows($pages) > 0) {
>
> while ($page = mysql_fetch_assoc($pages)) {
> printf("%s: %s<br>", $page['section_title'], $page['page_title']);
> }
>
> } else {
> print "Ingen fundne resultater.";
> }
>
> }
Takker og bukker, det ser meget brugbart ud.

> Husk i oevrigt at lave noget validering af dine inddata fra $_POST saa du
> undgaar at give mulighed for SQL-injections[3].
>
> [1] http://mysql.com/doc/refman/5.0/en/union.html
> [2] http://en.wikipedia.org/wiki/Database_normalization
> [3] http://en.wikipedia.org/wiki/SQL_Injection
Det kommer også undervejs, i første omgang koncentrerer jeg mig bare om at
lære at bruge hjemmestrikkede functions ordentligt, men plejer at bruge
addslashes til alle former for posts og gets..


> Christian Joergensen | Linux, programming or web consultancy
> http://www.razor.dk | Visit us at: http://www.gmta.info
.. Må skynde mig at sige det er en kanon side du har i razor.dk, den har
virkelig hjulpet mig mange gange, og gav mig også inspiration til at begynde
med functions til søgescriptet.



Christoffer \(Guide\~ (05-08-2006)
Kommentar
Fra : Christoffer \(Guide\~


Dato : 05-08-06 21:42

Opdatering, fandt ud af jeg havde lidt problemer med variablen "search" at
den var tom, lige med at den skulle finde WHERE text = %% ... er rettet nu
men får fejlen
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 '% Lorem'' at
line 1 (med søgeordet Lorem i dette tilfælde..

$soege = $_POST['search'];
function soeg ($emne) {
$goGet = mysql_query("SELECT * FROM $emne WHERE text = % $_POST[search]'")
or die(mysql_error());
while($vis = mysql_fetch_array($goGet)) {
$str = substr( $vis["text"], 0, 200);
print "<p>$str heey</p>";
}
}
soeg(html]);



Jesper Brunholm (06-08-2006)
Kommentar
Fra : Jesper Brunholm


Dato : 06-08-06 14:26

Christoffer (Guide) skrev:

> $soege = $_POST['search'];
> function soeg ($emne) {
> $goGet = mysql_query("SELECT * FROM $emne WHERE text = % $_POST[search]'")
> or die(mysql_error());

når du nu har lagt $_POST['search'] i variablen $soege så skal du da
også bruge den Så vil du sikkert invende at det har du også prøvet
på, men det virkede ikke - det skyldes sikkert at den er defineret
udenfor functionen, og derfor er den ikke tilgængelig inden i functionen.
Enten skal du erklære den global med

global $soege;

i functionen, eller også skal du flytte linjen $soege=.... ind i
functionen (det ser umiddelbart ud som den bedste løsning her).

Fejlen, som du får, skyldes at alle tekststrenge skal i anførselstegn i
mysql-kaldet, også selv om du har "jokeren" % med. Med disse to
kommentarer får du i stedet:

$goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$soege%'") or
die(mysql_error());

> while($vis = mysql_fetch_array($goGet)) {

når du nu alligevel bruger arrayet emd

> soeg(html]);

Her bør du også bruge anførselstegn, så det blive soeg("html");

mvh

Jesper Brunholm

Martin (09-08-2006)
Kommentar
Fra : Martin


Dato : 09-08-06 09:21

Christoffer (Guide) wrote:
> Jeg er ret ny hvad det angår funktioner, så jeg har et spørgsmål! følgende
> kode:
>
> if($_POST['soeg']) {
> function soeg ($emne) {
> $goGet = mysql_query("SELECT * FROM $emne WHERE text = '%$_POST[soeg]'")
> or die(mysql_error());
> return $goGet;
> }

En funktion skrives således:

function "navn" (argumenter)

Det som du har lavet er tæt på det rigtige, men dog har du $emne som
argument, men du bruger det ikke.

Det eneste der faktisk skal til er at $_POST[soeg] skal erstattes med $emne.

Så ville det virke langt bedre

> print soeg($_POST[html]);
> print soeg($_POST[php]);
> print soeg($_POST[artikler]);

Disse 3 er rigtige - Du kalder funktionen med et argument.


> }
>
> 1) Hvordan får jeg det til at virke så det udfører den query?
> 2) Jeg vil gerne tilføje en løkke til den function, men skal det gøres med
> en ny variabel eller kan jeg blot tilføje den til goGet? .. tænker mere på
> at queryen jo bliver afsluttet med et semi-kolon.

Jeg ville nok outputte et array istedet. Fx sådan her:

function soeg($emne) {
$out = array();
$query = mysql_query("SELECT id, emne FROM .. WHERE ... = '".$emne."'");
while($r = mysql_fetch_object($query)) {
$out[] = array(
      "id"=>$r->id
      ,"emne"=>$r->emne
      );
}
return $out;
}

så har du et array du kan loope igennem med en for løkke.

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste