Archief - MySQL: problemen bij het toevoegen van rijen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

stoffer

Legacy Member
Ik heb een php fileke gemaakt die van een textfile inleest en wanneer ik op een knop duw al die gegevens in een database zou moeten stoppen.
De elementen worden allemaal correct weergegeven, maar als ik op de knop duw zijn er bepaalde lijnen uit de text file die niet worden toegevoegd in de database.
(De anderen lijnen worden allemaal perfect toegevoegd)

1 van de lijnen die niet wordt toegevoegd:
Code:
Geocart;B;Car Atlas;Car Atlas;8522;Provincies Vlaams Brabant & Waals Brabant;Provinces du Brabant Wallon & Brabant Flamand;Ingebonden Stratenatlas : A5 formaat;Atlas des Rues relié : format A5;90-6736-263-8;14,95 €;6%;;BRABANT, VLAAMS-BRABANT, BRABANT-WALLON, AARSCHOT, AFFLIGEM, ALSEMBERG, ANDERLECHT, ARCHENNES, ASSE, ASSENT, ATTENHOVEN, ATTENRODE, AUDERGHEM, OUDERGEM, AUTRE-EGLISE, AVERBODE, BAAL, BAISY-THY, BAULERS, BEAUVECHAIN, BEERSEL, BEERT, BEGIJNENDIJK, BEIGEM, BEKKERZEEL, BEKKEVOORT, BELLINGEN, BERCHEM-SAINTE-AGATHE, SINT-AGATHA-BERGEM, BERG, BERTEM, BETEKOM, BEVER, BIEVENE, BIERBEEK, BIERGES, BIERGHES, BIEZ, BINKOM, BLANDEN, BOGAARDEN, BONLEZ, BOORTMEERBEEK, BORCHTLOMBEEK, BORNIVAL, BOSSUT-GOTTECHAIN, BOST, BOUSVAL, BOUTERSEM, BRAINE-L'ALLEUD, BRAINE-LE CHATEAU, BRAINE-LE-CHATEAU, BRUCARGO, BRUSSEGEM, BRUSSELS, BRUXELLES, BRUSSEL, BUDINGEN, BUIZINGEN, BUKEN, BUNSBEEK, CEROUX-MOUSTY, CHASTRE, CHASTRE-VILLEROUX-BLANMONT, CHAUMONT-GISTOUX, CLABECQ, CORBAIS, CORROY-LE-GRAND, CORTIL-NOIRMONT, COURT-SAINT-ETIENNE, COUTURE-ST.-GERMAIN, DEURNE, DIEGEM, DIEST, DILBEEK, DION-VALMONT, DONGELBERG, DORMAAL, DRIESLINTER, DROGENBOS, DUISBURG, DWORP, ELEWIJT, ELINGEN, ENINES, EPPEGEM, ERPS-KWERPS, ESSENE, ETTERBEEK, EVERBERG, EVERE, FOLX-LES-CAVES, FOREST, VORST, GAASBEEK, GALMAARDEN, GANSHOREN, GEETBETS, GELRODE, GENAPPE, GENTINNES, GENVAL, GEROMPONT, GLABAIS, GLABBEEK-ZUURBEMDE, GLIMES, GOETSENHOVEN, GOOIK, GRAND-ROSIERE-HOTTOMONT, GRAZEN, GREZ-DOICEAU, GRIMBERGEN, GROOT-BIJGARDEN, HAACHT, HAASRODE, HAEREN, HAREN, HAKENDOVER, HALLE, HALLE-BOOIENHOVEN, HAMME, HAMME-MILLE, HAUT-ITTRE, HEIKRUIS, HEKELGEM, HELECINE, HELEN-BOS, HERENT, HERFELINGEN, HERNE, HEVER, HEVERLEE, HEVILLERS, HOEGAARDEN, HOEILAART, HOELEDEN, HOFSTADE, HOLSBEEK, HOUTAIN-LE-VAL, HOUWAART, HUIZINGEN, HULDENBERG, HUMBEEK, HUPPAYE, INCOURT, ITTERBEEK, ITTRE, IXELLES, ELSENE, JANDRAIN-JANDRENOUILLE, JAUCHE, JAUCHELETTE, JETTE, JODOIGNE, JODOIGNE-SOUVERAINE, KAGGEVINNE, KAMPENHOUT, KAPELLE-OP-DEN-BOS, KAPELLEN, KEERBERGEN, KERSBEEK-MIKSOM, KESSEL-LO, KESTER, KOBBEGEM, KOEKELBERG, KORBEEK-DIJLE, KORBEEK-LO, KORTENAKEN, KORTENBERG, KORTRIJK-DUTSEL, KRAAINEM, KUMITCH, L'ECLUSE, LA HULPE, LAEKEN, LAKEN, LANDEN, LANGDORP, LASNE, LASNE-CHAPELLE-ST.-LAMBERT, LATHUY, LEEFDAAL, LEERBEEK, LEMBEEK, LENNIK, LEUVEN, LIEDERKERKE, LILLOIS-WITTERZEE, LIMAL, LIMELETTE, LINDEN, LINKEBEEK, LINSMEAU, LINTER, LONDERZEEL, LONGUEVILLE, LOONBEEK, LOT, LOUPOIGNE, LOUVAIN-LA-NEUVE, LOVENJOEL, LUBBEEK, MACHELEN, MALDEREN, MALEVES-SAINTE-MARIE-WASTINES, MARANSART, MARBAIS, MARILLES, MAZENZELE, MEENSEL-KIEZELGEM, MEERBEEK, MEISE, MELDERT, MELIN, MELKWEZER, MELLERY, MELSBROEK, MERCHTEM, MESSELBROEK, MOLENBEEK-SAINT-JEAN, SINT-JANS-MOLENBEEK, MOLENBEEK-WERSBEEK, MOLENSTEDE, MOLLEM, MONSTREUX, MONT-SAINT-GUIBERT, MONT-ST.-GUIBERT, NEDER-OVER-HEEMBEEK, NEDEROKKERZEEL, NEERHESPEN, NEERHEYLISSEM, NEERIJSE, NEERLINTER, NEERWINDEN, NETHEN, NIEUWENRODE, NIEUWRODE, NIL-ST.-VINCENT-ST.-MARTIN, NIVELLES, NODEBAIS, NODUWEZ, NOSSEGEM, O.-L..-V.-LOMBEEK, OETINGEN, OHAIN, OORBEEK, OPHAIN-BOIS-SEIGNEUR-ISAAC, OPHEYLISSEM, OPLINTER, OPPREBAIS, OPVELP, OPWIJK, ORBAIS, ORP-JAUCHE, ORP-LE-GRAND, ORSMAAL-GUSSENHOVEN, OTTENBURG, OTTIGNIES, OTTIGNIES-LOUVAIN-LA-NEUVE, OUD-HEVERLEE, OUDENAKEN, OUTGAARDEN, OVERHESPEN, OVERIJSE, PAMEL, PELLENBERG, PEPINGEN, PERK, PERWEZ, PEUTIE, PIETRAIN, PIETREBAIS, PLANCENOIT, QUENAST, RAMILLIES, RAMSDONK, RANSBERG, REBECQ, REBECQ-ROGNON, RELEGEM, RILLAAR, RIXENSART, ROSDAAL, ROSIERES, ROTSELAAR, ROUX-MIROIR, RUISBROEK, RUMMEN, SAINT-GERY, SAINT-GILLES, SINT-GILLIS, SAINT-JEAN-GEEST, SAINT-JOSSE-TEN-NOODE, SINT-JOOST-TEN-NODE, SAINT-REMY-GEEST, SAINTES, SART-DAMES-AVELINES, SCHAERBEEK, SCHAARBEEK, SCHAFFEN, SCHEPDAAL, SCHERPENHEUVEL, SCHERPENHEUVEL-ZICHEM, SINT-AGATHA-RODE, SINT-GENESIUS-RODE, RHODE-SAINT-GENESE, SINT-JORIS-WEERT, ST.-JORIS-WEERT, SINT-LAUREINS-BERCHEM, ST.-LAUREINS-BERCHEM, SINT-MARGRIETE-HOUTEM, ST.-MARGRIETE-HOUTEM, SINT-MARTENS-BODEGEM, ST.-MARTENS-BODEGEM, SINT-PIETERS-KAPELLE, ST.-PIETERS-KAPELLE, SINT-PIETERS-LEEUW, ST.-PIETERS-LEEUW, SINT-PIETERS-RODE,ST.-PIETERS-RODE, SINT-ULRIKS-KAPELLE, ST.-ULRIKS-KAPELLE, SINT-JORIS-WINGE, ST.-JORIS-WINGE, SINT-KATHERINA-LOMBEEK, ST.-KATHERINA-LOMBEEK, SINT-KWINTENS-LENNIK, ST.-KWINTENS-LENNIK, SINT-MAARTENS-LENNIK, ST.-MAARTENS-LENNIK, SINT-STEVENS-WOLUWE, ST.-STEVENS-WOLUWE, STEENHUFFEL, STEENOKKERZEEL, STERREBEEK, STRIJTEM, STROMBEEK-BEVER, TERALFENE, TERNAT, TERVUREN, TESTELT, THINES, THOREMBAIS-LES-BEGUINES, THOREMBAIS-SAINT-TROND, TIELT, TIELT-WINGE, TIENEN, TILDONK, TILLY, TOLLEMBEEK, TOURINNES-LA-GROSSE, TOURINNES-SAINT-LAMBERT, TOURINNES-ST.-LAMBERT, TREMELO, TUBIZE, TUBIZE-OISQUERCQ, UCCLE, UKKEL, VAALBEEK, VELTEM-BEISEM, VIEUX-GENAPPE, VILLERS-LA-VILLE, VILVOORDE, VIRGINAL-SAMME, VISSENAKEN, VLEZENBEEK, VOLLEZELE, VOSSEM, WAANRODE, WALHAIN, WALHAIN-SAINT-PAUL, WALHAIN-ST.-PAUL, WALSHOUTEM, WAMBEEK, WATERLOO, WATERMAEL-BOITSFORT, WATERMAAL-BOSVOORDE, WAUTHIER-BRAINE, WAVRE, WAYS, WEBBEKOM, WEERDE, WEMMEL, WERCHTER, WESPELAAR, WEZEMAAL, WEZEMBEEK-OPPEM, WIJGMAAL, WILSELE, WINKSELE, WOLUWE-SAINT-LAMBERT, SINT-LAMBRECHTS-WOLUWE, WOLUWE-SAINT-PIERRE, SINT-PIETERS-WOLUWE, WOLVERTEM, WOMMERSOM, ZAVENTEM, ZELLIK, ZEMST, ZETRUD-LUMAY, ZICHEM, ZOUTLEEUW;9789067362634;22

