Hallo allemaal,

hier nog een vraagje,

$rem_dot = 'voorbeeld';

mysql_query(" INSERT INTO ".$rem_dot."
(url, gespidered)
VALUES ('" . $link . "', '0')") or die (mysql_error());

Ik weet dat het geheel werkt wanneer ik de variabele achter INSERT INTO vervang voor een vaste invoer zoals 'voorbeeld'

Hoe kan ik het gebruik van zo een variabele wél laten werken met het INSERT INTO commando?

Overigens bestaat de tabel 'voorbeeld' wel al

Alvast bedankt,
Alexander
SanThe schreef op 16.11.2007 21:24
[quote='bart van der veen schreef op 16.11.2007 19:16']echo je query is, kijken of je het dan ziet.

Als je dit doet zie je wat er fout gaat, of niet.[/quote]

op de een of andere manier krijg ik dan nog steeds alleen maar die foutmelding
Als je je code iets anders opbouwt, kun je het eerder gegeven advies, het echoen van de query, heel makkelijk opvolgen:
<?php
$rem_dot = 'voorbeeld';
$sql = "
INSERT INTO ".$rem_dot." (url, gespiderd)
VALUES ('" . $link . "', '0')
";

if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br>In query: '.$sql);
}
?>
ps. Het is altijd verstandig om de query eerst in een aparte variabele ($sql) te zetten alvorens hem met mysql_query() uit te voeren.
Blanche schreef op 16.11.2007 21:31

ps. Het is altijd verstandig om de query eerst in een aparte variabele ($sql) te zetten alvorens hem met mysql_query() uit te voeren.


Dit heeft alle foutmeldingen laten verdwijnen, maar de data wordt niet weggeschreven in de tabel
Zet nu de query eens op het scherm door $sql te echoen. Klopt die query dan?
En je weet zeker dat de fouthandeling zijn werk goed doet?

Je kunt ook nog even met mysql_affected_rows() controleren hoeveel records er in de database zijn weggeschreven. Dit zal normaalgesproken een 1 opleveren.
Blanche schreef op 16.11.2007 21:55
Zet nu de query eens op het scherm door $sql te echoen. Klopt die query dan?


Ik krijg de volgende errors:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(url, gespiderd) VALUES ('style.css', '0')' at line 1
In query: INSERT INTO (url, gespiderd) VALUES ('style.css', '0')

en:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(url, link) VALUES ('http://www.voorbeeld.nl';, 'style.css')' at line 1
In query: INSERT INTO (url, link) VALUES ('http://www.voorbeeld.nl';, 'style.css')

Dus het gebruik van de variabele is nog steeds niet correct

[CODE]
<?php
$rem_dot = 'voorbeeld'
$add_links_nl = 'voorbeeld2'

$sql3 = "
INSERT INTO ".$rem_dot." (url, gespiderd)
VALUES ('" . $link . "', '0')
";

if(!$res = mysql_query($sql3)){
trigger_error(mysql_error().'<br>In query: '.$sql3);
}

$sql4 = "
INSERT INTO ".$add_links_nl." (url, link)
VALUES ('" . $url . "', '" . $link . "')
";

if(!$res = mysql_query($sql4)){
trigger_error(mysql_error().'<br>In query: '.$sql4);
}
?>
mod-edit

Niet bumpen, please!

Ik zal bij deze even de gehele code van de spider posten...

De fout zit hem dus bij de variabelen in regel 75 en 83

[CODE]
<?php

$rem_dot = 'paginas';
$add_links_nl = 'pagina_links';

/*
Deze functie haalt de tekst van een pagina op.
*/
function getBron($url){

$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$bestand = curl_exec($ch);
curl_close($ch);

return $bestand;

}

