PHP – die besten Beiträge

PHP mail kommt nur lokal an?

Hallo, ich habe das problem, dass meine PHP mail nur lokal ankommtl, jedoch nicht wenn ich sie an einen externen Mailprovider schicke, dass ist mein code

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Statusmeldung</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #191919;
            color: white;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }


        .container {
            text-align: center;
            padding: 20px;
            background-color: #2a2a2a;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        h1 {
            margin-bottom: 20px;
        }
        .success {
            color: green;
        }
        .error {
            color: red;
        }
        .back-button {
            margin-top: 20px;
            background-color: #333;
            color: #fff;
            padding: 10px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s ease;
        }
        .back-button:hover {
            background-color: #555;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Statusmeldung</h1>
		<button class="back-button" onclick="window.history.back()">Zurück</button>
		
        <?php
        session_start();


        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            // Spam-Schutz: Überprüfen, ob genügend Zeit seit dem letzten Absenden vergangen ist (1 Stunde)
            if (isset($_SESSION['last_submit_time']) && time() - $_SESSION['last_submit_time'] < 600) {
                $timeLeft = 600 - (time() - $_SESSION['last_submit_time']);
                echo "<p class='error'>Bitte warten Sie noch $timeLeft Sekunden, bevor Sie das Formular erneut absenden. Die Ankunft der Email kann bis zu 24h dauern.</p>";
                exit;
            }


            // Aktualisieren der letzten Absendezeit
            $_SESSION['last_submit_time'] = time();


            // Weiter mit der E-Mail-Versendung
            $to = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
            $subject = 'Backup Bier aus dem Schlauch';
            $message = 'Hey, hier ist dein Backup von Bier aus dem Schlauch.';
            $headers = "From: noreply@bierausdemschlauch.de";


            $data = $_POST['exportedFile'];
            $fileName = $_POST['fileName'];
            $fileContent = base64_decode($data);


            $separator = md5(time());
            $eol = PHP_EOL;


            // Main headers
            $headers .= "MIME-Version: 1.0" . $eol;
            $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;


            // Message
            $body = "--" . $separator . $eol;
            $body .= "Content-Transfer-Encoding: 7bit" . $eol . $eol;
            $body .= $message . $eol;


            // Attachment
            $body .= "--" . $separator . $eol;
            $body .= "Content-Type: application/octet-stream; name=\"" . $fileName . "\"" . $eol;
            $body .= "Content-Transfer-Encoding: base64" . $eol;
            $body .= "Content-Disposition: attachment; filename=\"" . $fileName . "\"" . $eol . $eol;
            $body .= chunk_split(base64_encode($fileContent)) . $eol;
            $body .= "--" . $separator . "--";


            if (mail($to, $subject, $body, $headers)) {
                // Benachrichtigung über Erfolg
                echo "<p class='success'>E-Mail erfolgreich gesendet.</p>";
            } else {
                // Benachrichtigung über Misserfolg
                echo "<p class='error'>E-Mail konnte nicht gesendet werden.</p>";
            }
        } else {
            echo "<p class='error'>Ungültige Anforderung.</p>";
        }
        ?>
		
        
    </div>
	
</body>
</html>


Homepage, HTML, Webseite, HTML5, Code, PHP, Programmiersprache, Webentwicklung

Alle Tabellen bei phpMyAdmin anzeigen?

Hallo, geht es vielleicht einfacher? Mit weniger Code?

