Seite 1 von 1

script läuft nicht immer

Verfasst: 04.12.2025 16:35
von Hubraumking
Hallo habe ein Script, wo ich auf der Eingabeseite einen z.B. 4-stelligen oder 5-stelligen Code eingebe.
Aus diesem berechne ich im Script ein "Ergebnos"
Dieses Ergebnis sende ich mir dann per Email

allerdings funzt das Script nicht immer :-(

z.B. bei der Eingabe 0209 oder 2606. bekomme ich keine Mail

Also bei bestimmten Zahlen bekomme ich die Mail und bei z.B. diesen beiden nicht

Find den Fehler nicht

Code: Alles auswählen

<?php

  //Formulareingabe prüfen
  //den Code wandeln in String und Flag bei ? setzen
  $eingabe = strval($_POST['code']);
  if (substr($eingabe,0,1) == '?') {
    $eingabe = substr($eingabe,1);
  }

  if ($_POST['submit'] && preg_match("([0-9]{4})", $eingabe) ) { //mind. 4-stellig
    //Wenn Wert abgesendet wird
    
    //Variablen deklarieren
    $zs = 1800; // Zeichen je Seite
    $zz = 50; // Ziffern je Zeile

    //$code = $_POST['code'];
    $code = $eingabe;
     echo '*** ' . $code . ' ***';
    
    // Berechnen der Anzeige (Buchseite, Zeile, Position)
    // Position Code in Nachkommastellen finden
    $pi = file_get_contents('pi-stellen.txt');
    $pi = substr($pi, 0 , 500003); // kürze π auf Buchlänge
    // echo $pi;
    $pos = strpos($pi, $code) - 2; // 1. FundStelle in Pi
    
    if ($pos !== -2)
    {
      //Zufällige Fundstelle, wenn mehrere Treffer im Buch
      preg_match_all('/' . $code . '/', $pi, $matches, PREG_OFFSET_CAPTURE);
      $array = $matches[0];
      $anzahl = count($array);

      // Schleife für alle Fundstellen
      $ergebniss = '';
      for ($i=0; $i < $anzahl; $i++) {
        $pos = $array[$i][1] - 2;
        // Seite berechnen
        $seite = intdiv($pos, $zs);
        $rest = ($pos % $zs);
        if ($rest <> 0) $seite++;

        //Buchseite eins erhöhen, da ab Seite 2 losgeht
        $seite++;

        // Zeile und Pos berechnen
        $zeile = intdiv($rest, $zz);
        $stelle = ($rest % $zz);
        if ($stelle <> 0) $zeile++;
        if ($stelle == 0) $stelle = 50;

        $ergebniss = $ergebniss . $seite . '-' . $zeile . '-' . $stelle . "\n"; 

      }
      
      $ausgabe = $ergebniss;
      $ausgabe_google = $_POST['code'];

      // PHP senden

      $empfaenger = "mailempfaenger@domain.com";
      $inhalt = ' ';
      $betreff = 'Code:' . $code;
      $from = "From: Olaf Weber <norply@gmail.com>";
      $text = 'Seite(n):' . "\n" . $ausgabe;

      // echo 'Code ' . $betreff . "\n";
      // echo $text;
      
      mail($empfaenger, $betreff, $text, $from);

      // Ausgabe, dass Mail gesendet wurde
      // echo "<p style='color: blue; font-size: 72px; border: 2px solid black; text-align: center; padding:10px;'>Mail wurde versendet.</p>";

      // Suchaufruf Google

      $url = 'https://www.google.de/search?q=' . urlencode($ausgabe_google);

      echo '<meta http-equiv="refresh" content="1; url=' . htmlspecialchars($url, ENT_COMPAT, 'UTF-8') . '">';
    } 
    else
    {
      echo '<h1>Code ist nicht im Buch</h1>';
    }   
  // Programm beenden
  exit;

  } // if Ende

?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>PI-BUCH-SUCHE</title>
  <link rel="stylesheet" href="layout.css">
</head>
<body>
  <header></header>
  <article>
    <div class="logo">
      <img src="google-weihnacht.gif" width="200" alt="">
    </div>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="codeingabe">
      <input type="text" id="code" name="code" autofocus><br><br>
      <input type="submit" name="submit" value="Suche">
      </form>
  </article>
  <footer></footer>
</body>
</html>



Re: script läuft nicht immer

Verfasst: 05.12.2025 12:42
von Mahony
Hallo

Es wird keine Mail verschickt, weil die Sequenzen „0209“ und „2606“ in deiner Datei pi-stellen.txt nicht vorkommen (oder durch Formatierung nicht als zusammenhängende Zeichenkette erkannt werden).

Debug-Tipps
1. Testen, ob die Sequenz vorkommt:

Code: Alles auswählen

var_dump(strpos($pi, "0209"));
var_dump(strpos($pi, "2606"));
Zeigt dir direkt, ob und wo die Zeichenkette gefunden wird.

2. Dateiformat prüfen: Enthält pi-stellen.txt wirklich nur Ziffern ohne Leerzeichen oder Zeilenumbrüche? Wenn z. B. nach jeder 50. Ziffer ein Zeilenumbruch steht, wird „0209“ nie als zusammenhängende Zeichenkette gefunden.

Grüße Mahony