Ergebnis 1 bis 6 von 6

Thema: where(If) schleife funktioniert nicht

  1. #1
    Registriert seit
    26.09.2014
    Alter
    40
    Beiträge
    3

    Standard 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. #2
    Registriert seit
    08.12.2003
    Ort
    Wohlenschwil (AG)
    Beiträge
    2.149

    Standard 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"

  3. #3
    vstm ist offline Fortgeschrittener Benutzer
    Registriert seit
    28.12.2008
    Ort
    Züri Oberland
    Alter
    33
    Beiträge
    123

    Standard 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.

  4. #4
    Registriert seit
    26.09.2014
    Alter
    40
    Beiträge
    3

    Standard 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

  5. #5
    vstm ist offline Fortgeschrittener Benutzer
    Registriert seit
    28.12.2008
    Ort
    Züri Oberland
    Alter
    33
    Beiträge
    123

    Standard 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.

  6. #6
    Registriert seit
    26.09.2014
    Alter
    40
    Beiträge
    3

    Standard 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.

Ähnliche Themen

  1. Problem: Wlan funktioniert nicht
    Von Tunisiano im Forum Software: Windows, Apple, Linux...
    Antworten: 1
    Letzter Beitrag: 12.12.2010, 16:37
  2. Problem: Bind9 funktioniert nicht
    Von entel im Forum Internet Allgemein
    Antworten: 1
    Letzter Beitrag: 01.02.2010, 19:49
  3. Problem: Internet funktioniert nicht
    Von yudi im Forum Internet Allgemein
    Antworten: 8
    Letzter Beitrag: 23.08.2008, 19:30
  4. Rechner funktioniert nicht...
    Von CrazyD im Forum Hardware (auch Smartphones, Tablets, Netzwerk und Wireless)
    Antworten: 7
    Letzter Beitrag: 08.05.2005, 15:17
  5. USB funktioniert nicht...
    Von firemage im Forum Hardware (auch Smartphones, Tablets, Netzwerk und Wireless)
    Antworten: 15
    Letzter Beitrag: 10.07.2004, 12:35

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •