Stephan: Komische Reaktion

Hallo,

ich habe mit viel Hilfe das gebaut:

---

<?

$ja = '*ja*';
$nein = '*nein*';

function search4links($url)
{
static $urlBuffer;
if(isset($urlBuffer[$url])) return 0;
$urlBuffer[$url] = 1;

echo("Durchsuche $url<br>\n");
flush();
$meineSeite = @implode("", @file($url));
if(!$meineSeite) return 0;
$existing  = false;

// Links suchen
preg_match_all("/(href|src)=("|')(.*)(\2)/siU", $meineSeite, $ausgabe);

$anzahlLinks = 0;

foreach($ausgabe[3] as $link)
{

if(preg_match("/(bildungszentrum-hyperkinetik.de)/i", $link))
      $GLOBALS["foundVals"]++;

if(!preg_match("/(http)/i", $link))
   {
      if(!($link[0] == "/"))
      {
         if(!preg_match("/(http://.*)/(.*).(.*)$/i", $url, $mUrl))
         {
            $anzahlLinks += search4links($url."/".$link);
         }
         else
         {
            $anzahlLinks += search4links($mUrl[1]."/".$link);
         }
      }
      else
      {
         preg_match("/(http://.*)/.*)//siU", $url, $mUrl);
         print_r($mUrl);
         $anzahlLinks += search4links($mUrl[1]."/".$link, $fPtr);
      }

}

}

if($existing) {

$query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

if($insert = @mysql_query("$query")) {
echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';
}

} else {

$query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($nein)."') WHERE adresse LIKE $url";

if($insert = @mysql_query("$query")) {
echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';

}
}

return $anzahlLinks;

}

$foundVals = 0;

if(isset($_POST['url']))
{
   search4links($_POST['url']);
   echo "\n\n<br><br>Links gefunden: ".$foundVals;
}
?>

---

Nur sind jetzt zwei Probleme:

1. Wenn ich etwas überprüfe, schreibt er mir nichts in die Datenbank.
2. Wenn ich etwas überprüfe, überprüft er oft sehr komisch oder hält an. Ein beispiel hier:

http://stephanl.s1.cybton.com/linkadmin2003/iframe/organizer.php

Dann auf Prüfen.

Benutzer: Test
PW: testtest

Woran kann das liegen?

Danke schon jetzt

Stephan

  1. Hallo,

    hi!

    if(!$meineSeite) return 0;
    $existing  = false;

    hier setzt du _jedesmal_ $existing auf false. also geht das script _jedesmal_ in die else-bedingung.

    mehr hab ich mir jetzt nicht angesehn, aber vielleicht ist das ja schon der fehler.

    gruß,
    lindic

    1. Und wie mache ich das richtig?

      Stephan

      1. Hallo,

        Und wie mache ich das richtig?
        [...]
        if(!$meineSeite) return 0;
        $existing  = false;

        Also das hängt sehr stark davon ab was du erreichen willst: Wenn es egal ist, ob $existing aus false gesetzt wird, sondern es reicht einfach nur die Funktion zu beenden stimmt diese Schreibweise: PHP wird, sofern die If-Bedingung erfüllt ist, die Funktion beenden und keinen weiteren Code aus der Funktion  mehr ausführen.
        Dein Problem ist jetzt, dass wenn die If-Bedingung nicht zutrifft $existing auch auf false gesetzt wird. Das heisst, du musst die If-Bedingung anders schreiben:
        if(!$meineSeite){
          $existing=false;
          return 0;
        }

        Generell solltest du If-Dendingungen mit geschwungenen Klammern umgeben, da es Fehler vermeidet, PEAR Standard ist und auch leichter zu lesen ist.

        gruß,
        Severin

        --
        Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
        --Philip K. Dick
        1. Hmm, Danke, habe ich geändert, mal sehen, ob er jetzt in die Datenbank schreibt...

          Jetzt sieht mein Code so aus:

          -----

          <?php
          require("connect.inc.php");
          ?>
          <html><head><body>
          <center>
          <img src="images/loader.gif">
          <bR><bR><font face="arial"><span style="font-size:13px">
          <?

          $ja = '*ja*';
          $nein = '*nein*';

          function search4links($url)
          {
          static $urlBuffer;
          if(isset($urlBuffer[$url])) return 0;
          $urlBuffer[$url] = 1;

          echo("Durchsuche $url<br>\n");
          flush();
          $meineSeite = @implode("", @file($url));
          if(!$meineSeite){
                             $existing  = false;
                             return 0;
                          }

          // Links suchen
          preg_match_all("/(href|src)=("|')(.*)(\2)/siU", $meineSeite, $ausgabe);

          $anzahlLinks = 0;

          foreach($ausgabe[3] as $link)
          {

          if(preg_match("/(bildungszentrum-hyperkinetik.de)/i", $link))
                $GLOBALS["foundVals"]++;

          if(!preg_match("/(http)/i", $link))
             {
                if(!($link[0] == "/"))
                {
                   if(!preg_match("/(http://.*)/(.*).(.*)$/i", $url, $mUrl))
                   {
                      $anzahlLinks += search4links($url."/".$link);
                   }
                   else
                   {
                      $anzahlLinks += search4links($mUrl[1]."/".$link);
                   }
                }
                else
                {
                   preg_match("/(http://.*)/.*)//siU", $url, $mUrl);
                   print_r($mUrl);
                   $anzahlLinks += search4links($mUrl[1]."/".$link, $fPtr);
                }

          }

          }

          if($existing) {

          $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

          if($insert = @mysql_query("$query")) {
            echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';
            }
            else {
            echo 'Ein Fehler ist beim Eintragen in die Datenbank aufgetreten.';
            }

          } else {

          $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($nein)."') WHERE adresse LIKE $url";

          if($insert = @mysql_query("$query")) {
            echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';
            }
            else {
            echo 'Ein Fehler ist beim Eintragen in die Datenbank aufgetreten.';
          }
          }

          return $anzahlLinks;

          }

          $foundVals = 0;

          if(isset($_POST['url']))
          {
             search4links($_POST['url']);
             echo "\n\n<br><br>Links gefunden: ".$foundVals;
          }
          ?>

          -----

          Warum sagt er mir jetzt:

          Ein Fehler ist beim Eintragen in die Datenbank aufgetreten?

          Danke schon jetzt

          Stephan

          1. Hallo,

            $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

            Dein UPDATE Syntax ist nicht korrekt: http://www.mysql.com/doc/de/UPDATE.html
            Außerdem, bist du sicher, dass die Tabelle 'parnter' und nicht 'partner' heisst ? Im zweifel, lass dir einfach mittles echo mysql_error(); den genauen Fehler ausgeben.

            gruß,
            Severin

            --
            Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
            --Philip K. Dick
            1. Hallo,

              $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

              Dein UPDATE Syntax ist nicht korrekt: http://www.mysql.com/doc/de/UPDATE.html
              Außerdem, bist du sicher, dass die Tabelle 'parnter' und nicht 'partner' heisst ? Im zweifel, lass dir einfach mittles echo mysql_error(); den genauen Fehler ausgeben.

              gruß,
              Severin

              Hallo,

              OK, Partner müsste es schon heissen ;-)

              Mal sehen, jetzt ist mein UPDATE so:

              UPDATE partner SET status='ja' WHERE link LIKE $url

              Geht immer noch nicht... Bei echo mysql_error(); sagt er mir jetzt

              You have an error in your SQL syntax near '://www.erft.de/vereine/zzz//trans-sw.gif' at line

              Komisch!

              Danke schon jetzt

              Stephan

              1. Halllo,

                UPDATE partner SET status='ja' WHERE link LIKE $url
                [...]
                You have an error in your SQL syntax near '://www.erft.de/vereine/zzz//trans-sw.gif' at line

                Ich würde versuchen:
                UPDATE partner SET status='ja' WHERE link LIKE 'mysql_escape_string($url)'
                Beachte die Anführungszeichen, sie sollten dafür sorgen, dass $url auf jedenfall als String angenommen wird, und mysql_escape_string entschärft alle Sonderzeichen, die MySQL unter umständen stören könnten.

                gruß,
                Severin

                --
                Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
                --Philip K. Dick
                1. OK, jetzt geht es, nur er schreibt mir überall nein rein, komisch!

                  Stephan

                  1. mein Script ist jetzt so udn er schreibt mir immer "ja" :-(

                    -----

                    <?

                    function search4links($url)
                    {
                    static $urlBuffer;
                    if(isset($urlBuffer[$url])) return 0;
                    $urlBuffer[$url] = 1;

                    echo("Durchsuche $url<br>\n");
                    flush();
                    $meineSeite = @implode("", @file($url));
                    if(!$meineSeite){
                                       $existing  = false;
                                       return 0;
                                    }

                    // Links suchen
                    preg_match_all("/(href|src)=("|')(.*)(\2)/siU", $meineSeite, $ausgabe);

                    $anzahlLinks = 0;

                    foreach($ausgabe[3] as $link)
                    {

                    if(preg_match("/(bildungszentrum-hyperkinetik.de)/i", $link))
                          $GLOBALS["foundVals"]++;

                    if(!preg_match("/(http)/i", $link))
                       {
                          if(!($link[0] == "/"))
                          {
                             if(!preg_match("/(http://.*)/(.*).(.*)$/i", $url, $mUrl))
                             {
                                $anzahlLinks += search4links($url."/".$link);
                             }
                             else
                             {
                                $anzahlLinks += search4links($mUrl[1]."/".$link);
                             }
                          }
                          else
                          {
                             preg_match("/(http://.*)/.*)//siU", $url, $mUrl);
                             print_r($mUrl);
                             $anzahlLinks += search4links($mUrl[1]."/".$link, $fPtr);
                          }

                    }

                    }

                    if($existing) {

                    $nein = "*nein*";
                      $query = "UPDATE partner SET status='nein' WHERE link LIKE '$url'";

                    if($insert = @mysql_query($query)) {
                      echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';
                      }
                      else {
                      echo mysql_error();
                      }

                    } else {

                    $ja = "*ja*";
                      $query = "UPDATE partner SET status='ja' WHERE link LIKE '$url'";

                    if($insert = @mysql_query($query)) {
                      echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';
                      }
                      else {
                      echo mysql_error();
                      }
                    }

                    return $anzahlLinks;

                    }

                    $foundVals = 0;

                    if(isset($_POST['url']))
                    {
                       search4links($_POST['url']);
                       echo "\n\n<br><br>Links gefunden: ".$foundVals;
                    }
                    ?>
                    -----

                    Danke schon jetzt für hilfe

                    Stephan