php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.04.2008, 21:47  
Benutzer
 
Registriert seit: 05.04.2008
Beiträge: 44
DJmension
DJmension eine Nachricht über ICQ schicken DJmension eine Nachricht über AIM schicken DJmension eine Nachricht über MSN schicken DJmension eine Nachricht über Yahoo! schicken
Standard Problem mit IF in while Schleife

PHP-Code:
$query  "SELECT * FROM goldie_s20 ORDER BY Jahr DESC, Monat DESC, Tag DESC, Stunde DESC, Minute DESC LIMIT $offset, $rowsPerPage";
$result mysql_query($query);
$anz mysql_num_rows($result); 
if(
$anz 0){ 
while(
$row mysql_fetch_assoc($result)) { 
$id $row['id'];
if(
$i%2==0) { $trcolor "#003333"; } else { $trcolor "#005555"; }
// ************************************************  Countdown part two Start
echo '<tr bgcolor="'.$trcolor.'">';

  
$sQuery "SELECT * FROM time_s20 WHERE gid = '".$id."'";  
  
$rAttackResult mysql_query($sQuery);
  
$eintr mysql_num_rows($rAttackResult);
  if (
$eintr 0) {
  while (
$aAttacks mysql_fetch_assoc($rAttackResult)) { 


if (
$aAttacks['userid'] == $iUserID AND $aAttacks['time']+(3600) >= time() )  
  { 
    
$iAttackable 1
    
$iAttackgif "Block.gif";  
    
$countb = ($aAttacks['time'] - time()) ;  
    
$count date("H:i:s"$countb);  
  } 
  
  else
  if (
$aAttacks['userid'] != $iUserID AND $aAttacks['timea']+(3600) >= time() )  
    { 
    
$iAttackable 2;
    
$iAttackgif "Block_d.gif";  
    
$countb = ($aAttacks['timea'] - time()) ;  
    
$count date("H:i:s"$countb); 
    }
  else
 { 
    
$iAttackgif "OK.gif"
    
$countb ""
    
$count ""
}

}}
else
 { 
    
$iAttackgif "OK.gif"
    
$countb ""
    
$count ""
}

echo 
'<td border="2" bordercolor="#007979" align="center"><font size="2">[img]../images/'.$iAttackgif.'[/img]'.$count.'</font></td>'
Das ist echt eigenartig. Wie ersichtlich will ich 3 Verschiedene gifs anzeigen lassen wenn verschiedene Fälle vorliegen.
Eigentlich ganz simpel , nur ist es so das von 50 Einträgen 40 Funktionieren , und 10 nicht.

Die Funktion ist folgende :
Wenn ein Eintrag der Datenbank geändert wurde soll für dem der den eintrag geändert hat Bild Block.gif für feste 12 Stunden angezeigt werden.
Für die Anderen soll Block_d.gif für eine andere Zeit angezeigt werden.
Und für Einträge die in den Letzten 12 Stunden nicht geändert wurden , oder die Zeiten abgelaufen sind soll OK.gif erscheinen.

Das alles Funktioniert eigentlich wunderbar , nur eben komischerweise bei manchen einträgen aber nicht , da wird trotz ändern des Datensatzes weiterhin das OK.gif angezeigt.
Alle Einträge die für die Anzeigen die benötigt werden , Wandern korreckt in die richtige Datenbank.

Warum funktionieren manche und warum manche nicht ???? Bin mege Ratlos, bitte um dringende Hilfe , ich sitze schon ewig an diesem Script , habe schon von manchen zu hören bekommen ich soll das alles neu machen , davor scheue ich mich aber ein wenig als Anfänger nöchmal Nächtelang mir den Kopf zerreissen , kann ich mir nicht mehr leisten , bin ja auch noch Berufstätig.

LG Andy
DJmension ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 17.04.2008, 22:16  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Gute Ratschläge sollte man befolgen. Wenn ich mir Deine ganzen offenen Posts ansehe, hat Dein System wohl noch nicht den besten Ansatz...
nikosch ist offline  
Alt 17.04.2008, 22:49  
Benutzer
 
Registriert seit: 05.04.2008
Beiträge: 44
DJmension
DJmension eine Nachricht über ICQ schicken DJmension eine Nachricht über AIM schicken DJmension eine Nachricht über MSN schicken DJmension eine Nachricht über Yahoo! schicken
Standard

Was bedeutet das im Klartext ?
Das ich wohl keine lösung bekommen kann ?

Es ist echt verzwickt , der eine sagt ich soll die Zeiten mit denen gerechnet wird in Datetime umändern , weil so kann ich MYSQL für mich rechnen lassen. Schön und gut , der andere sagt wieder es gibt doch nichts einfacheres mit Zahlen zu Rechnen lasse es in timestamps.

Ich bin inzwischen davon überzeugt das der fehler irgendwo anders liegen muss , warum sonnst ist es so das es Teilweise hinhaut und Funktioniert und eben Teilweise nicht.
Ändere ich einen Datensatz zu einem Späterem Zeitpunkt noch ein mal , dann gehts uhr Plötzlich. Ich begreif das nicht.
Eventuell Denk ich echt in die Falsche ecke oder ich bin ganz einfach Blind.
Es ist aber auch Teilweise so, das es verdammt schwierig ist zu erklären was ich da mache und was das soll. Ich denke schon fasst entweder ist es so das mann mich nicht Versteht, oder es gibt ganz schlicht keine andere Lösung als alles nochmal zu machen , von Vorn , um dann nach Monaten oder eventuell auch nach Wochen da zu stehen wo ich jetzt stehe. Hilflos und Ratlos.
LG Andy
DJmension ist offline  
Alt 18.04.2008, 05:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo, erstmal ist deine Datenbankstruktur wirklich ungeeignet. Benutz doch lieber DATETIME, dann kannst du auch damit rechnen. Bei solch verschachtelten if-else Konstrukten ziemt es sich Variablen einzufuehren und auch den Quellcode einzuruecken. Auch solltest du auch SQL-Abfragen in Schleifen verzichten.

PHP-Code:
<?php
while (..) {
  
$blnIsIUser = ($row["user_id"] == $iUserId);
  
$bln12HoursYoung = ($row["last_edit"] > strtotime("-12 hours"));
  
// debug:
  
var_dump($row["user_id"], $blnIsIUser$bln12HoursYoung);
  
// ..
}
?>
Ich denke wenn du die Bedingungen ($bln ..) auslagerst wirst du schon einen guten Schritt vorankommen.
Zergling-new ist offline  
Alt 18.04.2008, 09:12  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Woher sollen wir denn wissen, was in den Feldern ist, wenn du SELECT * FROM schreibst. Einzig an deinen an deine ORDER BY-Konstrukten kann man sehen, dass du den mehrfachen Rat, DATETIME-Typen zu benutzen immer noch nicht befolgt hast.
Dann wäre alles in einer Abfrage machbar, und die ganze restliche Rechnerei würde entfallen.
Und eine etwas bessere Strukturirung des Codes würde auch helfen
PS.
Mindestens mit dem von dir gezeigten Code funktionieren nicht 40 von 50 Fälle, sondern keiner!
__________________
Gruss
L
lazydog ist offline  
Alt 18.04.2008, 12:02  
Benutzer
 
Registriert seit: 05.04.2008
Beiträge: 44
DJmension
DJmension eine Nachricht über ICQ schicken DJmension eine Nachricht über AIM schicken DJmension eine Nachricht über MSN schicken DJmension eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
$sQuery "SELECT * FROM time_s20 WHERE gid = '".$id."'"
Im * enthallten ist "userid" , "eintagid" , "time" ( Zeitstempel +12 Stunden ), und "timea" ( Zeit nach der Lebensenergie ).

Zeit nach Lebensenergie wird so ermittelt.

PHP-Code:
     IF ( $Energie >= 15 ) { $timea $tim+(60*60); }
ELSE IF ( 
$Energie == 14 ) { $timea $tim+(66*60); }
ELSE IF ( 
$Energie == 13 ) { $timea $tim+(72*60); }
ELSE IF ( 
$Energie == 12 ) { $timea $tim+(78*60); }
ELSE IF ( 
$Energie == 11 ) { $timea $tim+(84*60); }
ELSE IF ( 
$Energie == 10 ) { $timea $tim+(90*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(96*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(102*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(108*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(114*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(120*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(126*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(132*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(138*60); }
ELSE IF ( 
$Energie == )  { $timea $tim+(144*60); } 
Sollte ein eintrag zu einem Zeitpunkt geändert werden an dem "timea" unter 1970 fällt.
PHP-Code:
IF ($timea time()) { $timea time(); } 
Die Einträge werden von jedem Bearbeitet , nach abgelaufener "timea" kann der nächste den eintrag ändern, was heiß kann , er darf und er soll,
Was dann bedeutet es gibt meherere user denen bei ein und dem selben Eintrag .
Block.gif angezeigt werden soll, bis deren 12 Stunden um sind.
Jetzt sagt mir bitte einer wie ich das mit nur einer Tabelle Bewerkstelligen soll.

Das Datum werde ich um ändern was ja eigentlich kein großer akt ist , nur damit zu rechnen , oder rechnen zu lassen , das kann mir bissher keiner Zeigen , in der MYSQL anleitung ist es für mich nicht erklärt wie ich das machen muß unter PHP.
DJmension ist offline  
Alt 18.04.2008, 13:41  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von DJmension
nur damit zu rechnen , oder rechnen zu lassen , das kann mir bissher keiner Zeigen , in der MYSQL anleitung ist es für mich nicht erklärt wie ich das machen muß unter PHP.
Das hat ja auch nichts mit PHP zu tun, die Berechnungen erfolgen in SQL. Einfach mal ein kleines Beispiel:
Code:
SELECT
	DATE_FORMAT(datum, '%d.%m.%Y'),
	DATE_FORMAT(DATE_ADD(datum, INTERVAL 2 HOUR), '%d.%m.%Y')
FROM
	tabelle
Das kannst du ja problemlos aus PHP aufrufen. Und auch wie du den eben wieder geposteten unendlichen IF-ELSE-Block vereinfachen kannst, habe ich dir längst geschrieben.
Ich weiss allerdings gar nicht, warum du hier immer wieder Fragen stellst, wenn du gegen die Antworten immun zu sein scheinst.
__________________
Gruss
L
lazydog ist offline  
Alt 18.04.2008, 21:27  
Benutzer
 
Registriert seit: 05.04.2008
Beiträge: 44
DJmension
DJmension eine Nachricht über ICQ schicken DJmension eine Nachricht über AIM schicken DJmension eine Nachricht über MSN schicken DJmension eine Nachricht über Yahoo! schicken
Standard

Ich bin ja garnicht gegen die Antworten , echt nicht. Ich bin mir offt nur nicht sicher ob ich richtig verstanden werde. Oder es ist einfach so das ich die Antworten einfach nicht verstehe. Ich bräuchte es hallt dann offt so das mir das was mir vorgeschlagen wird erklärt wird. Ist mir schon klar das das ein größerer Aufwand ist für die die mir helfen wollen. Ich weiß hallt nur offt nicht wie ich das was mir vorgeschlagen wird anwenden soll.
Das mit der Rechnerei ist mir jetzt klar , und erscheint auch logisch. Nur versteh ich nicht wie will die Seite dann unterscheiden wer einen eintrag geändert hat und vor allem wann. Ich hab angst das es dann so läuft das eine neue Änderung eine ältere komplett ersetzt.
PHP-Code:
SELECT 
   DATE_FORMAT
(datum'%d.%m.%Y'), 
   
DATE_FORMAT(DATE_ADD(datumINTERVAL 2 HOUR), '%d.%m.%Y'
FROM 
   tabelle 
und wenn ich das jetzt für eine datetime Spalte neme ??? sieht das dann so aus ?
PHP-Code:
SELECT 
   DATETIME_FORMAT
(datum'%H:%i:%s %d.%m.%Y'), 
   
DATE_FORMAT(DATE_ADD(datumINTERVAL 2 HOUR), '%H:%i:%s %d.%m.%Y'
FROM 
   goldie_s20 
Oh neeee ist ja wieder so das mir hier eine MYSQL anweisung vorgeschlagen wurde , also denke ich währe es so eventuell richtig.
PHP-Code:
$sql "SELECT 
   DATETIME_FORMAT(datum, '%H:%i:%s %d.%m.%Y'), 
   DATE_FORMAT(DATE_ADD(datum, INTERVAL 12 HOUR), '%H:%i:%s %d.%m.%Y') 
FROM 
   goldie_s20"

Das kann ich jertzt zum Beispiel her nemen um eine Feste Zeit berechnung zu machen also für die 12 Stunden die sind immer gleich .

Nur wie sage ich meiner Datenbank das sie den Eintrag unter Energie berücksichtigen soll für die Zeit in "timea" ?
Und vor allem worann soll die Datenbank merken wer den eintrag innerhalb der letzten 12 Stunden schon geändert hat ?

Oder ist das dann dieses hier ?
PHP-Code:
<?php 
while (..) { 
  
$blnIsIUser = ($row["user_id"] == $iUserId); 
  
$bln12HoursYoung = ($row["last_edit"] > strtotime("-12 hours")); 
  
// debug: 
  
var_dump($row["user_id"], $blnIsIUser$bln12HoursYoung); 
  
// .. 

?>
DJmension ist offline  
Alt 18.04.2008, 22:38  
Benutzer
 
Registriert seit: 05.04.2008
Beiträge: 44
DJmension
DJmension eine Nachricht über ICQ schicken DJmension eine Nachricht über AIM schicken DJmension eine Nachricht über MSN schicken DJmension eine Nachricht über Yahoo! schicken
Standard

Ich hab jetzt mal eine skitze gezeichnet und versuche mal so klar darzustellen was ich eigentlich möchte.


Ich möchte ganz von forn anfangen und möchte von den erfahrenen jetzt erstmal wissen , wieviele Tabellen brache ich zusätzlich zu der Tabelle die ohnehin besteht, in der die Daten enthallten sind, um deren änderungsfunktion es sich hier handelt.

Also bis jetzt hab ich das jetzt so , es wurde gesagt das nicht geglaubt wird das , dass was ich hier vortrage überhaupt funktionieren kann.

Wie ich sagte Teilweise geht es und Teilweise nicht.
Schaut selber nach wenn ihr wollt.

Forübergehend nicht zu ereichen !
zur Test DB

Zugang =
username : tester
Passwort : tester

Für die Ansicht dann ( anderer User )

username :tester2
Passwort : tester
DJmension ist offline  
Alt 21.04.2008, 09:07  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich galube nicht, dass du eine zusätzliche Tabelle brauchst. Du speicherst einfach das Datum der Änderung als DATETIME (dazu gibts die SQL-Funktion NOW()). Die Abfrage kennst du ja auch schon (auch wenn ich sie als INSERT gepostet habe):
Code:
SELECT
	DATE_ADD($datum, INTERVAL 12 HOUR time,
	DATE_ADD($datum, INTERVAL " . (1 + (1 / 10 * (15 - $Energie))) . " HOUR) timea
FROM
	time_s20
WHERE
	userid = $userid
Und wenn du etwas nicht verstehst, dann lies zuerst mal die Dokumentation, und wenn das immer noch nicht reicht, dann frag nach. Aber bring nicht dauernd wieder deinen alten Code.
__________________
Gruss
L
lazydog ist offline  
 


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
While schleife mit Datenbank in ein Dropdown Feld (Umlaut Problem) kintaro PHP Tipps 2008 6 28.08.2007 19:11
While schleife mit 2 Argumenten ? PHP Tipps 2006 5 09.03.2006 15:15
while Schleife gibt nicht alle Daten aus PHP Tipps 2006 2 12.01.2006 19:24
Problem mit while PHP Tipps 2007 2 23.11.2005 13:06
Feintuning einer While Schleife LA-Finest PHP Tipps 2007 2 14.11.2005 14:40
[Erledigt] While schleife in while schleife = nur ein datensatz?! PHP Tipps 2005-2 9 28.10.2005 12:48
Problem mit while und insert into PHP Tipps 2005-2 6 15.08.2005 19:29
while Schleife nur 5 mal durchlaufen lassen MatthiasNI PHP Tipps 2005-2 5 30.07.2005 11:21
While Schleife und Variablen Datenbanken 1 25.04.2005 08:57
while schleife beenden PHP Tipps 2005 3 29.03.2005 20:35
While Schleife mit einem Problem PHP Tipps 2005 16 12.01.2005 21:55
Problem mit ner schleife PHP Tipps 2004-2 3 24.11.2004 10:50
Problem mit links in Schleife web2 PHP Tipps 2004-2 2 23.11.2004 12:58
Zeilenumbrüche in while schleife? stefan-miti PHP Tipps 2004 1 05.10.2004 18:39
Array mit while Schleife auslesen PHP Tipps 2004 7 26.06.2004 19:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php schleife problem if, limitierung $anz = 2; if($von == \\) { $von = 0; } if($akt == \\) // { $akt = 0; }, php while schleife if, php if in while schleife, if in while schleife php, while schleife if else problem

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:20 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.