script läuft nicht immer

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Hubraumking
Mitglied
Beiträge: 6
Registriert: 23.07.2015 11:07

script läuft nicht immer

Beitrag 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>


Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12336
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: script läuft nicht immer

Beitrag 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
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Antworten

Zurück zu „Coding & Technik“