[MOD: Thema geschlossen aufgrund von Crossposting]
Beiträge von Arne Drews
-
-
Die index.php ist i.d.R. immer der erste Einstiegspunkt.
Wenn alle Anfragen über diese Datei laufen, muss halt das session_start() nur dort ganz am Anfang definiert werden.
Wenn ihr allerdings einen direkten Link auf eine andere PHP-Datei macht, wie bspw. https://example.com/irgendeineseite.php, muss auch darin das session_start() an den Anfang! -
Hallo,
Der Ablauf zuerst zu prüfen, ob die Eingaben nicht leer sind und für den Fall dann auf die Werte zu prüfen ist überflüssig.
Die Prüfung auf die exakten Werte enthält im Logikprozess automatisch die Abfrage auf leer, weil schematisch betrachtet <leer> != Anna ist.Um Passwörter zu handeln sollte man heutzutage password_hash() und password_verify() verwenden.
Im Formular kann das action-Attribut einfach weggelassen werden, wenn es eh auf sich selbst zeigt.
Das session_start() muss bei jedem Seitenaufruf als erstes kommen.
Entweder ihr habt das clever aufgebaut und es gibt nur eine index.php o.ä., die sich um den Rest kümmert, dann gehört session_start() dort an den Anfang des Scriptes oder ihr habt verschiedene PHP-Dateien, die direkt angefordert werden, dann gehört session_start() in jede dieser Dateien ganz an den Anfang.
Wenn man sich daran nicht hält bekommt man i.d.R. einen Klassiker-Fehler: http://www.php-rocks.de/thema/65-canno…ready-sent.htmlSessions basieren auf Cookies, von daher sehe ich keinen Grund noch weitere Cookies selbst zu setzen...
Gruß Arne
-
-
-
-
Das ist kein WordPress-Vorteil, sondern BestPractice. Nennt sich Normalisierung.
Anhand des Bezeichners campaign_id kann keiner darauf schliessen, dass das ein varchar ist.btw. ist genial in Bezug auf WordPress zu verwenden i.d.R. ein Grundlagenfehler...
-
Also rein zum loggen/auswerten ist das, was Du da hast imho vollkommen ausreichend.
Die Frage ist, wo die 170 MB herkommen. Wie viele Datensätze hast Du denn bereits?
Vielleicht sollte man ein regelmässiges Backup machen und Datensätze älter wie X Tage/Wochen/Monate entfernen. -
Hallo,
Grundsätzlich ist es die richtige Vorgehensweise, pro Besucher einen Datensatz zu generieren.
Auswerten kannst Du über das Datumsfeld problemlos, sofern Du dort einen vernünftigen Datentyp wie etwa DATETIME verwendest.Gruß Arne
-
Dann habt ihr jetzt aber wieder die Leerzeichen vor und nach dem AND weggelassen, die sind bei mir in #14 drin.
Ohne Leerzeichen versagt die Query und liefert kein gültiges Resultat. Genau das meckert er an.Bitte diese Zeile exakt übernehmen:
Wenn dann immer noch was schief geht, wäre noch zu klären, ob die Spaltenbezeichnungen geschlecht, vorname, nachname und gebdatum überhaupt korrekt sind?
ZitatSchade, eine OR-Verknüpfung wäre so schön einfach gewesen.
AND ist genauso einfach, wenn man es richtig macht und liefert zudem sogar noch die richtigen Ergebnisse...

-
Mit Or verknüpft kann ja jede Kombination gültig sein. Die ausgefüllten Felder müssen schon AND verknüpft sein.
Wie sieht denn $sql jetzt aus, poste das nochmal? -
-
War auch mein erster Gedanke mit den "normalen" Seiten..

-
Das deutet darauf hin, dass die Abfrage zuvor kein Ergebnis liefert.
So wie es für mich ausssieht, habt ihr das Leerzeichen hinter dem WHERE vergessen, da muss eins hin, weil ansonsten die Query fehl schlägt:
Sollte der Fehler damit nicht behoben sein, bitte mal nach der Zeile $sql ausgeben lassen und die Ausgabe posten. -
-
Das würde bedeuten, dass er die PHP Funktion empty nicht kennt, was ich mir nicht vorstellen kann. Kannst Du bitte nochmal den aktuellen Stand posten? Braucht auch nur der erste PHP-Block bis $sql sein.
Achso, welche PHP-Version habt ihr?
findet ihr raus, indem ihr folgendes im PHP-Block einsetzt: -
-
Hallo,
Der einzige Fehler ist der erste, der Rest sind Folgefehler.
Zeig bitte mal euer aktuelles Script, ich vermute, ihr habt $POST verwendet, anstatt $_POST -
Hallo,
Ihr solltet unabhängig davon das Formular per POST senden lassen
HTML
Alles anzeigen<form method="post"> <label>Vorname eingeben</label><br> <input name="vorname" type="text"><br> <label>Nachname eingeben</label><br> <input name="nachname" type="text"><br> <label>Geschlecht wählen</label><br> <select name="geschlecht" class="form-control"> <option>w</option> <option>m</option> </select><br> <label>Geburtsdatum angeben</label><br> <input name="gebdatum" type="text"><br> <button type="submit" name="suchen" class="btn btn-default">Suchen</button> </form>Dann müsst ihr einfach nur die empfangenen Daten "filtern", ob diese leer sind, als Beispiel:
PHP
Alles anzeigen// wenn das formular abgesendet wurde if ( isset($_POST['suchen']) ) { // relevante Felder $aFields = [ 'geschlecht' => trim($_POST['geschlecht']), 'vorname' => trim($_POST['vorname']), 'nachname' => trim($_POST['nachname']), 'gebdatum' => trim($_POST['gebdatum']) ]; // nur befüllte felder filtern $aFields_Filtered = array_filter( 'empty', $aFields ); // where bedingungen zusammenfügen $sWhere = ''; foreach ( $aFields_Filtered as $key=>$value ) $sWhere .= $key . "='" . $value . "'"; $sql = "SELECT * FROM person WHERE " . $sWhere; $ergebnis = mysqli_query($db, $sql); // rest des codes (unverändert) echo "<table border = '1' style = 'border-spacing: 0;'>\n"; echo "<tr><th>ID</th><th>Geschlecht</th><th>Titel</th><th>Vorname</th><th>Nachname</th><th>Geburtsdatum</th><th>Geburtsname</th><th>Geburtsort</th><th>Beruf</th><th>Sterbedatum</th><th>Sterbeort</th><th>Notitzen</th></tr>"; while ($row = mysqli_fetch_assoc($ergebnis)) { echo "<tr>"; foreach ($row as $key => $value) { echo "<td> $value </td>\n"; } echo "<tr>"; } echo "</table>\n"; }ungetestet, sollte aber in etwa hinhauen...
-
Zitat
schön wäre es wenn mit dem klick auf dem download button die datei heruntergeladen wird und gleichzeitig der log protokolliert wird.
Genau das macht er auch...