php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.10.2005, 11:50  
Gast
 
Beiträge: n/a
Standard Problem bei Datenbankabfrage

Hallo zusammen!

Ich hab viel im Net gesucht, und hab einen Code gefunden, der ca das macht was ich möchte, nämlich ein Feature in mein Programm einzubauen, welches eine Liste von Datumsangaben (Geburtstage in dem Fall) in einem selbst definierten Zeitraum anzeigt.

Ich hab versucht, das auf mein Script umzuändern:

PHP-Code:
<?
$mysql 
"SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, 
            DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING($datum_ende,5,6)) 
            BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd"
;
?>
Dabei ist folgender MySQL-Code raugekommen:
Code:
SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('.08.26',1,4),SUBSTRING(12.31,5,6)) BETWEEN '.08.26' AND '12.31' ORDER BY gebm, gebd
Die Abfrage ist korrekt (soll heißen, der Code ist gültig, hab ich auch in phpMyAdmin getestet), aber es wird nichts als Ergebnis ausgegeben, obwohl es viele Treffer geben müsste...

Wo hab ich da noch einen Fehler?

Vielen dank im Vorraus für jede Antwort!
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.10.2005, 12:03  
Gast
 
Beiträge: n/a
Standard

Hallo,

um dir weiterhelfen zu können, brauch ich noch mehr Code von dir. Wie wird zu DB connected, wie werden die Ergebnisse ausgelesen usw. Als überblick mal
http://www.php.net/manual/de/ref.mysql.php

lg
 
Alt 17.10.2005, 12:14  
Gast
 
Beiträge: n/a
Standard

Also das ist kein Problem, voila:

PHP-Code:
<?
    
include('includes/include_funktionen.php');
    include(
'includes/stylesheet.css');

//  ******* hier wird die Verbindung zu MySQL hergestellt *******
        
db_link($db_link);
//  ******* hier wird die Verbindung mit der Datenbank hergestellt *******    
        
select_db($select_db$MYSQL_db);
//  ******* hier wird die Abfrage durchgeführt *******


if(!isset($_GET["day_a"])) $_GET["day_a"] = date("d");
if(!isset(
$_GET["month_a"])) $_GET["month_a"] = date("m");

if(!isset(
$_GET["day_e"])) $_GET["day_e"] = date("d");
if(!isset(
$_GET["month_e"])) $_GET["month_e"] = date("m");

if(!isset(
$_GET["year"])) $_GET["year"] = date("Y");

$start mktime(0,0,0,$_GET["month_a"], $_GET["day_a"], $_GET["year"]);
$end mktime(0,0,0,$_GET["month_e"], $_GET["day_e"], $_GET["year"]); 

$start date(".m.d",$start);
$end date(".m.d",$end);
echo 
$start;
echo 
"
"
;
echo 
$end;

$zeit_tag "
    <option value='01'>01</option>
    <option value='02'>02</option>
    <option value='03'>03</option>
    <option value='04'>04</option>
    <option value='05'>05</option>
    <option value='06'>06</option>
    <option value='07'>07</option>
    <option value='08'>08</option>
    <option value='09'>09</option>
    <option value='10'>10</option>
    <option value='11'>11</option>
    <option value='12'>12</option>
    <option value='13'>13</option>
    <option value='14'>14</option>
    <option value='15'>15</option>
    <option value='16'>16</option>
    <option value='17'>17</option>
    <option value='18'>18</option>
    <option value='19'>19</option>
    <option value='20'>20</option>
    <option value='21'>21</option>
    <option value='22'>22</option>
    <option value='23'>23</option>
    <option value='24'>24</option>
    <option value='25'>25</option>
    <option value='26'>26</option>
    <option value='27'>27</option>
    <option value='28'>28</option>
    <option value='29'>29</option>
    <option value='30'>30</option>
    <option value='31'>31</option>
"
;
$zeit_monat "
    <option value='01'>01</option>
    <option value='02'>02</option>
    <option value='03'>03</option>
    <option value='04'>04</option>
    <option value='05'>05</option>
    <option value='06'>06</option>
    <option value='07'>07</option>
    <option value='08'>08</option>
    <option value='09'>09</option>
    <option value='10'>10</option>
    <option value='11'>11</option>
    <option value='12'>12</option>
"
;

?>
<form action="xxx.php" >
    <table>
     <tr>
        <td>von:</td>
        <td>
            <table>
             <tr>
                <td>Tag</td>
                <td>Monat</td>
             </tr>
             <tr>
                <td><select name='day_a'><?=$zeit_tag?></select></td>
                <td><select name='month_a'><?=$zeit_monat?></select></td>
             </tr>
            </table>
        </td>
        <td></td>
        <td>bis:</td>
        <td>
            <table>
             <tr>
                <td>Tag</td>
                <td>Monat</td>
             </tr>
             <tr>
                <td><select name='day_e'><?=$zeit_tag?></select></td>
                <td><select name='month_e'><?=$zeit_monat?></select></td>
             </tr>
            </table>
        </td>
        <td></td>
        <td><input type="submit" name="search_b" value="suchen" /></td>
     </tr>
    </table
</form>
<?


$start_jahr 
"1000";
$start $start_jahr.$start;

$ende_jahr "2005";
$end $ende_jahr.$end;

    
$datum_anfang $start;
    
$datum_ende $end;

    
$start date(".m.d",$start);
$end date(".m.d",$end);
echo 
$start;
echo 
"
"
;
echo 
$end;
echo 
"
"
;
    

// Funktion: alle Datensätze anzeigen
    
