Komische Reaktion
Stephan
- php
0 lindic
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
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
Und wie mache ich das richtig?
Stephan
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
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
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,
$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
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
OK, jetzt geht es, nur er schreibt mir überall nein rein, komisch!
Stephan
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