De kolommen worden gescheiden door de ";"
Is er een maximum toegelaten lengte qua tekst in de velden in een mySQL tabel?

killgore

Legacy Member
Ehm de code waarmee je dit doet kan handig zijn :)

en TEXT heeft idd een maximum lengte ;), kan 1111111111111111 tekens bevatten ( decimaal : 2^16-1 of 65,535), maar dunno of jij daar aan komt

stoffer

Legacy Member
Code:
	if ($action == "insert") {
		include("connect.php");
	}

	$handle = fopen("upd.txt", "r");
	while (!feof($handle)) {
		$buffer = fgets($handle);
		$lijn = str_replace(";;;;;;;",";-;-;-;-;-;-;",$buffer);
		$lijn = str_replace(";;;;;;",";-;-;-;-;-;",$lijn);
		$lijn = str_replace(";;;;;",";-;-;-;-;",$lijn);
		$lijn = str_replace(";;;;",";-;-;-;",$lijn);
		$lijn = str_replace(";;;",";-;-;",$lijn);
		$lijn = str_replace(";;",";-;",$lijn);
		$lijn = str_replace("€","",$lijn);
		$res = str_replace("%","",$lijn);
		$arr = split(";",$res);
		echo "<br>";
		$merk = $arr[0];
		$logo = $arr[1];
		$reeksnl = $arr[2];
		$reeksfr = $arr[3];
		$ref = $arr[4];
		$titelnl = $arr[5];
		$titelfr = $arr[6];
		$informatienl = $arr[7];
		$informatiefr = $arr[8];
		$isbn = $arr[9];
		$prijsincl = $arr[10];
		$btw = $arr[11];
		$foto = $arr[12];
		$keywords = $arr[13];
		$barcode = $arr[14];
		$exdoos = $arr[15];
		echo "<br>Merk: $merk";
		echo "<br>Logo: $logo";
		echo "<br>Reeks(nl): $reeksnl";
		echo "<br>Reeks(fr): $reeksfr";
		echo "<br>Ref: $ref";
		echo "<br>Titel: $titelnl";
		echo "<br>Titre: $titelfr";
		echo "<br>Informatie: $informatienl";
		echo "<br>Information: $informatiefr";
		echo "<br>Isbn: $isbn";
		echo "<br>Prijs: $prijsincl";
		echo "<br>Btw: $btw";
		echo "<br>Foto: $foto";
		echo "<br>Keywords: $keywords";
		echo "<br>Barcode: $barcode";
		echo "<br>Ex/Doos: $exdoos";

		if ($action == "insert") {
			$sql = "INSERT INTO catalogus (merk,logo,reeksnl,reeksfr,ref,titelnl,titelfr,informatienl,informatiefr,isbn,prijsincl,btw,foto,barcode,exdoos,keywords) VALUES ('$merk','$logo','$reeksnl','$reeksfr','$ref','$titelnl','$titelfr','$informatienl','$informatiefr','$isbn','$prijsincl','$btw','$foto','$barcode','$exdoos','$keywords')";
			$result = mysql_query($sql);
		}
	}
	fclose($handle);
	if ($action == "insert") {
		mysql_close();
		echo "<br>Items have been inserted correctly!";
	} else {
		echo "<form method='post'>";
		echo "<input type='hidden' name='action' value='insert'>";
		echo "<br><input type='submit' value='Insert into database'>";
		echo "</form>";
	}

Van de 137 records worden er 107 correct toegevoegd en alles wordt correct weergegeven op de pagina, enkel niet toegevoegd.

servi

Legacy Member
da's nogal logisch dat je niets van errors krijgt :

PHP:
<?php
if ($action == "insert") {
                        $sql = "INSERT INTO catalogus (merk,logo,reeksnl,reeksfr,ref,titelnl,titelfr,inf  ormatienl,informatiefr,isbn,prijsincl,btw,foto,bar  code,exdoos,keywords) VALUES ('$merk','$logo','$reeksnl','$reeksfr','$ref','$ti  telnl','$titelfr','$informatienl','$informatiefr',  '$isbn','$prijsincl','$btw','$foto','$barcode','$e  xdoos','$keywords')";
                        mysql_query($sql) or die ('fout :'.mysql_error().'<br />query:<br />'.$sql);
                }
?>

DarkBone

Legacy Member
$lijn = str_replace(";;;;;;;",";-;-;-;-;-;-;",$buffer);
$lijn = str_replace(";;;;;;",";-;-;-;-;-;",$lijn);
$lijn = str_replace(";;;;;",";-;-;-;-;",$lijn);
$lijn = str_replace(";;;;",";-;-;-;",$lijn);
$lijn = str_replace(";;;",";-;-;",$lijn);
$lijn = str_replace(";;",";-;",$lijn);

kan toch gerust vervangen worden door enkel dat laatste ????

$lijn = str_replace(";;",";-;",$lijn);

want immers ;; komt repetitief voor in ;;;;;;;;;;;

stoffer

Legacy Member
servi zei:
da's nogal logisch dat je niets van errors krijgt :

PHP:
<?php
if ($action == "insert") {
                        $sql = "INSERT INTO catalogus (merk,logo,reeksnl,reeksfr,ref,titelnl,titelfr,inf  ormatienl,informatiefr,isbn,prijsincl,btw,foto,bar  code,exdoos,keywords) VALUES ('$merk','$logo','$reeksnl','$reeksfr','$ref','$ti  telnl','$titelfr','$informatienl','$informatiefr',  '$isbn','$prijsincl','$btw','$foto','$barcode','$e  xdoos','$keywords')";
                        mysql_query($sql) or die ('fout :'.mysql_error().'<br />query:<br />'.$sql);
                }
?>

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 'Amérique','Wegenkaart : 1/4.000.000','Carte Routière : 1/4.000.
query:
INSERT INTO catalogus (merk,logo,reeksnl,reeksfr,ref,titelnl,titelfr,informatienl,informatiefr,isbn,prijsincl,btw,foto,barcode,exdoos,keywords) VALUES ('Geocart','A','Road Map','Road Map','125','Verenigde Staten van Amerika','Etats-Unis d'Amérique','Wegenkaart : 1/4.000.000','Carte Routière : 1/4.000.000','90-6736-182-8','9,90 ','6','-','9789067362429','- ','-')

alles tekst buiten ref,prijs, btw, barcode en isbn nummer

stoffer

Legacy Member
DarkBone zei:
$lijn = str_replace(";;;;;;;",";-;-;-;-;-;-;",$buffer);
$lijn = str_replace(";;;;;;",";-;-;-;-;-;",$lijn);
$lijn = str_replace(";;;;;",";-;-;-;-;",$lijn);
$lijn = str_replace(";;;;",";-;-;-;",$lijn);
$lijn = str_replace(";;;",";-;-;",$lijn);
$lijn = str_replace(";;",";-;",$lijn);

kan toch gerust vervangen worden door enkel dat laatste ????

$lijn = str_replace(";;",";-;",$lijn);

want immers ;; komt repetitief voor in ;;;;;;;;;;;

bij een oneven aantal ; lukt dat niet alsan dacht ik
maar de 2 voorlaatste lijnen zouden misschien wel goed genoeg kunnen zijn

killgore

Legacy Member
en daarvoor men beste heeft men de functie addslashes toegevoegd :).