function suche_geburtstag($datum_anfang$datum_ende)
    {
    
?>    <p align="center">[b]Im gewählten Zeitraum sind folgende Geburtstage:[/b]</p>
        <table align="center" border="1" cellpadding="5"><tr>
        <th><?= A_NAME ?></th>
        <th><?= A_BIRTHDAY ?></th>
        <th><?= A_EMAIL ?></th></tr><tr>
    <?

    $mysql 
"SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, 
            DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING('$datum_ende',5,6)) 
            BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd"
;

            echo 
$mysql;
            
$result mysql_query($mysql);
        
            while(
$row mysql_fetch_assoc($result))
            {
                echo 
"<td class='anzeige'>";
                echo (
$row['FAMNAME'])." ".($row['VORNAME'])." ".($row['TITEL2']);
                  echo 
"</td><td class='anzeige'>";
                  echo (
$row['GEB_DATUM']);
                  echo 
"</td><td class='anzeige'>";
                  echo (
$row['EMAIL']);
                  echo 
"</td class='anzeige'></tr><tr>";
            } 
            
$i++;

        echo 
"</tr></table>";
    }

    
suche_geburtstag($datum_anfang$datum_ende);

?>
--> das ist der Code meines "Test-Scriptes", hab zuviele Ausgaben (echos) drauf, ich weiß, aber das hat den Zweck, dass ich den Überblick behalte und die kommen dann eh weg, wenn das ganze mal funktioniert und ins richtige Script eingebaut wird.
 
Alt 17.10.2005, 13:06  
Gast
 
Beiträge: n/a
Standard

Hat keiner eine Ahnung, wo der Fehler liegt?

Das Ergebnis dieser Abfrage (siehe Post oben) ist eine sortierte Liste ALLER Datensätze die vorhanden sind, egal ob da ein Geburtsdatum angegeben wurde oder nicht.

Was aber wirklich ausgegeben werden sollte, ist eine Liste aller Datensätze die ZWISCHEN den beiden Datumsangaben liegen.

Weiß jemand wie ich das erreichen kann?
 
Alt 17.10.2005, 13:46  
Gast
 
Beiträge: n/a
Standard

Code:
   $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm,
         DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING('$datum_ende',5,6))
         BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd";

         echo $mysql;   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ???
Zeige doch mal bitte, was dieses >>> echo $mysql; <<< ausgibt!

~dilemma~
 
Alt 17.10.2005, 13:49  
Gast
 
Beiträge: n/a
Standard

echo $mysql gibt das hier aus:

Code:
SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('0000.06.26',1,4),SUBSTRING('5000.12.31',5,6)) BETWEEN '0000.06.26' AND '5000.12.31' ORDER BY gebm, gebd
--> es werden dann ALLE Datensätze angezeigt.
--> es sollen aber nur die Datensätze angezeigt werden die zwischen 26.06 und 31.12 liegen
 
Alt 17.10.2005, 13:55  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Naja, dann schätze ich mal, dass
'0000.12.31' zwischen '0000.06.26' und '5000.12.31' liegt.
DiBo33 ist offline  
Alt 17.10.2005, 14:05  
Gast
 
Beiträge: n/a
Standard

also,
dieses:
>>>>>>>> CONCAT(SUBSTRING('0000.06.26',1,4),SUBSTRING('5000 .12.31',5,6))
liefert:
>>>>>>>> '0000.12.31' <<<<<<<<<

Und:
>>>>>>>> '0000.12.31' <<<<<<<<< ist doch BETWEEN '0000.06.26' AND '5000.12.31' !!!

also erhälst du immer alle Datensätze!

~dilemma~
 
Alt 17.10.2005, 14:05  
Gast
 
Beiträge: n/a
Standard

Ich weiß schon, dass alle Daten zwischen dem Jahr 0000 und und dem Jahr 5000 liegen.

Aber wie kann ich erreichen, dass die Jahreszahlen bei der Abrfrage sozusagen "ignoriert" werden (damit keine Jahreszahl ausgeschlossen wird, hab ich ja 0000 und 5000 gewählt)?

--> Ich suche ja nach Geburtstagen, und die finden ja jedes Jahr statt.

--> warum werden eigentlich auch die Datensätze angezeigt, bei denen kein Geburtsdatum drin steht?
 
Alt 17.10.2005, 14:31  
Gast
 
Beiträge: n/a
Standard

Wenn schon umständlich, dann so:
Code:
SELECT
   IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL
FROM
   vkstamm
WHERE
   DATE_FORMAT(GEB_DATUM, '%m.%d') BETWEEN RIGHT('$datum_anfang',5) AND RIGHT($datum_ende,5)
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
ORDER BY gebm, gebd
~dilemma~
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Datenbankabfrage mit variablen select-Auswahlfeldern tinchen PHP Tipps 2006 1 11.04.2006 10:40
Problem bei Datenbankabfrage PHP Tipps 2006 3 19.03.2006 18:48
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
problem bei distinct datenbankabfrage... Promaetheus Datenbanken 2 25.01.2006 17:28
[Erledigt] suche Lösung für logisches Problem bei Datenbankabfrage Datenbanken 10 25.01.2006 13:28
[Erledigt] Problem mit komplexer Datenbankabfrage Datenbanken 3 23.12.2005 22:02
[Erledigt] Problem mit Datenbankabfrage Datenbanken 3 09.12.2005 20:03
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit einer Datenbankabfrage Borlox PHP Tipps 2004 3 19.09.2004 20:23
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
datenbankabfrage mit $_get, dayofmonth phpmyadmin

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:11 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.