Webseite, Funktioniert -> Lokal, auf blaced aber nicht beim eigenen Webspace?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Es ist das suchen feld, und bei den echos wird das angezeigt was ich suche. Hier mal die kompletten Codes

    Modell.class.php // ist das CRUD
    Code:
    <?php
    namespace mydb\App\classes\user_mvc_class;
    use mydb\App\classes\abstractClasses\AbstractCrud;
    use PDO;
    use PDOException;
    class Model extends AbstractCrud {
        //private $conn;
        protected $rows;
        protected $datetime=null;
        protected $first_name=null;
        protected $last_name=null;
        protected $corridor=null;
        protected $room=null;
        protected $bed=null;
        protected $proven=null;
        protected $ID=null;
        protected $list_sql="select * from users";
        protected $param=[];
        protected $info = "";
        protected $save_update="save";
        protected $action="none";
    
        //function __construct(){
          //  $this->conn(); //nicht notwendig, da die Verbindung über den Methodaufruf conn() erfolgt!
        //}
    
        protected function get_rows(){
            $this->list_sql = "SELECT * FROM users ORDER BY datetime DESC"; // Fügt die ORDER BY Klausel hinzu
            $stmt = $this->conn()->prepare($this->list_sql);
            $stmt->execute($this->param);
            $this->rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
    
        protected function save(){
            // Überprüfen, ob die anderen Felder leer sind
            if($_POST['first_name']=="" || $_POST['last_name']=="" || $_POST['corridor']=="" || $_POST['room']=="" || $_POST['bed']=="") {
                $this->info = "Füllen Sie bitte alle Felder aus!";
                return;
            }  
    
            // Überprüfen, ob ein Eintrag bereits vorhanden ist
            $checkSql = "SELECT * FROM users WHERE first_name = :first_name AND last_name = :last_name AND corridor = :corridor AND room = :room AND bed = :bed";
            $checkStmt = $this->conn()->prepare($checkSql);
            $checkStmt->execute([
                ':first_name' => $_POST['first_name'],
                ':last_name' => $_POST['last_name'],
                ':corridor' => $_POST['corridor'],
                ':room' => $_POST['room'],
                ':bed' => $_POST['bed']
            ]);
    
            $provenValue = isset($_POST['proven']) ? 1 : 0;  // Wert von proven basierend auf Checkbox-Status
    
            if ($checkStmt->rowCount() > 0) {
                // Wenn ein Eintrag gefunden wird, dann prüfen Sie, ob proven bereits aktiviert ist
                $existingEntry = $checkStmt->fetch(PDO::FETCH_ASSOC);
    
                // Wenn proven nicht aktiviert ist, dann aktualisieren Sie es
                if ($existingEntry['proven'] != 1) {
                    $updateSql = "UPDATE users SET proven = :proven, datetime = NOW() WHERE first_name = :first_name AND last_name = :last_name AND corridor = :corridor AND room = :room AND bed = :bed";
                    $updateStmt = $this->conn()->prepare($updateSql);
                    $updateStmt->execute([
                        ':proven' => $provenValue,
                        ':first_name' => $_POST['first_name'],
                        ':last_name' => $_POST['last_name'],
                        ':corridor' => $_POST['corridor'],
                        ':room' => $_POST['room'],
                        ':bed' => $_POST['bed']
                    ]);
    
                    if ($updateStmt->rowCount() > 0) {
                        $this->info = "Eintrag aktualisiert!";
                    } else {
                        $this->info = "Fehler beim Aktualisieren!";
                    }
                } else {
                    // Nur andere Felder aktualisieren, nicht proven
                    $updateSql = "UPDATE users SET datetime = NOW() WHERE first_name = :first_name AND last_name = :last_name AND corridor = :corridor AND room = :room AND bed = :bed";
                    $updateStmt = $this->conn()->prepare($updateSql);
                    $updateStmt->execute([
                        ':first_name' => $_POST['first_name'],
                        ':last_name' => $_POST['last_name'],
                        ':corridor' => $_POST['corridor'],
                        ':room' => $_POST['room'],
                        ':bed' => $_POST['bed']
                    ]);
    
                    if ($updateStmt->rowCount() > 0) {
                        $this->info = "Eintrag aktualisiert, proven wurde nicht geändert!";
                    } else {
                        $this->info = "Fehler beim Aktualisieren!";
                    }
                }
            } else {
                // Neuen Eintrag hinzufügen
                $sql = "INSERT INTO users (datetime, first_name, last_name, corridor, room, bed, proven) VALUES (NOW(), :first_name, :last_name, :corridor, :room, :bed, :proven)";
                $stmt = $this->conn()->prepare($sql);
                $stmt->execute([
                    ':first_name' => $_POST['first_name'],
                    ':last_name' => $_POST['last_name'],
                    ':corridor' => $_POST['corridor'],
                    ':room' => $_POST['room'],
                    ':bed' => $_POST['bed'],
                    ':proven' => $provenValue
                ]);
    
                if($stmt->rowCount() > 0) {
                    $this->info = "Datensatz wurde gespeichert!";
                } else {
                    $this->info = "Kein Datensatz gespeichert!";
                }
            }
        }
    
    
        protected function edit() {
            $this->save_update = "update";
            if (isset($_POST['id'])) {
                $sql = "SELECT * FROM users WHERE ID=:id";
                $stmt = $this->conn()->prepare($sql);
                $stmt->execute(['id' => $_POST['id']]);
                $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
                if ($row) {
                    $this->first_name = $row['first_name'];
                    $this->last_name = $row['last_name'];
                    $this->corridor = $row['corridor'];
                    $this->room = $row['room'];
                    $this->bed = $row['bed'];
                    $this->proven = $row['proven'];
                    $this->ID = $row['id'];
                } else {
                    $this->info = "Datensatz nicht gefunden!";
                }
            } else {
                $this->info = "ID nicht gesetzt!";
            }
        }
    
        protected function update(){
            if (!isset($_POST['id'])) {
                $this->info = "ID nicht gesetzt!";
                return;
            }
    
            // Überprüfen, ob 'proven' im $_POST Array gesetzt ist
            $provenValue = isset($_POST['proven']) ? $_POST['proven'] : 0;
    
            $sql = "UPDATE users SET datetime = NOW(), first_name = :first_name, last_name = :last_name, corridor = :corridor, room = :room, bed = :bed, proven = :proven WHERE ID = :id";
            $stmt = $this->conn()->prepare($sql);
    
            $stmt->execute([
                'first_name' => $_POST['first_name'],
                'last_name' => $_POST['last_name'],
                'corridor' => $_POST['corridor'],
                'room' => $_POST['room'],
                'bed' => $_POST['bed'],
                'proven' => $provenValue,  // Verwenden Sie hier den überprüften Wert
                'id' => $_POST['id']
            ]);
    
            if ($stmt->rowCount() > 0) {
                $this->info = $stmt->rowCount() . " Datensatz verändert!";
            } else {
                $this->info = "Kein Datensatz verändert/gespeichert!";
            }
        }
    
        protected function delete(){
            $sql = "DELETE FROM users WHERE ID=:id";
            $stmt = $this->conn()->prepare($sql);
            $stmt->execute(['id'=>$_POST['id']]);
            if ($stmt->rowCount() > 0) $this->info = $stmt->rowCount() . " Datensatz gelöscht!";
            else $this->info = "Der Datensatz wurde nicht gelöscht!";
        }
    
    
        protected function search() {
            if (isset($_POST['search']) && !empty(trim($_POST['search']))) {
                $searchTerm = "%" . $_POST['search'] . "%";
    
                // SQL-Statement vorbereiten
                $this->list_sql = "SELECT * FROM users
                WHERE `first_name` LIKE :search
                OR `last_name` LIKE :search
                OR `corridor` LIKE :search
                OR `room` LIKE :search
                OR `bed` LIKE :search";
    
                // Debug-Ausgaben für SQL-Statement und Suchbegriff
                echo "SQL-Statement: " . $this->list_sql . "<br>";
                echo "Suchbegriff: " . $searchTerm . "<br>";
    
                $stmt = $this->conn()->prepare($this->list_sql);
                $stmt->bindParam(':search', $searchTerm, PDO::PARAM_STR);
    
                if (!$stmt->execute()) {
                    echo "Fehler bei der Ausführung der Abfrage: " . print_r($stmt->errorInfo(), true);
                    return;
                }
    
                // Ergebnisse abrufen und zu $this->rows zuweisen
                $this->rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
                // Debug-Ausgabe für die zurückgegebenen Ergebnisse
                echo "Anzahl der zurückgegebenen Ergebnisse: " . count($this->rows) . "<br>";
                echo "Ausgegebene Daten: <pre>" . print_r($this->rows, true) . "</pre>";
    
                if (count($this->rows) > 0) {
                    $this->info = count($this->rows) . " Ergebnisse gefunden!";
                } else {
                    $this->info = "Keine Ergebnisse gefunden!";
                }
            } else {
                $this->info = "Suchbegriff nicht angegeben!";
            }
        }
    }​

    Kommentar


    • #17
      template.php // die Ausgabe/Anzeige
      Code:
      <!--div class="container-fluid  w-75"-->
              <div class="jumbotron">
                  <div class="card mt-5">
                      <div class="card-header text-light bg-info">
                          <h4>Users</h4>
                      </div>
                      <div class="card-body ">
                          <form method="POST">
                              <div class="row ">
                              <div class="input-group input-group-sm mb-3">
                                  <span id="inputGroup-sizing-sm" ></span>
                                  <input type="varchar" class="form-control" name="first_name" placeholder="Vorname" value="<?=$this->first_name?>" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm" required>
                              </div>
                              <div class="input-group input-group-sm mb-3">
                                  <span id="inputGroup-sizing-sm"></span>
                                  <input type="varchar" class="form-control" name="last_name" placeholder="Nachname" value="<?=$this->last_name?>" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
                              </div>
                              <div class="input-group input-group-sm mb-3">
                                  <span id="inputGroup-sizing-sm"></span>
                                  <input type="smallint" minlength="2" maxlength="3" class="form-control" name="corridor" placeholder="Flur" value="<?=$this->corridor?>" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm" required maxlength="3">
                              </div>
                              <div class="input-group input-group-sm mb-3">
                                  <span id="inputGroup-sizing-sm"></span>
                                  <input type="smallint" minlength="2" maxlength="2" pattern="^[0-9]{2}$" class="form-control" name="room" placeholder="Zimmer" value="<?=$this->room?>" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm" required>
                              </div>
                              <div class="input-group input-group-sm mb-3">
                                  <span id="inputGroup-sizing-sm"></span>
                                  <input type="smallint" minlength="2" maxlength="2" pattern="^[0-9]{2}$" class="form-control" name="bed" placeholder="Bett" value="<?=$this->bed?>" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm" required>
                                  <input type="checkbox" class="btn-check" id="proven" name="proven" value="1">
                                  <label class="btn btn-outline-danger" for="proven">Belegt</label>
                              </div><br>
                              <div class="col-2 overflow-hidden ">
                                  <button type="submit" class="btn-sm btn-info ml-4 text-white" value="<?=$this->save_update?>" name="buttonUser"><?=$this->save_update?></button>
                                  </div>
                                  <input type="hidden" name="id" value="<?=$this->ID?>"  >
                              </div>
                          </form>    
                      </div>
                  </div>    
                  <!--INFO-->
                  <h5 class="text-white"><?=$this->info?></h5>
                  <div class="card mt-2">
                      <div class="card-header">
                          <form method="post">
                              <div class="input-group">
                                  <input type="text" class="form-control btn-sm mt-3" name="search" placeholder="Suchen">
                                  <div class="input-group-btn">
                                  <button class="btn btn-info mt-3" type="submit" name="buttonUser" value="search">
                                      <i class="fa fa-search text-white"></i>
                                  </button>
                                  </div>
                              </div>
                          </form>
                      </div>  
                      <div class="card-body">
                          <table class="table table-striped ">
                              <thead class="bg-secondary text-light">
                              <tr>
                                  <th scope="col">Uhrzeit / Datum</th>
                                  <th scope="col">Vorname</th>
                                  <th scope="col">Nachname</th>
                                  <th scope="col">Flur</th>
                                  <th scope="col">Zimmer</th>
                                  <th scope="col">Bett</th>
                                  <th scope="col">Belegt</th>
                                  <th scope="col" class=" d-flex justify-content-end pe-3">Aktionen</th>
                              </tr>
                              </thead>
                              <?php foreach ($this->rows as $row) : ?>
                                  <tr class="t-row">
                              <?php
                                  // Convert the stored date and time to the desired format
                                  $dateTimeObject = new DateTime($row['datetime']); // Convert the string datetime to a DateTime object
                                  $formattedDate = $dateTimeObject->format('d.m.Y'); // Format the date as 25.12.2023
                                  $formattedTime = $dateTimeObject->format('H:i'); // Format the time as 18:19 // + sec. :s // 18:19:20
                              ?>
                                  <td><?= $formattedTime ?> Uhr <?= $formattedDate ?></td>
                                  <td><?=htmlspecialchars($row['first_name'])?></td>
                                  <td><?=htmlspecialchars($row['last_name'])?></td>
                                  <td><?= sprintf('%02d', htmlspecialchars($row['corridor'])) ?></td> <!-- Führende Null für Flur -->
                                  <td><?= sprintf('%02d', htmlspecialchars($row['room'])) ?></td> <!-- Führende Null für Zimmer -->
                                  <td><?= sprintf('%02d', htmlspecialchars($row['bed'])) ?></td> <!-- Führende Null für Bett -->
                                  <td>
                                  <?php if ($row['proven'] == 1): ?>
                                      <input type="checkbox" class="btn-check" id="checkbox<?= $row['id'] ?>" checked disabled>
                                      <label class="btn btn-outline-danger btn-sm" for="checkbox<?= $row['id'] ?>">Belegt</label>
                                  <?php else: ?>
                                      <input type="checkbox" class="btn-check" id="checkbox<?= $row['id'] ?>" disabled>
                                      <label class="btn btn-outline-success btn-sm" for="checkbox<?= $row['id'] ?>">Frei</label>
                                  <?php endif; ?>
                                 </td>
                                 <td class="d-flex justify-content-end align-items-center" style="height: 50px;">
                                      <form method="POST" >
                                          <input type="hidden" name="id" value="<?=$row['id']?>" >
                                          <button type="submit" class="btn btn-info text-white btn-sm mt-3" value="edit" name="buttonUser">Bearbeiten</button>
                                          <button type="submit" class="btn btn-danger ml-2 btn-sm mt-3" value="delete" name="buttonUser">Löschen</button>
                                      </form>
                                  </td>
                              </tr>
                              <?php endforeach ?>
                          </table>
                      </div>    
                  </div>      
              </div>
          <!--/div-->  
          <!--script type="module" src="/App/classes/user_mvc_class/template.js"></script-->​

      Kommentar


      • #18
        Auf deinem Webspace steht am Anfang ein ? im HTML-Code, woher das aber kommt, kann ich dir nicht sagen. Firefox schreibt mir das in die Konsole:

        Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>".

        Kommentar


        • #19
          Zitat von scatello Beitrag anzeigen
          Auf deinem Webspace steht am Anfang ein ? im HTML-Code, woher das aber kommt, kann ich dir nicht sagen. Firefox schreibt mir das in die Konsole:
          Habe das ? gefunden, hier hat es sich eingeschlichen..

          Code:
          <?php
             error_reporting(E_ALL);
             ini_set('display_errors', true);
             session_start();
          ?>?
          ​
          Danke

          Kommentar


          • #20
            Zitat von reddighamburg Beitrag anzeigen
            Frohes neues!

            Ich sehe spontan keinen Fehler, der ins Auge springt.

            Bist du dir sicher, dass "search" das richtige Formularfeld ist, in den der Suchbegriff eingegeben wird?
            Was passiert, wenn du zum testen einfach mal ganz platt auf $_GET umstellst, und den Suchbegriff von Hand an die URL dran hängst?

            Du hast ja an zwei Stellen Debug-Ausgaben mit drin.
            Passen die zur Erwartung?

            Also insbesondere das
            PHP-Code:
            echo "Suchbegriff: " $searchTerm "<br>"
            aber auch das:
            PHP-Code:
            echo "Anzahl der zurückgegebenen Ergebnisse: " count($this->rows) . "<br>";
            echo 
            "Ausgegebene Daten: <pre>" print_r($this->rowstrue) . "</pre>";​ 
            Wenn das da oben schon schief läuft, dann ist vermutlich schon bei der Suche selbst ein Fehler.

            Wenn dort noch alles stimmt, aber dann weiter unten trotzdem die ganze liste ausgegeben wird, dann funkt dazwischen noch irgendwas quer...
            Bist du dir sicher, dass zwischen dem Abfrage-Abschnitt und dem Ausgabe-Abschnitt nicht irgendwo $this->rows überschrieben wird (weil du ggf. zwischendurch noch eine andere Abfrage ausführst)
            Habe mal den search auf $_GET umgestellt Link aber da passiert Garnichts :'(

            Wegen $this->rows habe mir die die Abfrage und Ausgabe angeschaut, und keinen Fehler oder andere Abfrage gefunden.
            Durch function search suche ich in der Datenbank z.B. nach Müller, und über gebe es dann an die Tabelle für die Ausgabe,
            Aber es wird halt alles ausgegeben und nicht nur das gesuchte. Ich steh aufn Schlauch

            Kommentar


            • #21
              Dass deine Suche trifft, zeigt deine Debug Ausgabe.
              Die untere Tabelle sollte daher eigentlich genau dieselben Ergebnisse anzeigen...

              ... esseidenn, es wird zwischendurch eine weitere Abfrage gemacht.
              Da du in deiner Klasse list_sql mit nem
              protected $list_sql="select * from users";
              initialisierst, würde ich spontan einfach mal tippen, dass du irgendwo ein neues Objekt instantiierst, anstatt dasselbe zu nehmen, das zuvor die suche ausgeführt hat...
              oder aber du machst noch einen weiteren aufruf irgendwo von zum Beispiel get_rows() , wo ja auch die gesamte users tabelle gepflückt wird.

              Das wirst du aber selber finden müssen, solange du immer nur Ausschnitte von deinem code teilst.
              Die Ausschnitte für sich sehen jeweils sauber aus.
              Der fehler passiert irgendwo zwischen der suche und der ausgabe.


              Kommentar


              • #22
                reddighamburg, sorry mein Fehler ich dachte ich hätte den Link im ersten Thread gepostet, da es PHP MVC CRUD ist sind es ja mehrere Seiten. Um die alle zu Posten finde ich unübersichtlicher.

                Kommentar


                • #23
                  Ich bin einfach zu Blöd

                  Wenn ich aus der protected function search Code am Ende.

                  Folgendes in der DB-SQL versuche wird nichts gefunden.
                  Code:
                  SELECT * FROM users WHERE `first_name` LIKE '%'
                  Bei dieser aussage bekomme ich.. obwohl ich kein LIMIT gesetzt habe??

                  Code:
                  SELECT * FROM users
                  WHERE `first_name` LIKE :search​
                  Code:
                   Fehler
                  SQL-Befehl: Kopieren Dokumentation
                  
                  
                  SELECT * FROM users
                  WHERE `first_name` LIKE :search LIMIT 0, 25
                  MySQL meldet: Dokumentation
                  
                  #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei ':search LIMIT 0, 25' in Zeile 2​​

                  Wenn ich die SQL Anfrage aber so in der DB-Tabelle abrufe, bekomme ich eine Ausgabe.
                  Code:
                  SELECT * FROM users WHERE `first_name` LIKE 's%'
                  id
                  datetime
                  first_name
                  last_name
                  corridor
                  room
                  bed
                  proven

                  Bearbeiten Bearbeiten
                  Kopieren Kopieren
                  Löschen Löschen
                  53
                  2024-01-14 19:54:37
                  Sky-Kay
                  Ich weiß es nicht
                  01
                  01
                  01
                  1


                  Code:
                      protected function search() {
                          if (isset($_POST['search']) && !empty(trim($_POST['search']))) {
                              $searchTerm = "%" . $_POST['search'] . "%";
                  
                              // SQL-Statement vorbereiten
                              $this->list_sql = "SELECT * FROM users
                                                 WHERE `first_name` LIKE :search
                                                 OR `last_name` LIKE :search";
                  
                              // Hier die Reihenfolge der Anweisungen korrigieren
                              $stmt = $this->conn()->prepare($this->list_sql);
                  
                              // Versuchen, die Abfrage auszuführen
                              if ($stmt->execute(['search' => $searchTerm])) {
                                  // Ergebnisse abrufen und zu $this->rows zuweisen
                                  $this->rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
                  
                                  if (count($this->rows) > 0) {
                                      $this->info = count($this->rows) . " Ergebnisse gefunden!";
                                  } else {
                                      $this->info = "Keine Ergebnisse gefunden!";
                                  }
                              } else {
                                  // Fehlerbehandlung, falls die Abfrage nicht erfolgreich ist
                                  $errorInfo = $stmt->errorInfo();
                                  $this->info = "Fehler bei der Ausführung der Abfrage: " . $errorInfo[2];
                              }
                          } else {
                              $this->info = "Suchbegriff nicht angegeben!";
                          }
                      }​

                  Ich finde den Fehler nicht

                  Kommentar


                  • #24
                    Siehe
                    https://www.w3schools.com/php/php_my...statements.asp
                    oder
                    https://www.php.net/manual/de/mysqli.prepare.php

                    Beachte die Beispiele

                    Kommentar

                    Lädt...
                    X