<?php
  $servername = "localhost";
  $username = "root";
  $password = "";

  // Funktion um Verbindung zu prüfen und eine Nachricht auszugeben
  function checkConnection($conn) {
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }
  }

  // Verbindung herstellen
  $conn = new mysqli($servername, $username, $password);
  checkConnection($conn);

  // Alle Datenbanken abrufen
  $sql = "SHOW DATABASES";
  $result = $conn->query($sql);
  echo "<h1>Datenbanken</h1>";

  if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
      $dbname = $row['Database'];
      echo "<a href='?database=$dbname'>$dbname</a><br>";
    }
  }
  else {
    echo "Keine Datenbanken gefunden.";
  }

  $conn->close();

  // Tabellen in der gewählten Datenbank anzeigen
  if (isset($_GET['database'])) {
    $dbname = $_GET['database'];
    $conn = new mysqli($servername, $username, $password, $dbname);
    checkConnection($conn);
    $sql = "SHOW TABLES";
    $result = $conn->query($sql);
    echo "<h1>Tabellen in $dbname</h1>";

    if ($result->num_rows > 0) {
      while ($row = $result->fetch_assoc()) {
        $tablename = $row["Tables_in_$dbname"];
        echo "<a href='?database=$dbname&table=$tablename'>$tablename</a><br>";
      }
    }
    else {
      echo "Keine Tabellen gefunden.";
    }

    $conn->close();
  }

  // Einträge in der gewählten Tabelle anzeigen und Eingabefelder generieren
  if (isset($_GET['database']) && isset($_GET['table'])) {
    $dbname = $_GET['database'];
    $tablename = $_GET['table'];
    $conn = new mysqli($servername, $username, $password, $dbname);
    checkConnection($conn);
    $sql = "SELECT * FROM $tablename";
    $result = $conn->query($sql);
    echo "<h1>Einträge in $tablename bearbeiten</h1>";

    if ($result->num_rows > 0) {
      echo "<form method='POST' action='save_changes.php'>";
      echo "<table border='1'><tr>";

      // Spaltenüberschriften
      $fieldinfo = $result->fetch_fields();

      foreach ($fieldinfo as $val) {
        echo "<th>{$val->name}</th>";
      }

      echo "</tr>";

      // Daten
      while ($row = $result->fetch_assoc()) {
        echo "<tr>";

        foreach ($row as $key => $data) {
          echo "<td><input type='text' name='{$key}[]' value='$data'></td>";
        }

        echo "</tr>";
      }

      // Leeres Eingabefeld für neue Einträge hinzufügen
      echo "<tr>";

      foreach ($fieldinfo as $val) {
        echo "<td><input type='text' name='{$val->name}[]' value=''></td>";
      }

      echo "</tr>";
      echo "</table>";
      echo "<input type='hidden' name='database' value='$dbname'>";
      echo "<input type='hidden' name='table' value='$tablename'>";
      echo "<input type='submit' value='Änderungen speichern'>";
      echo "</form>";
    }
    else {
      echo "Keine Einträge gefunden.";

      // Leere Tabelle mit Eingabefeldern für neuen Eintrag anzeigen
      echo "<form method='POST' action='save_changes.php'>";
      echo "<table border='1'><tr>";

      foreach ($fieldinfo as $val) {
        echo "<th>{$val->name}</th>";
      }

      echo "</tr><tr>";

      foreach ($fieldinfo as $val) {
        echo "<td><input type='text' name='{$val->name}[]' value=''></td>";
      }

      echo "</tr></table>";
      echo "<input type='hidden' name='database' value='$dbname'>";
      echo "<input type='hidden' name='table' value='$tablename'>";
      echo "<input type='submit' value='Änderungen speichern'>";
      echo "</form>";
    }

    $conn->close();
  }
?>
Datenbank, MySQL, PHP, phpMyAdmin

Sort/Tabellen/QR-Code altmodisch gelöst? Verbesserungsvorschläge?

Mehrere Formularfunktionen in PHP:

Sort:

  $sort_by = "kunden_id";
  $order = "ASC";

  if (isset($_GET['sort'])) {
    // Überprüfen, ob die Sortierparameter gültig sind
    if ($_GET['sort'] == 'kunden_id' || $_GET['sort'] == 'vname' || $_GET['sort'] == 'nname' || $_GET['sort'] == 'age') {
      $sort_by = $_GET['sort'];
      $order = ($_GET['order'] == 'asc') ? 'ASC' : 'DESC';
    }
  }

  $sql = "SELECT kunden_id, vname, nname, age FROM kunden ORDER BY $sort_by $order";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    echo "<table border='1'>
      <tr>
        <th><a href='?sort=kunden_id&order=". ($sort_by == 'kunden_id' && $order == 'ASC' ? 'desc' : 'asc') ."'>Kunden ID</a></th>
        <th><a href='?sort=vname&order=". ($sort_by == 'vname' && $order == 'ASC' ? 'desc' : 'asc') ."'>Vorname</a></th>
        <th><a href='?sort=nname&order=". ($sort_by == 'nname' && $order == 'ASC' ? 'desc' : 'asc') ."'>Nachname</a></th>
        <th><a href='?sort=age&order=". ($sort_by == 'age' && $order == 'ASC' ? 'desc' : 'asc') ."'>Alter</a></th>
      </tr>";

    while($row = $result->fetch_assoc()) {
      echo "<tr>
        <td>" . $row["kunden_id"]. "</td>
        <td>" . $row["vname"]. " </td>
        <td>" . $row["nname"]. "</td>
        <td>" . $row["age"]. "</td>
      </tr>";
    }

    echo "</table>";
  }
  else {
    echo "0 Ergebnisse";
  }

  $conn->close();
