Warning: Undefined array key "p" in /home/clients/119990c2465ec8673b725b4ed2ffc513/sites/informatikboard.ch/includes/vb5/template.php(404) : eval()'d code on line 794 Warning: Undefined array key "p" in /home/clients/119990c2465ec8673b725b4ed2ffc513/sites/informatikboard.ch/includes/vb5/template.php(404) : eval()'d code on line 794 Warning: Undefined array key "p" in /home/clients/119990c2465ec8673b725b4ed2ffc513/sites/informatikboard.ch/includes/vb5/template.php(404) : eval()'d code on line 794 Warning: Undefined array key "p" in /home/clients/119990c2465ec8673b725b4ed2ffc513/sites/informatikboard.ch/includes/vb5/template.php(404) : eval()'d code on line 794 Warning: Undefined array key "p" in /home/clients/119990c2465ec8673b725b4ed2ffc513/sites/informatikboard.ch/includes/vb5/template.php(404) : eval()'d code on line 794 where(If) schleife funktioniert nicht - iB - InformatikBoard.ch - Benutzer helfen Benutzern

Ankündigung

Einklappen
Keine Ankündigung bisher.

where(If) schleife funktioniert nicht

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

  • Problem: where(If) schleife funktioniert nicht

    Guten Tag
    Bin neu hier und hoffe, dass ich hier eine hilfsreichere Antwort erhalte als in einem anderen Forum, dort hat mir niemand weiter helfen können.

    Ich habe eine Abfrage aus einer DB. Die funktioniert, wenn ich sie zu oberst hin platziere. Platziere ich sie aber an die stelle wo jetzt "hier sollte xxxx stehen", so funktioniert der ganze script nicht mehr. kann mir ev. jemand sagen warum.

    Ansicht des ergebnis (funktionier) http://test.sonne.goip.de/index.php
    Ansicht des ergebnis (funktioniert nicht) http://test.sonne.goip.de/index1.php

    Preisabfrage:
    Code:
    $SQL0 = "SELECT * FROM dsp where (dscode like '$tld'";
    $SQL0R = odbc_exec($conn, $SQL0);
    while($SQL0Z = odbc_fetch_array($SQL0R)) 
    {
    echo $SQL0Z["dendung"];
    echo $SQL0Z["dpreis"];
    }
    Script funktioniert, aber Preisabfrage am falschen Ort
    Code:
    <html><body><table border="0"><tr><td width="140">Domain</td><td width="70">Status</td><td>Info</td></tr>
    <?php
    include_once("servers.php";
    $domain = $_POST['domain'];
    $tld = $_POST['tld'];
    $_DSN ="dbserver";
    $_User = "dbuser";
    $_PW = "dbpass";
    $conn = odbc_connect($_DSN, $_User, $_PW) or die("Verbindung fehlgeschlagen";
    $SQL0 = "SELECT * FROM dsp where (dscode like '$tld'";
    $SQL0R = odbc_exec($conn, $SQL0);
    while($SQL0Z = odbc_fetch_array($SQL0R)) 
    {
    echo $SQL0Z["dendung"];
    echo $SQL0Z["dpreis"];
    }
    if(!headers_sent())
    header("Content-Type: text/html; charset=UTF-8";
    if(!isset($_SESSION))
    session_start();
    function check_domain($domain, $tld, $whoisserver)
    {
    $fp = @fsockopen($whoisserver, 43, $errno, $errstr, 5);
    if(!$fp)
    return "<strong>Fehler</strong><br />".$errstr." (".$errno."n";
    else
    {
    if($tld != "de" && !preg_match("/^[a-zA-Z0-9-]*$/", $domain))
    {
    try
    {
    require_once("idna2.php";
    $idn = Net_IDNA2::getInstance();
    $domain = $idn->encode($domain);
    }
    catch(Exception $e)
    {
    return "<strong>Fehler</strong><br />".$e->getMessage()."n";
    }
    }
    $flag = "";
    if($tld == "de"
    $flag = "-T dn ";
    fwrite($fp, $flag.$domain.".".$tld."rn";
    $string = "";
    while(!feof($fp))
    $string .= fread($fp, 128);
    fclose($fp);
    return $string;
    }
    }
    if(!preg_match("/^[^_./]{1,}$/", $domain))
    echo "<span class="error">nung&uuml;ltiger Domainname</span>n";
    else
    {
    function print_domain($domain, $tld, $whoisservers)
    {
    global $limit_exceeded;
    $status_free = "not found|no match|nothing found|not have an entry|status: available|is free|status: free|no entries|no such domain";
    $status_invalid = "status: invalid|invalid pattern|not a valid domain|invalid request|not understand the query|";
    $status_invalid .= "error for|invalid domain|invalid characters|idn unsupported|unassignable|currently restricted|not allowed|invalid parameter";
    $status_limit = "limit exceeded";
    
    $string = check_domain($domain, $tld, $whoisservers[$tld]);
    preg_match_all("/Whois Server: (.*?)n/i", $string, $matches);
    if(isset($matches[1][0]) && trim($matches[1][0]) != ""
    $string = check_domain($domain, $tld, $matches[1][0]);
    if(preg_match("/Fehler/", $string))
    {
    echo "<tr><td width="1400">".$domain.".".$tld."</td><td width="70" class="error">Fehler</td>";
    echo "<td><a href="popup.php?tld=".$tld."" onclick="window.open('popup.php?tld=".$tld."','Details','width=800,height=600,scrollbars=yes'; return false">Details</a></td>";
    echo "</tr>n";
    $_SESSION['details'][$tld] = $string;
    }
    else
    {
    if(preg_match("/".$status_free."/i", preg_replace("/ss+|t/", " ", $string)))
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70"class="success">ist frei!</td><td>n";
    if ($tld =='at' echo 'hier sollte at22.90 stehen';
    elseif(preg_match("/".$status_invalid."/i", $string))
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">ung&uuml;ltig</td></tr>n";
    elseif(preg_match("/".$status_limit."/i", $string))
    {
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">Abfragelimit erreicht *</td></tr>n";
    $limit_exceeded = true;
    }
    else
    {
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">ist belegt</td><td>";
    echo "<a href="popup.php?tld=".$tld."" onclick="window.open('popup.php?tld=".$tld."','Details','width=800,height=600,scrollbars=yes'; return false">Inhaber ist</a>";
    echo "</td></tr>n";
    $_SESSION['details'][$tld] = "<pre>n".$string."</pre>";
    }
    }
    }
    $limit_exceeded = false;
    echo "<table class="list">n";
    if($tld == "all"
    {
    foreach($whoisservers as $tld_ => $value)
    print_domain($domain, $tld_, $whoisservers);
    }
    else
    print_domain($domain, $tld, $whoisservers);
    echo "</table>n";
    if($limit_exceeded)
    echo "<span>(* Bitte versuchen Sie es in ein paar Minuten erneut)</span>n";
    }
    ?>
    </table><body><html>
    Script Funktioniert nicht, aber Preisabfrage ist am richtigen Ort
    Code:
    <html><body><table border="0"><tr><td width="140">Domain</td><td width="70">Status</td><td>Info</td></tr>
    <?php
    include_once("servers.php";
    $domain = $_POST['domain'];
    $tld = $_POST['tld'];
    $_DSN ="dbserver";
    $_User = "dbuser";
    $_PW = "dbpass";
    $conn = odbc_connect($_DSN, $_User, $_PW) or die("Verbindung fehlgeschlagen";
    if(!headers_sent())
    header("Content-Type: text/html; charset=UTF-8";
    if(!isset($_SESSION))
    session_start();
    function check_domain($domain, $tld, $whoisserver)
    {
    $fp = @fsockopen($whoisserver, 43, $errno, $errstr, 5);
    if(!$fp)
    return "<strong>Fehler</strong><br />".$errstr." (".$errno."n";
    else
    {
    if($tld != "de" && !preg_match("/^[a-zA-Z0-9-]*$/", $domain))
    {
    try
    {
    require_once("idna2.php";
    $idn = Net_IDNA2::getInstance();
    $domain = $idn->encode($domain);
    }
    catch(Exception $e)
    {
    return "<strong>Fehler</strong><br />".$e->getMessage()."n";
    }
    }
    $flag = "";
    if($tld == "de"
    $flag = "-T dn ";
    fwrite($fp, $flag.$domain.".".$tld."rn";
    $string = "";
    while(!feof($fp))
    $string .= fread($fp, 128);
    fclose($fp);
    return $string;
    }
    }
    if(!preg_match("/^[^_./]{1,}$/", $domain))
    echo "<span class="error">nung&uuml;ltiger Domainname</span>n";
    else
    {
    function print_domain($domain, $tld, $whoisservers)
    {
    global $limit_exceeded;
    $status_free = "not found|no match|nothing found|not have an entry|status: available|is free|status: free|no entries|no such domain";
    $status_invalid = "status: invalid|invalid pattern|not a valid domain|invalid request|not understand the query|";
    $status_invalid .= "error for|invalid domain|invalid characters|idn unsupported|unassignable|currently restricted|not allowed|invalid parameter";
    $status_limit = "limit exceeded";
    $string = check_domain($domain, $tld, $whoisservers[$tld]);
    preg_match_all("/Whois Server: (.*?)n/i", $string, $matches);
    if(isset($matches[1][0]) && trim($matches[1][0]) != ""
    $string = check_domain($domain, $tld, $matches[1][0]);
    if(preg_match("/Fehler/", $string))
    {
    echo "<tr><td width="1400">".$domain.".".$tld."</td><td width="70" class="error">Fehler</td>";
    echo "<td><a href="popup.php?tld=".$tld."" onclick="window.open('popup.php?tld=".$tld."','Details','width=800,height=600,scrollbars=yes'; return false">Details</a></td>";
    echo "</tr>n";
    $_SESSION['details'][$tld] = $string;
    }
    else
    {
    if(preg_match("/".$status_free."/i", preg_replace("/ss+|t/", " ", $string)))
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70"class="success">ist frei!</td><td>n";
    
    
    
    //Hier soll der Script Preisabfrage funktionieren.
    
    $SQL0 = "SELECT * FROM dsp where (dscode like '$tld'";
    $SQL0R = odbc_exec($conn, $SQL0);
    while($SQL0Z = odbc_fetch_array($SQL0R)) 
    {
    echo $SQL0Z["dpreis"];
    }
    
    
    
    elseif(preg_match("/".$status_invalid."/i", $string))
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">ung&uuml;ltig</td></tr>n";
    elseif(preg_match("/".$status_limit."/i", $string))
    {
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">Abfragelimit erreicht *</td></tr>n";
    $limit_exceeded = true;
    }
    else
    {
    echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">ist belegt</td><td>";
    echo "<a href="popup.php?tld=".$tld."" onclick="window.open('popup.php?tld=".$tld."','Details','width=800,height=600,scrollbars=yes'; return false">Inhaber ist</a>";
    echo "</td></tr>n";
    $_SESSION['details'][$tld] = "<pre>n".$string."</pre>";
    }
    }
    }
    $limit_exceeded = false;
    echo "<table class="list">n";
    if($tld == "all"
    {
    foreach($whoisservers as $tld_ => $value)
    print_domain($domain, $tld_, $whoisservers);
    }
    else
    print_domain($domain, $tld, $whoisservers);
    echo "</table>n";
    if($limit_exceeded)
    echo "<span>(* Bitte versuchen Sie es in ein paar Minuten erneut)</span>n";
    }
    ?>
    </table><body><html>

  • #2
    AW: where(If) schleife funktioniert nicht

    Hallo phpdblernen

    Erstmal Herzlich Willkommen im iB !

    Mit der Script Thematik setzt ich mich dann später auseinander..
    rgds Lordicon


    Der einfachste Weg Identitätskrisen zu vermeiden.

    PSS: [Environment]::UserName

    Lordicon [Lord ei-'kän] frei übersetzt "Lord der Ikone"

    Kommentar


    • #3
      AW: where(If) schleife funktioniert nicht

      In der Entwicklungs-Phase macht es Sinn, wenn Du alle Fehler-Ausgaben anzeigen lässt.

      Ich würde also folgende Einstellungen in der PHP-INI setzen:

      Code:
      error_reporting=-1
      display_errors=on
      Dann wir jeweils angezeigt wo das Problem liegt und die Rate-Spiele entfallen.

      Zum aktuellen Problem: der Code welchen Du gepostet hast weist relativ viele Syntax-Fehler auf, ich vermute beim kopieren sind ein paar Dinge schief gelaufen - ich bin mir also nicht sicher ob meine Lösung richtig ist.

      Nachdem ich den Code formatiert habe ist mir aber aufgefallen, dass das Code-Fragment in einem if/else-Block platziert ist, jedoch ohne geschweifte Klammer. So lange Du nur eine Anweisung verwendest ist alles in Ordnung - ansonsten braucht es die Klammern.

      Code:
          ...
          if(preg_match("/".$status_free."/i", preg_replace("/ss+|t/", " ", $string))) { // <- vstm: Klammer hier
          echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70"class="success">ist frei!</td><td>n";
      
      
          //Hier soll der Script Preisabfrage funktionieren.
      
          // vstm: entweder schliessende Klammer hinzufügen oder öffnende Klammer entfernen
          // $SQL0 = "SELECT * FROM dsp where (dscode like '$tld'";
          $SQL0 = "SELECT * FROM dsp where dscode like '$tld'";
      
          $SQL0R = odbc_exec($conn, $SQL0);
          while($SQL0Z = odbc_fetch_array($SQL0R)) 
          {
              echo $SQL0Z["dpreis"];
          }
      
      
          } // <- vstm: Klammer hier
          elseif(preg_match("/".$status_invalid."/i", $string))
              echo "<tr><td width="140">".$domain.".".$tld."</td><td width="70" class="error">ung&uuml;ltig</td></tr>n";
          elseif(preg_match("/".$status_limit."/i", $string))
          {
          ...
      Solche Fehler lassen sich mit einer sauberen Code-Formatierung (Einrückung usw.) relativ einfach vermeiden - der Code wird damit auch besser lesbar.

      Kommentar


      • #4
        AW: where(If) schleife funktioniert nicht

        danke für die willkommensgrüsse


        den ursprüngliche script habe ich vor jahren mal im internet gefunden irgend auf einer seite, wo so scripte zum donwloaden gibt.
        nun wollte ich eben diesen script erweitern, dass auch der preis (meiner) zu den jeweiligen domainendung steht


        Kann man die Error Reporting innerhalb dieser Datei platzieren um zu sehen, wo der Fehler liegt?

        Ich habe auch die klammer gesetzt wie im vorherigen Beitrag erwähnt wurde, aber es hat leider nichts gebracht.

        mein ziel ist es nur, von dem funktionierenden script "die Preisabfrage" nicht mehr oben zu haben, sondern bei der jeweilige zeile von der entsprechenden domain endung.
        oder kann ich die status abfrage der domainendung in meine preisabfrage integrieren, dann brauche ich den rest des script nicht mehr.

        Ich habe den Script mal ein wenig gegliedert.

        Dieser Script Funktioniert, aber der Preis ist am falschen Ort.
        http://test.sonne.goip.de/check-funk..._ohnePreis.txt

        Dieser script funktioniert nicht. aber der Preis wäre am richtigen Orthttp://test.sonne.goip.de/check-funk...T_mitPreis.txt

        Kommentar


        • #5
          AW: where(If) schleife funktioniert nicht

          Bezüglich error reporting: ja das lässt sich auch zur Laufzeit einstellen. Der Nachteil ist, dass bei Syntaxfehlern diese Anweisungen nicht ausgeführt werden und dann immer noch eine "Blank Page" angezeigt wird. Wenn Du folgende Anweisungen ganz am Anfang des ersten "<?php"-Blocks hinzufügst kannst Du potentielle Laufzeit-Fehler anzeigen lassen:

          Code:
          <?php
          error_reporting(-1);
          ini_set('display_errors', 1);
          // ... hier kommt der Rest deines Codes
          Das ganze solltest Du im produktiv-Betrieb aber wieder raus nehmen, ansonsten ist es möglich, dass Du potentiell sensitive Informationen preis gibst. In der Praxis definiert man meistens eine Konfigurationseinstellung oder eine Umgebungsvariabel, um zwischen der "Produkitven"- und "Entwiklungs"-Umgebung zu unterscheiden.

          Bezüglich dem eigentlichen Problem: Ich hab den aktuellen und Syntaktisch korrekten Code mal in einer Testumgebung ausgeführt.

          Der Grund warum es nicht läuft ist, dass der Code für den Preis am "richtigen Ort" in der Funktion "print_domain" ausgeführt wird. Dort drin ist "$conn" undefiniert und muss explizit mit "global" vom Globalen Namensraum "importiert" werden - das heisst Du musst einfach "$conn" in der "global"-Anweisung angeben. Am Schluss müsste das so aussehen:

          Code:
          	function print_domain($domain, $tld, $whoisservers)
          	{
          		global $limit_exceeded, $conn; // <- hier $conn hinzufügen
                          // ... der Rest bleibt gleich
          Bei mir hat es damit funktioniert. Alternativ könntest Du die "$conn"-Variable auch als Parameter der Funktion übergeben - es wäre die saubere Lösung, aber die Code-Änderung wäre ein klein wenig umfangreicher.

          Kommentar


          • #6
            AW: where(If) schleife funktioniert nicht

            Danke für die Hilfe.
            Es lag wirklich daran, das die varable im global nicht deklariert war.
            nun funktioniert es einwandfrei.

            Kommentar

            Lädt...
            X