Avatar billede Slettet bruger
13. april 2012 - 16:50 Der er 18 kommentarer og
1 løsning

brug af array-resultat i sql

hej :-)
Jeg bruger dette array:

$months_danish = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

jeg kunne godt tænke mig at bruge resultatet i min sql så jeg får udskrevet hvis $months_danish = 'maj' så udskriver den selfølgelig dem hvor jeg har sat datoen til maj :-)

tænker noget i stil med:

$sql = "SELECT * FROM tabel WHERE godkendt='1' AND "$months_danish = 'maj';
Ved godt ovenstående ikke virker, håber I kan hjælpe :-)
Avatar billede olsensweb.dk Ekspert
13. april 2012 - 18:18 #1
er det dette du vil
http://stackoverflow.com/questions/907806/php-mysql-using-an-array-in-where-clause

hvis du på forhånd ved det er feks mej måned hvorfor indsætter du så ikke måneds navnet som en variabel??

du bør nok overveje at bruge måneds nummer istedet for måneds navnet, da søgning kan være nemmere og du er ikke bundet af at du har stavet rigtigt i db
det gør det også nemmere hvis du for nogle brugere vil præsenterer indhold på engelsk og andre dansk
Avatar billede Slettet bruger
13. april 2012 - 18:25 #2
Lige nu har jeg en formular med en dropdown på månederne så man kan vælger månede eventen foregår i, men jeg tænkte at istedet for de skal vælge det i formularen kunne php måske selv regne det ud ved at bruge arrayet som jo er der i forvejen og så på den måde udskrive den de rigtige steder for lige nu bruger jeg:

$sql = "SELECT * FROM tabel WHERE godkendt='1' AND maanede='maj';

så kunne være fint hvis jeg ku droppe feltet i formularen og feltet(maanede) i db. :-)
Avatar billede olsensweb.dk Ekspert
13. april 2012 - 19:54 #3
>kunne php måske selv regne det ud ved at bruge arrayet
php kender selv aktuelle måned kig på date
og mysql har en tilsvarende function date and time functions

hvordan ser php coden ud til opret event, jeg har lidt svært ved at se hvad du ovrfører fra arrayet.

nb: fjern pw fra coden, når du visser den offentligt
Avatar billede Slettet bruger
13. april 2012 - 21:07 #4
hvad mener du med pw coden?

Jamen datoen bliver jo hentet fra et timestamp i db, som så udskriver måneden som navn fx. januar istedet for fx. jan eller 01
det er hvad arrayet gør :-)

Men mit spørgsmål er bare om jeg kan flette det ind i sql'en i stedet for at hente fra et felt i db så hent fra array?

ved ikke om du forstår det, er nok ikke så god til at forklare det :-)
Avatar billede Slettet bruger
13. april 2012 - 21:11 #5
Det er fordi når det er januar skal den udskrive dem som har et timestamp i januar og når det er feb skal den udsrive de events med timestamp i feb :-)
men sortere dem lige nu ved at hente et felt fra db i sql'en som j forklarede i #2

tænkte bare det kunne gøres nemmere udenom db. men bare med kodning.
Avatar billede olsensweb.dk Ekspert
13. april 2012 - 22:05 #6
>hvad mener du med pw coden?
jeg havde regnet du viste noget PHP code, og deri kunn indgå noget database connection med brugernavn/password, det var det brugernav/password der skulle xxxx

hvis du forvejen har eventen som et datetime ville jeg kigge på http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_month
evt http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_monthname

>tænkte bare det kunne gøres nemmere udenom db. men bare med kodning.
du skal jo have hentet eventen ud for at kunne behandle den i PHP
Avatar billede inteeeL Nybegynder
13. april 2012 - 22:35 #7
Du kan benytte strtotime til at bestemme et timestamps interval og mysql's egen indbyggede funktion BETWEEN. Det kunne se sådan her ud:
<?php

date_default_timezone_set('Europe/Copenhagen');

$start = strtotime("January 1st 2012", time());
$slut = strtotime("January 31th 2012", time());

$sql = "SELECT * FROM tabel WHERE godkendt='1' WHERE timestamp BETWEEN $start AND $slut";

?>

Her henter den alle rækker, hvis timestamp ligger i intervallet January 1st 2012 og January 31th 2012 - altså alle rækker i januar. Dog kender vi endnu ikke helt din opbygning, hvorfor du med sikkerhed selv skal foretage ændringer for at kunne implementere ovenstående.
Avatar billede inteeeL Nybegynder
13. april 2012 - 23:10 #8
Hov, lige en edit i $sql-statementet:
$sql = "SELECT * FROM tabel WHERE godkendt='1' AND timestamp BETWEEN $start AND $slut";
Avatar billede Slettet bruger
14. april 2012 - 16:47 #9
-inteelL
Ja, kan godt se hvor du vil hen med det, men ikke særlig smart nå jeg skal bruge en til hver måned det vil sige 12.

Sådan her ser min kode ud:

<a href="java script:showonlyone('newboxes1');">januar</a>
         
<div name="newboxes" id="newboxes1" class="event_month">

<?php
$months_danish = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
           
include ('databasen.php');
$sql = "SELECT * FROM tabel WHERE maanede='januar'";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {

echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
}?>

</div>

Disse er der 12 af, en for hver måned, for når man klikker på linket viser den jo de events der har den aktuelle måned i databasen :-)

