Beiträge von The Scout
-
-
Ich habs gelöst! Das Problem war wirklich, dass das Zeilenende nicht richtig erkannt wurde.
Gelöst durch die eine Zeile ini_set("auto_detect_line_endings", true); ganz am Anfang der nl-activate.phpJetzt noch eine andere Frage: Wie kann ich diese bestimmte, zuletzt eingelesene Zeile aus der .txt löschen?
-
Der wurde nur anders genannt, dein Rang ist "Schüler", sieht man an dem einen Stern. Nur steht dann halt neben den Beiträgen nicht "Schüler", sondern "Kennt sich schon ein bisschen aus", klingt halt netter.
-
Einfach mal durchge-echot:
Der Link: /nl-activate.php?mail=email@beispiel.de&id=341203140011PHPwhile(!feof($handle)){ $line = fgets($handle); list($mail,$prename,$name,$gender,$checknum) = explode("|",$line); echo $email . ", " . $mail . "<br />"; echo $prename . "<br />"; echo $name . "<br />"; echo $gender . "<br />"; echo $id . ", " . $checknum . "<br />"; }
Das nl-candidates.txt:Codeemail@example.com|Fritz||m|081202145911| mail@test.net|Max|Mustermann||021203140011| email@beispiel.de|||m|341203140011|
Die Ausgabe:Und Ende. Er liest aus der Datei und dem Link also alles richtig aus und schreibt es in die korrekten Variablen, aber nur einmal. Das while sieht nach der ersten Zeile das Ende vom file???
Vielleicht noch interessant dafür: Die Zeilenumbrüche in der nl-candidates.txt generiere ich mit \r\n -
http://www.html-seminar.de/html-css-php-forum/index.php?page=Help&item=user.ranks
Wer lesen kann ist klar im Vorteil: Unten links auf dieser Seite, mit dem schönen blauen Fragezeichen daneben: "Hilfe" -> "Benutzerkonto (Profil)", damit sind die -> "Benutzerränge" schließlich verknüpft.
Fühle dich klein und unwissend xP
-
Ich hab es mal mit && probiert.
Link: /nl-activate.php?mail=email@beispiel.de&id=341203140011nl-candidates.txt
Codeemail@example.com|Fritz||m|081202145911| mail@test.net|Max|Mustermann||021203140011| email@beispiel.de|||m|341203140011|
nl-activate.php
PHP
Alles anzeigen<?php $handle = fopen ("nl-candidates.txt", "r"); $email = $_GET['mail']; $id = $_GET['id']; $mail = ""; while(!feof($handle) && $email!=$mail){ //Mit && stoppt er immer, falls Übergebenes nicht in erster Zeile von .txt $line = fgets($handle); //Ich denke, hier liegt der Fehler falls nicht && sondern || oben list($mail,$prename,$name,$gender,$checknum) = explode("|",$line); } fclose($handle); //. . .
Ich habs jetzt nochmal mit logischem Und probiert. Heißt der Link ?mail=email@example.com&id=081202145911 geht es einwandfrei. Nehme ich obigen Link ist es zwar keine Endlosschleife mehr, allerdings kommt auch bei richtiger ID eine Fehlermeldung. ($mail habe ich nur leer gesetzt um diese blöde Notice loszuwerden).Meine Vermutung ist immer noch, dass der Code bei fgets(); mit dem Cursor nicht in die neue Zeile springt, woraufhin diese beim nächsten Durchgang eingelesen werden würde, sondern am Ende der aktuellen Zeile stehen bleibt, woraufhin diese Zeile vom Ende beginnend neu eingelesen werden würde.
Also, über Logikoperatoren will ich nicht mehr diskutieren, die verwirren mich auch immer wieder :P, aber mein eigentliches Problem wurde trotzdem noch nicht gelöst
-
OR:
am anfang - beide "true" -> "while" läuft
mail gefunden - zweite bed. "false", insg. wegen OR "false" -> "while" stoppt
am ende der datei - erste. Bed. "false", insg. wegen OR "false" -> "while" stopptIch könnte genau so gut auch ein XOR einbauen, aber der Logikoperator ist nachgewiesenerweise richtig, denn die Schleife an sich erkennt zumindest bei einer Zeile korrekt, dass man die Mail hat. Der Fehler liegt eher bei der Variablen $line, aber ich weiß nicht genau wo!
Also,
- OR ist getesteter Weise der korrekte Operator, lassen wir also sinnlose Diskussionen
- der Fehler liegt vermutlich bei $line
- ist vermutlich das Auslesen der nächsten Zeile, dass er bei while nicht die nächste Zeile nimmt, sondern vom Ende der aktuellen ausgeht, das könnte auch den fehler auslösen, meiner Meinung nach.
- Frage: Ist das richtig, und wenn ja, wie stelle ich sicher, dass das Script beim Auslesen in die nächste Zeile springt? -
Aber sobald er am Ende der Datei ist müsste die Schleife doch eigentlich aufhören, weil dann !feof() = false => Abbruch.
Und damit er wegen $emai l!= $mail = true nicht weiter macht ist doch ein OR dazwischen.Damit die while-Schleife aufhört, reicht es bei OR schließlich, wenn eine Bedingung falsch ist.
-
Servus an alle,
ich wollte für eine Seite ein PHP-Script schreiben, dass eine Newsletter-Anmeldung ermöglicht. Als Vorlage diente das Script vom PHP-Kurs, welches ich ein wenig veränderte.
Das Mail erstellen und in bewerber.txt schreiben klappt schon ohne Probleme. Dabei hier mal ein paar Beispiele eines Eintrags in bewerber.txtIn die Mail wird der Link folgendermaßen gestellt: ..../includes.php?mail=mail@example.com&id=7654321
//Mail(Pflicht)|Vorname|Nachname|Geschlecht|Kennnummer|
email@beispiel.de|Max|Mustermann|m|1234567|
mail@example.com||Schuster||7654321|
test@email.de|Martina||w|1234321|So werden die Einträge reingeschrieben, ohne Kommentarzeile. Diese sollen jetzt mit dem Script eingelesen und geprüft werden:
PHP
Alles anzeigen<?php $handle = fopen ("bewerber.txt", "r"); $email = $_GET['mail']; //Mailadresse auslesen $id = $_GET['id']; //Kennnummer auslesen while(!feof($handle) OR $email != $mail){ //Solange das Ende oder die gesuchte Mail nicht erreicht ist $line = fgets($handle); //lese die aktuelle (also immer die nächste) Zeile ein list($mail,$prename,$name,$gender,$checknum) = explode("|",$line); //und schlüssele sie auf die Variablen auf } fclose($handle); if($id == $checknum){ $handle = fopen("nl-bestaetigt.txt","w"); fwrite($handle,$mail); fwrite($handle,"|"); fwrite($handle,$prename); fwrite($handle,"|"); fwrite($handle,$name); fwrite($handle,"|"); fwrite($handle,$gender); fwrite($handle,"|"); fwrite($handle,$checknum); fwrite($handle,"|\r"); fclose($handle); ?>HTML-Anzeige bei Erfolg <?php }else{ ?>HTML-Anzeige bei Fehler <?php } ?>
Eigentlich sollte die Schleife doch eine Zeile nach der anderen auf die Variablen aufschlüsseln, bis die richtige Mail kommt. Wenn die erste Zeile die gesuchte ist, geht das auch, aber wenn man die mittlere anwählt, geht das Programm auf Dauerschleife und gibt
Notice: Undefined offset: 4 in C:\xampp\htdocs\Website\includes\nl-activate.php on line 8
solange aus, bis sich der Browser aufhängt.Was muss ich ändern???
-
Stimmt, mit BG funktionierts. Danke für die schnelle Antwort!
-
Hallo an alle,
ich hätte ein Problem, dass eine Lösung braucht: Ich habe für eine Website, an der ich bastele mit CSS ein DropdownMenu erstellt (nach Vorlage) und gestylt (allein), bin dabei aber an eine für mich bisher unlösbare Aufgabe gestoßen. Hier der CSS CodeCSS
Alles anzeigennav{ position: absolute; width: 80%; } nav ul{ box-shadow: 0px 5px 7px #FBD800; } .dropdown,ul.dropdown li,ul.dropdown ul{ list-style: none; margin: 0; padding: 0; } ul.dropdown{ position: relative; top: -24px; z-index: 2; float: left; } ul.dropdown li{ float: left; min-height: 1px; line-height: 1.3em; vertical-align: middle; height: 24px; width: 160px; background: #808080; opacity: 0.7; } ul.dropdown li:hover{ position: relative; z-index: 4; cursor: pointer; opacity: 1; } ul.dropdown ul{ visibility: hidden; position: absolute; top: 100%; left: 0; z-index: 3; width: 100%; } ul.dropdown ul li{ float: none; } ul.dropdown ul ul{ top: 1px; left: 99%; } ul.dropdown li:hover>ul{ visibility: visible; } ul.dropdown a{ display: block; color: #fbd800; width: 150px; padding: 4px; text-transform: uppercase; text-align: center; text-decoration: none; font-weight: bold; font-size: 16px; } ul.dropdown a:hover,ul.dropdown a:active{ text-decoration: none; }
Dieser wird auf folgenden HTML-Code angewendet:HTML
Alles anzeigen<ul id="nav" class="dropdown"> <li><a href="#">Home</a> <ul> <li><a href="#">Lorem</a></li> <li><a href="#">ipsum</a></li> </ul> </li> <li><a href="#">dolor</a> <ul> <li><a href="#">sit amet</a></li> <li><a href="#">consectetur</a></li> <li><a href="#">adipiscing</a></li> <li><a href="#">elit</a></li> </ul> </li> <li><a href="#">In quam</a> <ul> <li><a href="#">enim</a></li> <li><a href="#">iaculis</a></li> <li><a href="#">vel porta nec</a></li> </ul> </li> <li><a href="#">sollicitudin</a></li> <li><a href="#">sit amet leo</a></li> </ul>
Im Grunde ergibt das ein horizontales DropdownMenu mit durchscheinendem grauem Hintergrund, der bei hovern voll sichtbar wird. (Positionsangaben sorgen für den richtigen Platz in der Website). Mein Problem ist, dass die Links selbst bei dieser Lösung normal ebenfalls durchscheinend sind, was für schlechte Lesbarkeit sorgt, schließlich klappt das Menu auch über Text auf. Nun hätte ich gerne Hilfe bekommen, die beschreibt, wie man die Links dauerhaft auf opacity: 1; hält. Ich hab schon versucht, das einfach bei a{...} einzufügen, klappt aber nicht.
-
Hi @ll,
Ich habe mich schon seit einiger Zeit mit HTML und xHTML beschäftigt, nun ist mir ein kleiner Fehler aufgefallen:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>HTML-Tutorial von <!-- w --><a class="postlink" href="http://www.html-seminar.de">http://www.html-seminar.de</a><!-- w --></title>
</head><body>
</body>
</html>Ich denke, da gehört en hin, schließlich zeigt es die Sorache an, in der die xHTML-TAGs definiert werden, oder täusche ich mich da?
MfG, SCOUT