"If" abfrage funktioniert nicht.

SaTaN

Erfahrenes Mitglied
If abfrage funzt nicht

Hallo Ihr da draussen,

bitte um Mithilfe da mein kleines Hirn
da nicht weiter kommt.

Habe ein Formular wo man eine URL eingeben kann.
Die Eingaben werden alle anschliessend in die
DB abgelegt.
Was auch schon funktioniert.

Was leider mir noch Kopfschmerzen bringt ist dieser Code.
So im einzelnen funzt er ja.

Nur was ich damit erreichen möchte ist folgendes :

Bei Eingabe einer URL und anschliessendem Versenden
soll geprüft werden ob es die Domain überhaupt gibt.
Wenn nicht soll das Script nichts in die DB eintragen
und mir wieder ein leeres Formular anbieten.

Irgendwie scheitere ich an dieser anforderung.

Ich hoffe Ihr könnt mir helfen.

PHP:
if (empty($_POST['linkrein'])) {
$all_ok = FALSE;
 $errorraus_1 = "Url fehlt<br>";
  } else {

//urlcheck
   if (!(preg_match("/^(http:\/\/)?([^\/]+)/i", $linkrein, $matches))) {
    $host = $matches[2];
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
   } else {
	$domain = fsockopen($matches[0], 80, &$errno, &$errstr, 30);
    if (!$domain) {    
    echo "<b>".$matches[0]." <font color=\"red\">down!!</font></b>\n";
   } else { 
   echo("<a href=\"$linkrein\">".$matches[0]."</a>"); 
  }
 }	
}

Vielen Dank

euer SaTaN
 
hab deinen fehler!

es sind halt doch die kleinen dinge im leben:

schreib mal über deinen kommentar //urlcheck

noch diese zeile rein: $linkrein = &$_POST['linkrein'];

dann klappt dat, ich habs grad getestet, funktioniert einwandfrei ;-)

du hast zwar ganz oben das richtige globale array genommen, aber dann im weiteren verlauf vergessen weiter zu machen :p

//edit: hopla, glatt vergessen:

deine regulären ausdrücke musst du noch richtig escapen, da die fehler ausgeben, dann klappts ;-)
 
Zuletzt bearbeitet:
hey,

ich habe die Zeile eingefügt :
PHP:
$linkrein = $_POST['linkrein'];
Keine Veränderung. Soll eigentlich das "&" vor $_Post stehen ?
Also ich habe beides gemacht und es hatte kein einfluss.

Dann zu meinen regulären ausdrücken :
Das Forum hat irgendwie meine "\" verschluckt.
Warumm wird das gemacht und wie soll ich es denn richtig Posten,
damit es richtig dargestellt wird ?

Nochmal zu meinem Problem.
Vielleicht habe ich mich ja nicht richtig ausgedrückt.

Ich nehme ein <input Feld>.Das heisst linkrein.

JETZT EIN BEISPIEL :

PHP:
if (empty($_POST['linkrein'])) {
$all_ok = FALSE;
 $errorraus_1 = "Url fehlt<br>";
  }

Dieser Codesnipsel macht nichts anderes als zu Prüfen ob das
input Feld leer ist.
Bei keiner Eingabe bleibt es immer bei dem input Feld.
Sobald was eingegeben wird geht es weiter.

Genau so möchte ich es bei diesem hier haben :

PHP:
if (empty($_POST['linkrein'])) {
$all_ok = FALSE;
 $errorraus_1 = "Url fehlt<br>";
  } else {
$linkrein = $_POST['linkrein'];
//urlcheck
   if (!(preg_match("/^(http:\/\/)?([^\/]+)/i", $linkrein, $matches))) {
    $host = $matches[2];
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
   } else {
	$domain = fsockopen($matches[0], 80, &$errno, &$errstr, 30);
    if (!$domain) {    
    echo "<b>".$matches[0]." <font color=\"red\">down!!</font></b>\n";
   } else { 
   echo("<a href=\"$linkrein\">".$matches[0]."</a>"); 
  }
 }	
}
//urlcheck
Leider verschwinden wieder mal meine "\".
Aber sie sind in den ausdrücken drin.

Bei dieser if Abfrage die mir leider nicht gelingt, möchte ich es so haben :

Wenn was eingegeben wird und es kommt die Meldung "DOWN" bei raus,
dann soll das Script da stehen bleiben mit der jeweiligen echo Meldung.
Steht dort eine Domain drin die erreichbar ist soll das Script weiter machen.

ich hoffe es wird hierdurch etwas klarer wie ich es gerne hätte und
nicht hinbekomme.

Vielen Dank

euer SaTaN
 
also außer den fehler mit $_POST und den regex' hatte ich keine probleme, wenn du PHP < 4.1.0 hast versuchs mal mit $HTTP_POST_VARS['linkrein'] vielleicht liegts daran.
 
hallo,
Danke für die schnelle Antwort.

Es funzt auch nicht damit.
Ich nutze PHP 4.2.2 auf einer Linux Redhat Kiste.
Nur das dürfte nicht viel anders sein.

Das Problem was noch ist, das er egal was kommt an
Eingaben, immer das Script weiter läuft und
meine DB vollmüllt :mad:

Was mache ich da nur falsch ???
Weis leider da nicht mehr weiter.

euer Satan
 
kann es sein, dass dein script zum testen der domain richtig ist und du nur den eintrag in die datenbank außerhalb der schleife ausführst und das script somit immer was in die DB schreibt?poste doch einfach mal die stelle hin wo er das zeug in die DB eintragen soll
 
hey
PHP:
$query = "INSERT INTO $tablelinks
         (url,domain,kat,beschreibung,datum)
VALUES
         ('".$_POST['linkrein']."',
		  '".$matches[0]."',
		  '".$_POST["kat"]."',
		  '".$_POST["beschreibung"]."',
		  '". date("Ymd") . "')";
$result = mysql_query ($query,$conn) or die(mysql_error());

Meinst du etwa diese Stelle ?

Vielen Dank

euer SaTaN
 
du musst das in den teil der if-abfrage schieben, wo der domaincheck erfolgreich war, sonst isses ja logisch dass er ständig was einträgt
 
hmm ??? *qualm*

Was mache ich denn mit denn anderen
if Abfragen ?

Es sind ja mehrere input Felder die ich Abfragen muss.

Vielen Dank

euer SaTaN
 
ich schätze mal du prüfst bevor du das in die datenbank einträgst ob $all_ok = true ist, nicht war?

dann machs so:

PHP:
if (empty($_POST['linkrein'])) {
$all_ok = FALSE;
 $errorraus_1 = "Url fehlt<br>";
  } else {
$linkrein = $_POST['linkrein'];
//urlcheck
   if (!(preg_match("/^(http://)?([^/]+)/i", $linkrein, $matches))) {
    $host = $matches[2];
    preg_match("/[^./]+.[^./]+$/", $host, $matches);
   } else {
    $domain = fsockopen($matches[0], 80, &$errno, &$errstr, 30);
    if (!$domain) {    
    echo "<b>".$matches[0]." <font color=\"red\">down!!</font></b>\n";
    $all_ok = false;
   } else { 
   echo("<a href=\"$linkrein\">".$matches[0]."</a>"); 
  }
 }    
}

ich hab jetzt noch nen $all_ok = false mit eingefügt wo die prüfung misslungen ist
 
Zurück