If schleife funktioniert nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
bauen
code
detail
domain
ergebnis
fehler
flag
funktion
match
not
parameter
preis
problem
schleife
status
stehen
string
type
zeile
-
ichbin an einer domainsuche am bauen, soweit gehts, nun habe ich ein problem mit der if schleife.
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 sllte xxxx stehen", so funktioniert der ganze script nicht mehr. kann mir ev. jemand sagen warum.
Ansicht des ergebnis http://test.sonne.goip.de/index.php
Preisabfrage:
$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"]; }
funktionierender script
<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."\r\n"); $string = ""; while(!feof($fp)) $string .= fread($fp, 128); fclose($fp); return $string; } } if(!preg_match("/^[^_\.\/]{1,}$/", $domain)) echo "<span class=\"error\">\nungü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("/\s\s+|\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ü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>
nicht funktionierender script
<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."\r\n"); $string = ""; while(!feof($fp)) $string .= fread($fp, 128); fclose($fp); return $string; } } if(!preg_match("/^[^_\.\/]{1,}$/", $domain)) echo "<span class=\"error\">\nungü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("/\s\s+|\t/", " ", $string))) echo "<tr><td width=\"140\">".$domain.".".$tld."</td><td width=\"70\"class=\"success\">ist frei!</td><td>\n"; $SQL0 = "SELECT * FROM dsp where (dscode like '$tld')"; $SQL0R = odbc_exec($_conn, $SQL0); while($SQL0Z = odbc_fetch_array($SQL0R)) { echo $SQL0Z["dpreis"]; } // 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ü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>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
wenn du am bauen an einer domainsuche bist, hast du kein problem mit der "if-schleife" (die gibt es - bedauerlich, aber - nicht).
womit hast du dann ein problem? (die - alles insgesamt - 260? zeilen kann man nicht ansehen, die etzen die augen aus!) wo hast du sie her? wo hast du welche änderung gemacht? (hir wird kein korrektur gelesen) ...
erleichtere den job, dann hast du schneller die antwort :) -
Also Ich habe mit den folgenden Zeilen Probleme Preisabfrage (siehe ersten Beitrag).
Der Script wo "funktionierender script" ist IO, nur das der Preis der Domains nicht auf der Zeile ausgegeben wird, wo die entsprechende domainendung ist.
dies möchte ich ändern, dass es dort den preis hinschreibt, wo auch die domainendung ist. Des halb habe ich den "Preisabfrage" abschnitt nach unten verschoben (siehe "nicht funktionierender script")
diese zeile " if ($tld =='at') echo 'hier sollte at22.90 stehen';" verschwindet dan, wenn der script "preisabfrage" dirt funktioniert. -
Versuche mal die {}-Klammer dort trotzdem hinzumachen das funktioniert irgendwie manchmal nicht ohne.
LG
Yannick -
// if ($tld =='at') echo 'hier sollte at22.90 stehen';
Meinst du diese auskommentierte Zeile?
Entferne doch die beiden "/" am Zeilenanfang, sonst kanns nicht klappen. -
es geht nicht um die zeile " // if ($tld =='at') echo 'hier sollte at22.90 stehen'; " sondern um die zeile welche 2 oberhalb steht. zb. um diese " echo $SQL0Z["dpreis"]; " respektiv um diese ganze abfrageschleife.
"
$SQL0 = "SELECT * FROM dsp where (dscode like '$tld')";
$SQL0R = odbc_exec($_conn, $SQL0);
while($SQL0Z = odbc_fetch_array($SQL0R))
{
echo $SQL0Z["dpreis"];
}
"
mit der schleife möchte ich den preis der domain aus meiner db lesen und zu dem ergebnis der whois abfrage schreiben. platziere ich die schleife zu oberst, werden die preise zwar korrekt ausgelesen, aber stehen am falschen ort. den preis möchte ich jeweils auf die gleiche zeile wie das ergebnis der whois abfrage. -
function print_domain($domain, $tld, $whoisservers) { ... $SQL0 = "SELECT * FROM dsp where (dscode like '$tld')"; $SQL0R = odbc_exec($_conn, $SQL0);
$_conn wurde nicht an die Funktion übergeben.
Warum definierst du die funktion innerhalb deines restlichen Codes? -
habe nun auch "$_conn" deklariert.
Was meinst du mit"Warum definierst du die funktion innerhalb deines restlichen Codes?", wo soll ich den die hinschreiben.
ziel ist es, dass der preis mit hilfe dieser abfrage aus der db ausgelesen wird und in die richtige zeile domainendung (whois schleife) hingeschrieben wird. -
Ich meine damit, dass du Funktionen von deinem restlichen Code trennen solltest.
Damit bleibt alles übersichtlicher. Oder lager sie aus und mach ein include an entsprechender Stelle.
Schreib die Funktionen ganz an den Anfang.
Dann kommst du auch nicht auf den Gedanken, dass Variablen irgendwo da drinnen evtl. gültig sind und hättest den Fehler sicherlich selber erkannt.
[edit] Wichtig ist nur, wo du die Funktion ausführst, nicht wo sie definiert ist.
Das solltest du übrigens auch mit deiner Ausgabe machen.
Hole am besten alles, was du brauchst, bevor du mit einer Ausgabe anfängst.
Siehe dazu: http://de.wikipedia.org/wiki/Model_View_Controller
Damit strukturierst du deine Scripte besser und behältst die einzelnen Teile übersichtlicher.
[edit] Noch ein kleiner Hinweis
Wie ybook schon gemeint hat. Schreibe immer in {}, auch wenn du nur eine Anweisung hast.
Damit vermeidest du fiese kleine Fehler.
Beitrag zuletzt geändert: 10.9.2014 22:05:56 von travianinc -
Im ersten beitrag habe ich geschrieben"funktionierender script" dort habe ich eben die preisabfrage ganz oben gemacht. wie bringe ich nun diesem script so bei, dass er es an die richtige stelle schreibt wo auch das ergebnis der domainsuche (whois) ist.
-
Wenn Du nicht willst, dass irgendjemand mal deine schöne dsp Tabelle oder gar die ganze Datenbank löscht, solltest Du mal die SQL injection Lücke beheben, auf die ich dich bereits im Chat angesprochen habe, was Du aber, wie so viele Ratschläge, gekonnt ignoriert hast...
Beitrag zuletzt geändert: 13.9.2014 17:19:57 von orange-session -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage