Hallo,

Ik gebruik de volgende code om een url te doorzoeken. dit werkt allemaal prima :

<?

/* velden die doorzocht moeten worden: */
$url = 'http://test.nl';

/* bestaat de url reeds ? */
$result = mysql_query("SELECT page_id FROM page WHERE page_url = \"$url\"");
$row = mysql_fetch_array($result);

if( $row['page_id'] )
{
/* zo ja, gebruik dan de oude: */
$page_id = $row['page_id'];
}
else
{
/* zo nee, maak een nieuwe: */
mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")");
$page_id = mysql_insert_id();
}

/* verwijder alle HTML-tags: */
$url = strip_tags($url);
$url = ereg_replace('/&\w;/', '', $url);

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$url,$words);

?>

hierna volgt overigens nog een stuk extra code, maar anders werd het erg onoverzichtelijk om hier te plaatsen.

Hij haalt met deze code alle woorden op uit een url. Echter moet hij naast de url ook worden uit een naam (en later ook uit een omschrijving) halen, dit moet dus toegevoegd worden aan bovenstaande code, maar dat wil me niet echt lukken.

ik heb er zoiets van gemaakt :

<?

/* velden die doorzocht moeten worden: */
$url = 'http://bonnie.islive.nl/?p=629';
$naam = 'anita';

/* bestaat de url reeds ?? */
$result = mysql_query("SELECT page_id,naam_id FROM page,naam WHERE page_url = \"$url\",naam_oms = \"$naam\"");
$row = mysql_fetch_array($result);

if( $row['page_id'],$row['naam_id'] )
{
/* zo ja, gebruik dan de oude: */
$page_id = $row['page_id'];
$naam_id = $row['naam_id'];
}
else
{
/* zo nee, maak een nieuwe: */
mysql_query("INSERT INTO page (page_url),naam (naam_oms) VALUES (\"$url\",\"$naam\")");
$page_id = mysql_insert_id();
$naam_id = mysql_insert_id();
}

/* verwijder alle HTML-tags: */
$url = strip_tags($url);
$url = ereg_replace('/&\w;/', '', $url);

$naam = strip_tags($naam);
$naam = ereg_replace('/&\w;/', '', $naam);

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$url,$words);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words);

?>

ik heb al zoveel geprobeerd, maar snap er nu echt niets meer van. Iemand een suggestie om mij verder te helpen ?
Tja, dan hoop ik dat je z.s.m. toch een andere (lees: betere) werkmethode gaat hanteren. Met jouw huidige methode kost het je veel meer tijd en moeite om iets goeds te bouwen dan wanneer je de foutafhandeling als kern van jouw systeem neemt. Om eerlijk te zijn, zonder foutafhandeling valt er niets te testen omdat je nog helemaal geen systeem hebt dat kan worden getest. Dingen gaan goed of fout, dingen gaan niet goed of ..... , dat bestaat gewoon niet. Daarom mag de foutafhandeling nooit en te nimmer ontbreken, daar begin je mee.

Voorbeeldje:
<?
if($i == 1){
$string = 23;
}
?>
En nu vraag jij jezelf af waarom je een leeg scherm te zien krijgt. Dat kan meerdere oorzaken hebben: Je echoot niets of $i voldoet niet aan de voorwaarde. Met een foutafhandeling had je een else opgenomen en daar iets in een logboek gezet of met een echo op het scherm. Dat geeft duidelijkheid. error_reporting(E_ALL) had natuurlijk ook niet mogen ontbreken in dit voorbeeldje!
ik begrijp je punt. Ik ben er inmiddels uitgekomen en dit is het resultaat geworden :

naar mijn inziens is het zo vrij netjes geprogrammeerd, maar graag hoor ik ook jouw mening hierover.

ik heb overigens bewust nog geen gebruik gemaakt van "transaction" aangezien ik me daar eerst even wat verder in wil verdiepen

<?
/* velden die doorzocht moeten worden: */
$naam = 'robin test';
$url = 'http://bonnie.islive.nl/?p=629';


/* bestaat de url reeds ?? */
$result = mysql_query("SELECT page_url FROM page WHERE page_url = \"$url\"");
$row = mysql_fetch_array($result) or die("Fout in query");

if( $row['page_url'] )
{
/* zo ja, gebruik dan de oude: */
$page_id = $row['page_id'];
}
else
{
/* zo nee, maak een nieuwe: */
mysql_query("INSERT INTO naam (naam_oms) VALUES (\"$naam\")")or die("Fout in query");
$naam_id = mysql_insert_id();

mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")")or die("Fout in query");
$page_id = mysql_insert_id();
}

/* verwijder alle HTML-tags: */
$url = strip_tags($url);
$url = ereg_replace('/&\w;/', '', $url);

$naam = strip_tags($naam);
$naam = ereg_replace('/&\w;/', '', $naam);

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$url,$words1);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words2);

$words = array_merge($words1, $words2);

?>
Waarom houd je toch vast aan die SELECT-query terwijl je weet dat je daar niets aan hebt? Maak de boel UNIQUE in de database, dat is de enige juiste oplossing!

Hier een voorbeeldje hoe je een query uitvoert en controleert:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL); // mag nooit ontbreken!

// rest van je code en dan:
$query = "INSERT INTO naam (naam_oms) VALUES ('".$naam."')";
$result = mysql_query($query); //or die("Fout in query"); 'Fout in query', daar kun je toch niets mee of wel dan?

if (!$result && mysql_errno() == 1062) { // dubbele waarde
echo 'Naam bestond al, gegevens zijn niet toegevoegd';
}
elseif (!$result){
echo 'Query mislukt vanwege de volgende fout: '.mysql_error();
echo 'In query: '.$query;
}
else {
echo 'Naam succesvol toegevoegd.';
}
?>
ah bedoelde je het op die manier,ik had de waardes al wel op uniek gezet, maar had geen idee dat het ook zo kon....domme onwetendheid dus..

nogmaals bedankt.

ik loop nu weer tegen wat problemen aan tijdens het uitbreiden van het script,maar hier kom ik morgen op terug want word er nu even helemaal gek van ha ha

nou na circa 8 uur piekeren en proberen en uiteraard met veel hulp van jou/jullie ben ik er bijna uit. die tip met de error reporting is inderdaad echt super handig...super gewoon

ik heb nog 1 probleem. Ik krijg de volgende foutmelding :

Notice: Undefined offset: 10 in /var/www/vhosts/blablabla/toevoegentest.php on line 109

dit is de betreffende regel:

<?php

for( $j = 0; $words[$i][$j]; $j++ )

?>

het probleem ligt hem waarschijnlijk in de variable $words, die bestaat namelijk uit het volgende :

<?php

/* haal alle woorden eruit: */
preg_match_all("/(\b[\w+]+\b)/",$categorie,$words1);
preg_match_all("/(\b[\w+]+\b)/",$leeftijd,$words2);
preg_match_all("/(\b[\w+]+\b)/",$naam,$words3);
preg_match_all("/(\b[\w+]+\b)/",$naamsite,$words4);
preg_match_all("/(\b[\w+]+\b)/",$omschrijving,$words5);
preg_match_all("/(\b[\w+]+\b)/",$url,$words6);
preg_match_all("/(\b[\w+]+\b)/",$website,$words7);
preg_match_all("/(\b[\w+]+\b)/",$woonplaats,$words8);

$words = array_merge($words1, $words2, $words3, $words4, $words5, $words6, $words7, $words8);

?>

maar naar mijn inziens is er niets mis met bovenstaande code of zie ik dit verkeerd ?
<?php
for( $j = 0; $words[$i][$j]; $j++ )
?>

Het tweede deel van een for loop hoort een conditie te bevatten en bij jou staat er alleen een variabele. Zodra $j 10 wordt, gaat het fout.
bedankt voor je reactie, echter begrijp ik het niet helemaal. Hoe weet je namelijk dat het fout gaat zodra $j 10 word ? die logica ontbreekt me eerlijk gezegd.

ik heb hier al gekeken : http://nl2.php.net/manual/nl/control-structures.for.php en wat op google gezocht maar daar werd ik niet veel wijzer van.

Bedoel je dan dat het zoiets moet worden ?

<?php
for( $j = 0; $words[$i][$j] <= 100; $j++ )
?>


het gedeelte bestaat overigens uit 2 regels, dus ik neem aan dat de andere regel dan ook aangepast dient te worden ?

<?php

for( $i = 0; $words[$i]; $i++ )
{
for( $j = 0; $words[$i][$j]; $j++ )
{

?>
Klopt, jij hebt in $words[$i]; en $words[$i][$j]; geen vergelijking staan en dat is wel de bedoeling:
Aan het begin van elke iteratie wordt expr2 geevalueerd. Als deze evalueert tot TRUE, dan gaat de loop verder en worden de geneste statements uitgevoerd. De execute van de loop stopt als de expressie evalueert tot FALSE.

for ($i = 1; $i <= 10; $i++) {
print $i;
}
In dit voorbeeldje moet $i kleiner of gelijk zijn aan 10 (TRUE) om $i op het scherm te zetten. Zodra $i groter is dan 10 (FALSE), zal de for-lus er mee stoppen.

Jij zult dus overal jouw for-lussen van de juiste syntax moeten voorzien.
super dat is helemaal duidelijk. Dus stel ik voeg een vergelijking toe met als resultaat onderstaande code.

Die vergelijking zorgt er dus voor dat de for lus stopt indien de 50 bereikt word. In onderstaand voorbeeld worden dus maximaal 50 woorden geindexeerd en daarna stopt de lus.

<?php

for( $i = 0; $words[$i] <= 50; $i++ )
{
for( $j = 0; $words[$i][$j] <= 50; $j++ )
{

?>

ik ben nu even op mijn werk maar zal het staks even uitproberen en kijken of de error hier inderdaad mee verdwijnt.
$words[$i] is wel heel wat anders dan $i.

Reageren