link til website: http://www.afterlife.dk/events.php
Avatar billede inteeeL Nybegynder
14. april 2012 - 17:14 #10
Så er jeg med igen. Du kan udskrive alle 12 måneder ved kun at bruge koden en gang. Du laver blot en loop, hvor hvert element i arrayet $month_danish behandles. Det kunne se sådan her ud:
<?php

include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM tabel WHERE maanede='".strtolower($month)."'";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
        // Resten af data fra databasen udskrives her
    }
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>

Forudsat, at du selv skal foretage ændringer, så det passer til netop dit system.
Avatar billede olebole Juniormester
14. april 2012 - 17:16 #11
<ole>

Jo, det er nemlig ret smart. Du skal ikke bruge dit maanede felt til noget. I stedet bør du bruge feltet date

/mvh
</bole>
Avatar billede Slettet bruger
14. april 2012 - 17:18 #12
Men vil det så virke sådan at når man klikker på <a>januar</a>
så viser den de events der foregår i januar eller hvordan?
Har ikke helt styre på det nemlig, så for svært ved at tilpasse det, undskyld jeg er så noob. :-)
Avatar billede olebole Juniormester
14. april 2012 - 17:23 #13
#12: Ja, men jeg tror, der er noget i din struktur, jeg synes halter. Du får, såvidt jeg kan se, problemer med årstal.

Husk i øvrigt at månedsnavne staves med lille begyndelsesbogstav på dansk  *o)
Avatar billede Slettet bruger
14. april 2012 - 17:23 #14
Ja kan gode se at #7 er nemmere end #10 men så skal jeg stadig lave en $start og $slut for hver måned?

Må lige se hvilken af løsningerne der vil være bedst :-)
Avatar billede inteeeL Nybegynder
14. april 2012 - 17:30 #15
<?php

// include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM tabel WHERE maanede='".strtolower($month)."'";
    // $result = mysql_query($sql);
    // while ($row = mysql_fetch_array($result)) {
        // echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
    // }
   
    $html[] = "\$sql = $sql";
    $html[] = '</div>';
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>

Ovenstående udskriver følgende kode (kildekode):
<a href="java script:showonlyone('newboxes1');">JANUAR</a>
<div name="newboxes" id="newboxes1" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='januar'
</div>
<a href="java script:showonlyone('newboxes2');">FEBRUAR</a>
<div name="newboxes" id="newboxes2" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='februar'
</div>
<a href="java script:showonlyone('newboxes3');">MARTS</a>
<div name="newboxes" id="newboxes3" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='marts'
</div>
<a href="java script:showonlyone('newboxes4');">APRIL</a>
<div name="newboxes" id="newboxes4" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='april'
</div>
<a href="java script:showonlyone('newboxes5');">MAJ</a>
<div name="newboxes" id="newboxes5" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='maj'
</div>
<a href="java script:showonlyone('newboxes6');">JUNI</a>
<div name="newboxes" id="newboxes6" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='juni'
</div>
<a href="java script:showonlyone('newboxes7');">JULI</a>
<div name="newboxes" id="newboxes7" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='juli'
</div>
<a href="java script:showonlyone('newboxes8');">AUGUST</a>
<div name="newboxes" id="newboxes8" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='august'
</div>
<a href="java script:showonlyone('newboxes9');">SEPTEMBER</a>
<div name="newboxes" id="newboxes9" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='september'
</div>
<a href="java script:showonlyone('newboxes10');">OKTOBER</a>
<div name="newboxes" id="newboxes10" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='oktober'
</div>
<a href="java script:showonlyone('newboxes11');">NOVEMBER</a>
<div name="newboxes" id="newboxes11" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='november'
</div>
<a href="java script:showonlyone('newboxes12');">DECEMBER</a>
<div name="newboxes" id="newboxes12" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='december'
</div>


Linkene passer til det tilsvarende indhold - og det samme gør $sql-en. Men du SKAL tilpasse det til resten af siden. Forstået på den måde, at alt loyout skal tilpasses - du skal ikke copy/past ovenstående kode. :-) Vi kender ikke din events.php-fil.
Avatar billede Slettet bruger
14. april 2012 - 17:36 #16
Okay, tak skal nok tilpasse det :-) smid et svar! Tak
Avatar billede inteeeL Nybegynder
14. april 2012 - 17:39 #17
Svar :-)
Avatar billede Slettet bruger
16. april 2012 - 19:24 #18
inteeL, jeg har lige et spørgsmål til, hehe :-) lige nu ser min test siden sådan ud :

<?php

include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a id="myHeader1" class="month" href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM events WHERE maanede='".strtolower($month)."' AND godkendt='1' ORDER BY date ASC";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
    echo '<table id="event_table">';
    echo '<tr><td><span class="event_dato">'.date('j. ',$row[date]).$months_danish[date('n',$row[date])].date(' Y',$row[date]).'</span></td></tr>';
    echo '<tr><td><a class="event_title" href="eventen.php?id='.$row[id].'">'.substr($row["title"], 0, 35).'</a></td></tr>
    </table>';       
    }
   
   
    $html[] = '</div>';
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>
Her er linket til test side
http://www.afterlife.dk/test.php

det ser lidt forkert ud, da det jo gerne skulle blive tildet her http://www.afterlife.dk/events.php

Hvad gør jeg forkert? Har prøvet diverse ting, håber du kan se fejlen.
Avatar billede Slettet bruger
19. april 2012 - 15:55 #19
Nogle der kan hjælpe?? :-)
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