?>

Tabellen anzeigen lassen:

<?php
  $servername = "localhost";
  $username = "root";
  $password = "";
  $dbname = "lap";

  // Create connection
  $conn = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  $sql = "SELECT kunden_id, vname, nname, age FROM kunden Order by kunden_id";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    echo "<table border='1'>
      <tr>
        <th>Kunden ID</th>
        <th>Vorname</th>
        <th>Nachname</th>
        <th>Alter</th>
      </tr>";

    // output data of each row
    while($row = $result->fetch_assoc()) {
      echo "<tr>
        <td>" . $row["kunden_id"]. "</td>
        <td>" . $row["vname"]. " </td>
        <td>" . $row["nname"]. "</td>
        <td>" . $row["age"]. "</td>
      </tr>";
    }

    echo "</table>";
  }
  else {
    echo "0 results";
  }

  $conn->close();
?>

QR-Code:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>QR-Code Generator</title>
  <script src="https://cdn.jsdelivr.net/npm/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      flex-direction: column;
      align-items: center;
      margin-top: 50px;
    }

    #qrcode {
      margin-top: 20px;
    }
    button {
      margin-top: 10px;
    }
  </style>
</head>
<body>
  <h1>QR-Code Generator</h1>
  <form id="qrForm">
    <label for="url">Gib eine URL ein:</label>
    <input type="text" id="url" name="url" required>
    <button type="submit">Generiere QR-Code</button>
  </form>
  <div id="qrcode"></div>
  <button id="downloadBtn" style="display:none;">QR-Code herunterladen</button>
  <script>
    const qrCode = new QRCodeStyling({
      width: 300,
      height: 300,
      type: "png",
      data: "",
      image: "",
      dotsOptions: {
        color: "#000",
        type: "rounded"
      },
      backgroundOptions: {
        color: "#fff",
      }
    });
    document.getElementById("qrForm").addEventListener("submit", function(event) {
      event.preventDefault();
      const url = document.getElementById("url").value;
      qrCode.update({
        data: url
      });
      document.getElementById("qrcode").innerHTML = "";
      qrCode.append(document.getElementById("qrcode"));
      document.getElementById("downloadBtn").style.display = "block";
    });
    document.getElementById("downloadBtn").addEventListener("click", function() {
      qrCode.download({ name: "qrcode", extension: "png" });
    });
  </script>
</body>
</html>
Datenbank, MySQL, PHP, phpMyAdmin

Delete/Insert/Update/Search, altmodisch gelöst? Verbesserungsvorschläge?

Mehrere Formularfunktionen in PHP:

Delete:

  if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["kunden_id"])) {
    $kunden_id = $_POST["kunden_id"];
    $sql = "DELETE FROM kunden WHERE kunden_id=$kunden_id";

    if ($conn->query($sql) === TRUE) {
      echo "Record deleted successfully";
    }
    else {
      echo "Error deleting record: " . $conn->error;
    }
  }

  $conn->close();
?>

Insert:

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $vname = $conn->real_escape_string($_POST['vname']);
    $nname = $conn->real_escape_string($_POST['nname']);
    $age = $conn->real_escape_string($_POST['age']);
    $sql = "INSERT INTO kunden (vname, nname, age) VALUES ('$vname', '$nname', '$age')";

    if ($conn->query($sql) === TRUE) {
      echo "Neuer Kunde erfolgreich hinzugefügt";
    }
    else {
      echo "Fehler: " . $sql . "<br>" . $conn->error;
    }
  }

  $conn->close();
?>

Update:

  if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["kunden_id"]) && isset($_POST["vname"]) && isset($_POST["nname"]) && isset($_POST["age"])) {
    // Kunden-ID und neue Daten aus dem Formular abrufen
    $kunden_id = $_POST["kunden_id"];
    $vname = $_POST["vname"];
    $nname = $_POST["nname"];
    $age = $_POST["age"];

    // SQL-Update-Statement vorbereiten
    $sql = "UPDATE kunden SET vname='$vname', nname='$nname', age='$age' WHERE kunden_id=$kunden_id";

    if ($conn->query($sql) === TRUE) {
      echo "Record updated successfully";
    }
    else {
      echo "Error updating record: " . $conn->error;
    }
  }

  $conn->close();
?>