dus:
$lijn = addslashes($lijn); voor je split :)

edit: dom van me: je fout was dus dat er ergens in je string ' voorkwam, waardoor hij buiten deze string kwam in je query :). addslashes maakt hier \' van ;).

DarkBone

Legacy Member
'Etats-Unis d'Amérique'

gaat er een belletje rinkelen ?
Handig toch hé het laten melden van fouten, is je al eens gezegd geweest dacht ik.

En over die puntkomma's:

;;;;;
wordt
;-;;;;
wordt
;-;-;;;
wordt
;-;-;-;;
wordt
;-;-;-;-;

Oneven of even, dat maakt dus niet uit...

*edit*
Het maakt dus wel uit (net uitgetest en lees niet reply hieronder), die str_replace werkt op zichzelf natuurlijk niet recursief, mijn fout, dom van me.
Mooie oplossing hieronder :p

killgore

Legacy Member
stoffer zei:
bij een oneven aantal ; lukt dat niet alsan dacht ik
maar de 2 voorlaatste lijnen zouden misschien wel goed genoeg kunnen zijn
Je zou een callback moeten doen dan, maar aangezien str_replace_callback ( nog) niet bestaat:
PHP:
while(strpos($lijn,";;") !== false)
{
	$lijn= str_replace(";;",";-;",$lijn);
}

Imho wel wat flexibeler he :).

edit: @darkbone, oneven maakt wel uit, str_replace werkt niet via callbacks :).
hij zoekt dus een instantie en vervangt die:
in ;;;;;
vindt hij 1 ;;, blijft nog ;;; over, vindt er nog 1, blijft nog ; over, vervangt hij niet, je zal dus ;-;;-;; krijgen :). (zoals je ziet heb je zelfs bij 4 al probs)

edit 2: let wel op de !== in de evaluatie, dit is zeer belangerijk, bij gewoon != krijg je nl. problemen als de positie van je eerste ;; 0 is :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan