Zeddix: PHP textausschnitt

Hallo Leute,
ich bin PHP-Einsteiger.
Ich habe folgenden Script geschrieben:

<?php
  $text = $_GET["Inhalt"];
  $anzahl = strlen($text);
  $zahl = "1";
  $buchstabe = substr($text, $zahl, $zahl);
  until ($buchstabe = ":")
         {
   echo $buchstabe;
          $zahl++;
   $buchstabe = substr($text, $zahl, $zahl);
   if($zahl = $anzahl)
           {
            $buchstabe = ":";
           }
         }
?>

Der Script soll folgendes tun:
Er bekommt einen Text, dann zählt er die Buchstaben.
Dann schaut er sich in der Until Schleiefe die Buchstaben solange an, bis er einen Doppelpunkt findet.
Er schreibt den Text also bis zum ersten Doppelpunkt, zumindest soll er das...

Naja, er sagt er hätte ein Klammerproblem mit der ersten "{".
Das ist aber anscheinend nicht der einzige Fehler. Sobald ich das ganz auf eine while Schleife umstelle kommen auch Fehler.
Je nachdem wie ich umcode, schreib er nur den zweiten Buchstaben, keinen oder er verlässt die Schleife nicht.
Ich hoffe ich mach euch das Leben nicht so schwer ;).

Ich bin mir sicher das es auch einfachere Lösungen für mein Problem gibt, die würde ich auch gerne hören, aber zum Lernen ist mir die Lösung dieses Codeproblems wichtig!

Danke Zeddix

  1. gudn tach!

    Der Script soll folgendes tun:
    Er bekommt einen Text, dann zählt er die Buchstaben.
    Dann schaut er sich in der Until Schleiefe die Buchstaben solange an, bis er einen Doppelpunkt findet.

    es gibt in php keine until-schleife. zumindest nicht dokumentiert: http://de3.php.net/manual/en/language.control-structures.php
    nimm stattdessen while- oder die noch allgemeineren for-schleifen.
    beachte, dass vergleiche mit == oder === getaetigt werden. ein einfaches gleichheitszeichen ist ein zuweisungsoperator.

    Er schreibt den Text also bis zum ersten Doppelpunkt, zumindest soll er das...

    kombiniere strpos mit substr.

    prost
    seth

    1. Hallo Leute
      Ich wollte mich nochmal bei allen bedanken, die mir so ausführlich geholfen haben, ich hoffe ich muss die Hilfe nicht nochmal in anspruch nehmen ;).

      Bye
      Zeddix

  2. echo $begrüßung;

    $text = $_GET["Inhalt"];

    Diese Umkopiererei ist zwar oft zu sehen, aber unnötig. Genauso wie du hier auf $_GET["Inhalt"] zugreifst, kannst du das im weiteren Verlauf des Scripts auch machen. Du benötigst keine weitere Variable dafür.

    until ($buchstabe = ":")
             {

    [...]

    }

    Diese Anweisung gibt es in PHP nicht. Das Handbuch hat eine Liste der PHP-Kontrollstrukturen. Abgesehen davon ist ein Test auf Gleichheit mit == vorzunehmen. = ist eine Variablenzuweisung. Die ist prinzipiell auch in einem boolschen Ausdruck anwendbar, nur erhält man als Ergebnis den Wert der Zuweisung statt des erhofften Vergleichs.

    Ich bin mir sicher das es auch einfachere Lösungen für mein Problem gibt, die würde ich auch gerne hören, aber zum Lernen ist mir die Lösung dieses Codeproblems wichtig!

    Am besten ist es wohl, dass du gleich zu Anfang Debugging-Strategien lernst, dann kannst du selbst nach Fehlern suchen und dabei lernen, wie PHP funktioniert. Um ein Problem nachzuvollziehen muss man sich die Inhalte der beteilgten Variablen und die Ergebnisse der beteiligten Funktionen und Ausdrücke anschauen. Einen Fehler im Code zu haben, der kein Syntax-Fehler ist, bedeutet stets, dass irgend einer dieser Werte von der eigenen Vorstellung abweicht. Einfache Konstrollausgaben gehen mit echo, für genauere sollte man var_dump() verwenden.

    Um Texte an bestimmten Stellen aufzutrennen kann man explode() verwenden. Möchte man ein bestimmtes Zeichen oder eine Zeichenfolge finden, kann man das mit strpos() tun.

    echo "$verabschiedung $name";

  3. Hello,

    Schalte Deine Fehlermeldungen ein:

    <?php

    error_reporting(E_ALL);
        ini_set('display_errors',1);

    $text = $_GET["Inhalt"];

    Das Umkopieren aus dem $_GET-Array in eine andere Variable ist überflüssig

    $anzahl = strlen($text);
      $zahl = "1";
      $buchstabe = substr($text, $zahl, $zahl);

    Wenn Du substr() benutzt, musst Du auch sicher sein, dass die Parameter im Single-Byte-Code, also z.B. der Codierung ISO-8859-1 vorliegen. Hast Du im HTML-Dokumetn daran gedacht?

    until ($buchstabe = ":")

    until ist mir bei PHP nicht bekannt.
    aber do-while.
    Da Du es hier aber als Kopfgesteuerte Schleife verwendest, was beim until von Pascal vollkommen falsch wäre (das steht unten), nimm lieber gleich while()

    echo $buchstabe;
              $zahl++;
       $buchstabe = substr($text, $zahl, $zahl);

    wolltest Du die Anzahl der Zeichen, die jedes Mal gelesen werden, tatsächlich auch bei jedem Schleifendurchlauf erhöhen?

    if($zahl = $anzahl)
               {
                $buchstabe = ":";
               }
             }
    ?>

    Welche Fehlermeldungen bekommst Du?
    Was wird angezeigt?

    $zahl = 0;
        $len = strlen($text);

    while($zahl < $len and ($buchstabe = substr($text, $zahl, 1) != ':'))
        {
          echo $buchstabe;
          $zahl++;
        }

    Harzliche Grüße aus
    Sankt Andreasberg
    und Frohes Neues Jahr

    Tom

    --
    Nur selber lernen macht schlau

  4. Hi,

    Ich bin mir sicher das es auch einfachere Lösungen für mein Problem gibt, die würde ich auch gerne hören, aber zum Lernen ist mir die Lösung dieses Codeproblems wichtig!

    if($zahl = $anzahl)

    da hast du vielleicht eher den Vergleichsoperator == gemeint?

    Es gibt viele Möglichkeiten, dein Problem zu lösen.

      
    $seperator = ":";  
    $_GET['Inhalt'] = "hallo:welt";  
      
    # Zb könntest du erst prüfen, ob der String einen $seperator enthält:  
    if(strpos($_GET['Inhalt'],":") !== false){  
      
      # wenn, dann String an diesem Punkt in Stücke brechen  
      $parts = explode(":",$_GET['Inhalt']);  
      
      # und die Stücke ansehn  
      print_r($parts); echo "<br>";  
      
      # Vielleicht möchtest du nur bei genau 2 Stücken diese weiterverarbeiten:  
      if(count($parts) == 2){  
        echo "Vor dem Seperator: ".$parts[0]."<br>";  
        echo "Nach dem Seperator: ".$parts[1]."<br>";  
        $parts[0] .= " php";  
        $parts[1] = $parts[1]."weit beliebt";  
      }  
      
      # und dann die Stücke wieder verbinden:  
      $_GET['Inhalt'] = implode($seperator,$parts);  
      
      echo $_GET['Inhalt']."<br>";  
    }  
    
    

    herzliche Grüße,
    Jonny 5