Search:

  if (isset($_POST['search'])) {
    $search = $_POST['search'];
    $sql = "SELECT kunden_id, vname, nname, age FROM kunden WHERE nname LIKE '%$search%' ORDER BY kunden_id";
  }
  else {
    $sql = "SELECT kunden_id, vname, nname, age FROM kunden ORDER BY kunden_id";
  }

  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    echo "<table border='1'>
      <tr>
        <th>Kunden ID</th>
        <th>Vorname</th>
        <th>Nachname</th>
        <th>Alter</th>
      </tr>";

    while ($row = $result->fetch_assoc()) {
      echo "<tr>
        <td>" . $row["kunden_id"]. "</td>
        <td>" . $row["vname"]. " </td>
        <td>" . $row["nname"]. "</td>
        <td>" . $row["age"]. "</td>
      </tr>";
    }

    echo "</table>";
  }
  else {
    echo "0 Ergebnisse";
  }

  $conn->close();
?>
<form method="post">
  <input type="text" name="search" placeholder="Nachname eingeben...">
  <button type="submit">Suchen</button>
</form>
Datenbank, MySQL, PHP, phpMyAdmin

Action URL in einem PHP-Formular über einen Schalter in Echtzeit dynamisch ändern, wie?

Also Folgendes: ich hab hier ein PHP-Formular mit einem Eingabefeld und einem Submit Button, dass die eingegebenen Werte an eine bestimmte URL sendet. (Das ist erstmal simpel) Ich habe auch herausgefunden, wie man die URL z.b mit einer Zahlenfunktion variieren kann. Auch das geht relativ leicht. Was hingegen scheinbar weniger einfach ist: Ich würde das Action Attribut, also die URL, wo die Eingaben hingesendet werden nun gerne über einen HTML-Schalter z.b Checkbox dynamisch & in Echtzeit ändern. z.b Checkbox aktiv = Daten werden an URL2 gesendet, Checkbox nicht aktiv = Daten werden an URL1 gesendet. Oder es soll einfach ein URL-Zusatz hinzugefügt werden, je nachdem ob die Checkbox aktiv ist oder nicht. Meine jetzt ganz blöde Frage: Wie oder mit welchem Ansatz kann das funktionieren? Ich habe da jetzt bereits XX Stunden rumprobiert: Normale Variablen mit Conditions definieren, Sessions starten, der Versuch ein Cookie zu setzen, dass beim Ein und Ausschalten der Checkbox gesetzt bzw. gelöscht werden soll (klappt nicht). Mit JS Codeschnipseln herumprobiert. Nichts davon scheint zu funktionieren bzw. es wird einfach immer der Zustand "checkbox unchecked" an URL1 gesendet.

Hat irgendeiner mit Ahnung ne Idee wieso das nicht funktioniert und ob es einen lösbaren Ansatz für dieses Problem gibt?

HTML, Webseite, JavaScript, HTML5, Datenbank, PHP, Programmiersprache, Webdesign, Webentwicklung, Webserver, Frontend

php-Zugriff auf mysql funktioniert nicht?

Ich habe folgende Funktion in PHP geschrieben:

function getName($id) {
                global $conn;
                $sql = "SELECT Vorname, Nachname FROM mitglieder WHERE ID = `$id`";
                $result = $conn->query($sql);
                if ($result->num_rows > 0) {
                    $row = $result->fetch_assoc();
                    return $row['Vorname'] . " " . $row['Nachname'];
                } else {
                    return "";
                }
            }

Aber aus irgendeinem Grund kommt immer folgende Fehlermeldung:

Warning: Attempt to read property "num_rows" on bool in C:\xampp\htdocs\***********.php on line 35

Diese Variable $conn funktioniert aber an anderer Stelle im globalen Code außerhalb dieser Funktion einwandfrei wie gewünscht und ich sehe vom Code her keinen nennenswerten Unterschied.

Was ich bereits versucht habe:

  • $conn als Parameter an die Funktion zu übergeben
  • $conn in der Funktion selber zu definieren
  • $conn in der Funktion selber definieren und dass $conn im globalen Code entfernen
  • ChatGPT nach dem Fehler fragen
  • Folgende Fehlerabfrage einzubauen (dabei war $conn auch in der Funktion selber und NUR in der Funktion selber definiert):
if ($conn->connect_error) {
                die("Serverfehler: " . $conn->connect_error);
            }

Das führte aber nur zu folgender Fehlermeldung:

Warning: Attempt to read property "connect_error" on null in C:\xampp\htdocs\*********.php on line 26

Hat alles nichts geholfen. Wisst ihr wo der Fehler liegt?

Computer, Technik, SQL, HTML, Webseite, programmieren, JavaScript, Code, Datenbank, MySQL, PHP, Programmiersprache, Webentwicklung, phpMyAdmin, Programmierfehler

Meistgelesene Beiträge zum Thema PHP