php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-10-2014, 20:59
Hyperxxx
 Registrierter Benutzer
Links : Onlinestatus : Hyperxxx ist offline
Registriert seit: Oct 2014
Beiträge: 3
Hyperxxx befindet sich auf einem aufstrebenden Ast
Standard Hilfe, Benötige Schleife in Schleife -> 2 Schleife funktioniert nicht

Hallo,

habe eine php Datei, die mir eine Excel liste zum Download gibt.
Darin werden die diesjährigen Events(Datenbank1) und Mitgliederteilnahmeliste(Datenbank2) ausgeben, und angezeigt wer dabei ist und wer nicht.

Bei der untersten Schleife wird mir nur die Teilnahme für ein Event ausgeben, statt für alle. Was mache ich mit dieser schleife Falsch?

In der Datenbank der Mitglied-teilnahme gibt es eine Spalte mit der Event ID(Wegen der Zuordnung)

Komme nicht weiter, habe google bereits leergesucht.
Danke im voraus!

Kein W3C-Validator -> Wird von Excel ausgelesen

PHP-Code:
$mysqli = new mysqli($dbhost,$dbuser,$dbpass, $dbname);
if (mysqli_connect_errno()) { printf("Keine Verbindung zur Datenbank!: %s\n", mysqli_connect_error()); exit(); }
if (!$mysqli->set_charset("utf8")) { echo "Fehler beim Laden von UTF8 ". $mysqli->error; }

$query_active = "SELECT 
                    * 
                FROM 
                  `events` 
                WHERE (month > $current_month 
                  AND year >= $current_year  
                  OR day >= $current_day)
                  AND (month = $current_month 
                  AND year >= $current_year  
                  OR year > $current_year)  
                  OR (month_show > $current_month 
                  AND year_show >= $current_year 
                  OR (day_show >= $current_day) 
                  AND month_show = $current_month 
                  AND year_show >= $current_year 
                  OR year_show > $current_year) 
                ORDER BY year, month, day";  

$query_all = "SELECT * FROM events ORDER BY year, month, day ASC";

if ($status == "active") { 
    $result = $mysqli->query($query_active) or die($mysqli->error.__LINE__); 

else if ($status=="all") { 
        $result = $mysqli->query($query_all) or die($mysqli->error.__LINE__); 
}
else { 
    $result = $mysqli->query($query_all) or die($mysqli->error.__LINE__); echo "Error! -» NEWS"; 
}

$result_useraktiv = $mysqli->query("SELECT * FROM Useraktiv") or die($mysqli->error.__LINE__);
?> 
 <tr class=xl671108 height=89 style='mso-height-source:userset;height:66.75pt'>
  <td height=89 class=xl691108 width=48 style='height:66.75pt;width:36pt'>ID</td>
  <td class=xl691108 width=157 style='width:118pt'>Mitglied</td>
<?php
$headerevent 
"";
$headeruser "";
$status "";
$usereintragfertig "";

if(
$result_useraktiv->num_rows 0) {
    
$felder $mysqli->field_count;
    
$mitglieder 2// Startposition Usereinträge WHERE event IN (".join(',',$id).")

    
while ($mitglieder $felder) {
            
$finfo $result_useraktiv->fetch_field_direct($mitglieder++);
            
$user $finfo->name// Usernamen Array
    
            
$headeruser .= "<tr class=xl711108 height=35 style='mso-height-source:userset;height:26.25pt'><td height=35 class=xl721108 width=48 style='height:26.25pt;width:36pt'>"
            
.$mitglieder."</td><td class=xl721108 width=157 style='width:118pt'>".$user."</td>";
    
            while (
$row $result->fetch_assoc()) {
                
$event stripslashes($row["event"]);
                
$headerevent .= "<td class=xl661108 width=96 style='width:72pt'>".$event."</td>";
            
                
$id $row['id'];
            
                
$result_user $mysqli->query("SELECT * FROM Useraktiv WHERE event = '$id'") or die($mysqli->error.__LINE__);
            
                    while (
$usereintrag $result_user->fetch_assoc()) { // Usereinträge
                        
if ($usereintrag[$user] == "0"
                        { 
                            
$headeruser .= "<td class=xl701108 width=96 style='width:72pt'>x</td>";  // Usereinträge
                        
}
                        elseif (
$usereintrag[$user] == "1"
                        { 
                            
$headeruser .= "<td class=xl701108 width=96 style='width:72pt'>+</td>"
                        }
                        elseif (
$usereintrag[$user] == ""
                        { 
                            
$headeruser .= "<td class=xl701108 width=96 style='width:72pt'>n/a</td>"
                        }
                }
        }
}

Geändert von Hyperxxx (23-10-2014 um 23:18 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 23-10-2014, 21:37
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Bitte formatier deinen Code so, dass man ihn lesen kann. Also nicht alles in einer Zeile.

Danke
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 23-10-2014, 21:43
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Nachtrag:
Deine Bedingungen sind mit Sicherheit nicht sauber gekapselt. Da fehlen imho ein paar Klammern. Ein Schuss ins Blaue:
PHP-Code:
$query_active "SELECT 
                  * 
                FROM 
                  `events` 
                WHERE (month > $current_month 
                  AND year >= $current_year  
                  OR day >= $current_day)
                  AND (month = $current_month 
                  AND year >= $current_year  
                  OR year > $current_year)  
                  OR (month_show > $current_month 
                  AND year_show >= $current_year 
                  OR (day_show >= $current_day) 
                  AND month_show = $current_month 
                  AND year_show >= $current_year 
                  OR year_show > $current_year) 
                ORDER BY year, month, day"

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #4 (permalink)  
Alt 23-10-2014, 21:45
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Du solltest Datenbankabfragen nicht mit der HTML-Ausgabe vermischen.

Du solltest kein SELECT * verwenden, sondern _immer_ die Spalten im SELECT angeben, die du im Ergebnis erwartest.

Du solltest keinen kaputten HTML-Code ausgeben (W3C-Validator).

Du solltest nicht sinnlos die Funktion stripslashes() verwenden.

Du solltest in Schleifen keine Datenbankabfragen ausführen.

Und du solltest den Code so formatieren, dass man ihn auch vernünftig lesen kann.

Bitte erstmal all diese Bedingungen erfüllen, ansonsten ist es sowieso sinnlos mit diesem Code zu arbeiten.
Mit Zitat antworten
  #5 (permalink)  
Alt 25-10-2014, 00:17
little
 Registrierter Benutzer
Links : Onlinestatus : little ist offline
Registriert seit: May 2012
Beiträge: 3
little befindet sich auf einem aufstrebenden Ast
Standard

Ich habe selten so schlechten Code gesehen. Die Datenbankstruktur ist "gelinde" gesagt "bescheiden".
Code:
$query_active = '
-- this is an SQL comment, hence you can test the code as a PHP script and
-- it will work, but you should remove these comments after copy + paste
-- or you\'ll send large queries to your DB server, which in turn just
-- ignores all these comments
SELECT
    * -- despite some other recommendations, this is just fine, absolutely ok
      -- but it has to be admitted, that you should do that only, and only if
      --> you don\'t have tables with like 300 columns, because
      --> you didn\'t miss that class about data base normalization and
      --> you still remember the importance of effective indexing and hence
      --> you know what you are doing
FROM
  `events` -- you could also use "ANSI quotes", but your mySQL server needs to
           -- be properly configured to accept them as "events"
           -- and you should use quotes always, yes, a l w a y s & everywhere
           -- because quotes help you to find stupid mistakes early and
           -- you can use column names like `SELECT`, `BETWEEN` and "DATE"
WHERE
    -- `eventStart`>"' . date('Y-m-d H:i:S', $now) . '" -- worth trying :-)
    -- you could state that as > NOW(), but then the function NOW() gets called
    -- on every row to match because it is a non deterministic function
    -- `eventStart`>NOW() -- looks nice but it is a really bad idea!!!
    -- or you could write > FROM_UNIXTIME(\'.$mytimestamp.\'), which is a
    -- deterministic function and the result could be cached
    -- and yes, you should have a datetime or timestamp column for easy access
    -- or if you insist on using suboptimal queries, then go ahead and ask for
    (
       `year`>' . (int) $current_year . ' -- any event in a future year
        OR (
            `year`=' . (int) $current_year . ' -- any event this year
            AND (
                `month`>' . (int) $current_month . '  -- but a future month
                OR (
                    `month`=' . (int) $current_month . ' -- or this month
                    AND
                    `day`>=' . (int) $current_day . ' -- but a day we will see
                )
            )
        )
    ) OR (
       `year_show`>' . (int) $current_year . ' -- same for the other fields
        OR (
            `year_show`=' . (int) $current_year . '
            AND (
                `month_show`>' . (int) $current_month . '
                OR (
                    `month_show`=' . (int) $current_month . '
                    AND
                    `day_show`>=' . (int) $current_day . '
                )
            )
        )
    )
    -- timestamps provide access to past, present and future in just one go :-)
    -- and the queries you write are much easier to compose and to read and
    -- to understand (do your future self a favour and help make it readable)
ORDER BY
      `year` ASC -- default sort order anyway, but this shall remind you of it
    , `month` ASC
    , `day` ASC
;
';
und dann das
Code:
$result = $mysqli->query( ... );
nur wird das Ergebnis dieser Datenbankabfrage NICHT genutzt. NICHT. Zumindest nicht in dem von Dir mitgesandten Auszug aus Deinem Quelltext.

Gruß

RB
Mit Zitat antworten
  #6 (permalink)  
Alt 26-10-2014, 20:39
Hyperxxx
 Registrierter Benutzer
Links : Onlinestatus : Hyperxxx ist offline
Registriert seit: Oct 2014
Beiträge: 3
Hyperxxx befindet sich auf einem aufstrebenden Ast
Standard

.....ich bin leider noch ein bisschen im Anfangsstadium, ich mach dies auch nicht beruflich etc. sondern bring mir php selbst bei. Ich werde den code dennoch schrittweise verbessern, und auch mehr ins object orientierte gehen.

der Code funktioniert es wird auch für einen user die Teilnahme ausgeben nur fehlt mir da noch die schleife die für die restlichen user alles angibt.

ich kann keinen Spaltennamen angeben da die Spaltennamen mit den usernamen(in der Teilnahme Datenbank) erstellt werden.(Beim anlegen von usern)


Code:
 $result_user = $mysqli->query("SELECT * FROM Useraktiv WHERE event = '$id'") or die($mysqli->error.__LINE__);
            
                    while ($usereintrag = $result_user->fetch_assoc()) { // Usereinträge
                        if ($usereintrag[$user] == "0") 
                        { 
                            $headeruser .= "<td class=xl701108 width=96 style='width:72pt'>x</td>";  // Usereinträge
                        }
                        elseif ($usereintrag[$user] == "1") 
                        { 
                            $headeruser .= "<td class=xl701108 width=96 style='width:72pt'>+</td>"; 
                        }
                        elseif ($usereintrag[$user] == "") 
                        { 
                            $headeruser .= "<td class=xl701108 width=96 style='width:72pt'>n/a</td>"; 
                        }
Mit Zitat antworten
  #7 (permalink)  
Alt 26-10-2014, 20:57
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Hyperxxx Beitrag anzeigen
ich kann keinen Spaltennamen angeben da die Spaltennamen mit den usernamen(in der Teilnahme Datenbank) erstellt werden.(Beim anlegen von usern)
Dann ist dein Datenbank-Design kaputt. Die Spalten sollten sich zur Laufzeit nicht verändern.

Stichwort: Datenbanknormalisierung

Ein Programmierer muss immer wissen, welche Spalten es gibt.
Mit Zitat antworten
  #8 (permalink)  
Alt 26-10-2014, 21:34
Hyperxxx
 Registrierter Benutzer
Links : Onlinestatus : Hyperxxx ist offline
Registriert seit: Oct 2014
Beiträge: 3
Hyperxxx befindet sich auf einem aufstrebenden Ast
Standard

Danke für den hinweis, fand nur keine andere Lösung.

wie erstelle ich dann am besten eine Tabelle wie folgt:
User kommen durch erstellen hinzu, das selbe mit den Events.

user = mitglied (werden nie die 100stk überschreiten)

| | user1 | user2 | user3 |
event1 | x | O | x |
event2 | O | O | O |
event3 | x | x | x |
Mit Zitat antworten
  #9 (permalink)  
Alt 26-10-2014, 21:47
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

user_id, event_id
1, 1
3, 1
1, 3
2, 3
3, 3
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mysqli, php while in while


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
If schleife funktioniert nicht phpdblernen Archiv / Trash 2 12-09-2014 20:40
Variable aus foreach-Schleife außerhalb der Schleife nicht verwendbar Tiafe PHP Developer Forum 4 30-06-2009 15:42
If-Schleife UND dazugehörige else-Schleife wird ausgeführt?? Tarik PHP Developer Forum 2 09-02-2008 01:21
for schleife in While schleife andygyr PHP Developer Forum 3 15-07-2007 16:11
Schleife in Schleife verweigert den Dienst! Benny-one PHP Developer Forum 21 28-03-2003 22:33

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:06 Uhr.