/*
Deze functie haalt de links uit een tekst.
*/
function getLinks($url){

$pagina = getBron($url);

$tag_lijst = array ();
$tag_lijst = explode(">", $pagina);

$links = array();
$regs = array();

while (list ($id, $htmlTag) = each($tag_lijst)){

if (stristr($htmlTag, "href")) {

preg_match("/(href)\s*=\s*[\'\"]?(([[a-z]{3,5}:\/\/(([.a-zA-Z0-9-])+(:[0-9]+)*))*([+:%\/\?~=&;\\\(\),._ a-zA-Z0-9-]*))(#[.a-zA-Z0-9-]*)?[\'\" ]?(\s*rel\s*=\s*[\'\"]?(nofollow)[\'\"]?)?/i", $htmlTag, $regs);

$links[] = $regs[2];

}

}

return stopLinksInDatabase($url, $links);

}

/*
Deze functie stopt de gevonden links in de database. Als er nieuwe pagina's
bij die links zitten, wordt dat ook opgeslagen.
*/
function stopLinksInDatabase($url, $links){

global $site;

while (list ($id, $link) = each($links)){

// Als link begint met een /, $site ervoor zetten
if (substr($link, 0, 1) == "/"){
$link = $site . $link;
}

// Als link begint met www, http:// er voor zetten
if (substr($link, 0, 3) == "www"){
$link = "http://" . $link;
}

// Laatste / weg indien aanwezig
if (substr($link, strlen($link) - 1, 1) == "/"){
$link = substr($link, 0, strlen($link) - 1);
}

if (strlen(trim($link)) > 0){

$sql3 = "
INSERT INTO ".$rem_dot." (url, gespiderd)
VALUES ('" . $link . "', '0')
";

if(!$res = mysql_query($sql3)){
trigger_error(mysql_error().'<br>In query: '.$sql3);
}

$sql4 = "
INSERT INTO ".$add_links_nl." (url, link)
VALUES ('" . $url . "', '" . $link . "')
";

if(!$res = mysql_query($sql4)){
trigger_error(mysql_error().'<br>In query: '.$sql4);
}

}

}

return true;

}

/*
Deze functie zorgt ervoor dat alle pagina's die nog niet gespidered
zijn gespidered worden.
*/
function controleerPaginas(){

$result = mysql_query(" SELECT *
FROM paginas
WHERE gespidered = '0'") or die (mysql_error());

while ($obj = mysql_fetch_object($result)){

getLinks($obj->url);

}

return true;

}

mysql_connect("localhost", "", "") or die (mysql_error());
mysql_select_db("") or die (mysql_error());

$site = "http://www.voorbeeld.nl";;

// Bepaal de links op de homepage
getLinks("http://www.voorbeeld.nl";);

// Volg tot 3 keer toe de nieuw gevonden links
for ($i = 1; $i <= 3; $i++){

controleerPaginas();

}

mysql_close();
?>
Zet eens
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
boven aan je script. De queries staan in een functie en de gebruikte variabelen erbuiten. En voor zover ik zo snel zag heb je die nergens global gemaakt...

Dat blijkt ook uit de query: de tabelnaam wordt niet ingevuld.
Blanche schreef op 17.11.2007 09:56
Zet eens
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
boven aan je script. De queries staan in een functie en de gebruikte variabelen erbuiten. En voor zover ik zo snel zag heb je die nergens global gemaakt...

Dat blijkt ook uit de query: de tabelnaam wordt niet ingevuld.


Je hebt gelijk betreffende die globals, dus nu heb ik even de variabelen binnen de functie geplaatst.

$rem_dot = 'ictronicsnl';
$add_links_nl = 'ictronicsnl_links';

$sql4 = "3
INSERT INTO ".$rem_dot." (url, gespidered)
VALUES ('" . $link . "', '0')
";

$sql4 = "
INSERT INTO ".$add_links_nl." (url, link)
VALUES ('" . $url . "', '" . $link . "')
";

mysql_query($sql3);
mysql_query($sql4);

--------------------------------------------

"mysql_query($sql4); " geeft een correcte uitvoer, maar "mysql_query($sql3);" niet, waarom???
Eh $sql3 bestaat niet?

Verder: controleer altijd of een query gelukt is. Zo niet, geef dan een foutmelding met mysql_error().
<?php
$sql = // de query
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br>In query: '.$sql);
}
?>

Reageren