Wat is de bedoeling? Een csv file met daarin Naam, Voornaam, geboortedatum, bestandsnaam. Er is een bestaande database waarin die Naam al dan niet voorkomt. Zit die Naam, geboortedatum al in de database dan moet die geupdated worden met de bestandsnaam (een pdf file). Indien niet dan moet er een nieuw record aangemaakt worden met de gegeven variabelen.
Code staat hieronder. Ik krijg geen foutmeldingen. Het script wordt blijkbaar uitgevoerd. Ik zie al de lijnen die in de csv zitten maar geen enkel wordt geupdated of bijgevoegd. Ziet er iemand waar ik in de fout ga? Alvast bedankt voor eventuele tips

<?php
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
	die("verbinding mislukt: ".$conn->connect_error);
}

if(isset($_POST['importSubmit'])){
    
    // Toestane mime types
    $csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
    
    // Valideren als het een toegestane csv file is.
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
        
        // If the file is uploaded
        if(is_uploaded_file($_FILES['file']['tmp_name'])){
            
            // Open uploaded CSV file in read-only mode
            $csvFile = fopen($_FILES['file']['tmp_name'], 'r');
            
            // Skip the first line
            fgetcsv($csvFile);
            
            // Haal data uit CSV file lijn per lijn
            while(($line = fgetcsv($csvFile)) !== FALSE){ 
                // Get rij data
                $naam   = $line[0]; 
                $voornaam  = $line[1];
                $gebdatum = $line[2];
                $bestand = $line[3];
				// Hier worden nog enkele vaste variabelen gemaakt.
                $gebgem = "/";
				$overldatum = "00-00-0000";
				$overlgem = "/";
				$site = "https://****.be/";
				$map = "weterring/hk-wr-data/";
				$verz = "hk-westerring";
				$type = "RB";
				// Uitlezen van de gegevens in de csv
				echo $naam." ".$voornaam." ".$gebdatum." ".$bestand."<br>";
			
                // Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
                $sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
                $result = $conn->query($sqlprev);
				//$prevResult = $db->query($prevQuery);
                
                if ($result->num_rows >= 0)
					{
                    // Update member data in the database
                    $sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
                }else{
                    /*Insert member data in the database
					Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autincrement.
					Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
					*/

					$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");	
					$idr=fgets($mijnbestand);
					echo $idr;
                    $sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type) 
					VALUES ('".$idr."',
							'".$naam."',
							'".$voornaam."',
							'".$gebdatum."',
							'".$gebgem."',
							'".$overldatum."',
							'".$overlgem."',
							'".$site."',
							'".$map."',
							'".$bestand."',
							'".$verz."',
							'".$type."')";
					
					
					$idr=$idr+1;
					fwrite($mijnbestand, $idr);
					fclose($mijnbestand);
                }
				
            }
            
            // Close opened CSV file
            fclose($csvFile);
            
            $qstring = '?status=succ';
        }else{
            $qstring = '?status=err';
        }
    }else{
        $qstring = '?status=invalid_file';
    }
}

// Redirect to the listing page
// header("Location: csvupload.php".$qstring);
Je moet de query uitvoeren! Dat gebeurt niet!
Hoe bedoel je. Gebeurt dat dan niet vanaf regel 47. Kijken of er records aanwezig zijn, zo ja updaten, zo nee aanvullen? Ik zie niet hoe ik het anders kan doen. Voorbeeldje indien mogelijk.
Je INSERT en UPDATE query doet niks. Je bouwt hem enkel op. Dat is niet voldoende.
Ik zou eerst zorgen dat je database weet dat de combinatie naam+geboortedatum unique moet zijn.
Dat kun je in je tabel namelijk aangeven.

Het opnieuw inserten van een record met dezelfde naam en geb.datum combinatie zal dan ook mislukken.

Je query wordt dan (in 1x)

INSERT INTO rouwbrief
(naam, geboortedatum, etc, bestandsnaam )
VALUES ('X', 'Y', 1, 'file.pdf')
ON DUPLICATE UPDATE bestandsnaam = 'file.pdf' 


https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

Dat zal sneller zijn dan stuk voor stuk de records op te halen om te zien of ze al bestaan: dat kan de database zelf ook regelen.

[size=xsmall]Toevoeging op 06/08/2022 19:13:23:[/size]

en het is wel handigom er vanuit te gaan dat bijvoorbeeld de naam best eens een ' zou kunnen bevatten....
Ondertussen ben ik al iets verder. Al had een voorbeeldje ook beter geholpen. Maar soit. Ondertussen doet hij wel de update maar hij vult de records niet aan. Ik krijg volgende foutmelding:
Error updating record: Incorrect integer value: '' for column `fv_vl_ardennen_berouwbrief`.`rouwbrief`.`IDR` at row 1Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf
IDR is in de database Autoincrement (integer van 8 posities). Dus het getal heb ik in een bestandje telleridr.txt gestoken.
De bedoeling is dat hij het getal leest, het gebruikt om het record in te vullen en dan dat het getal met 1 verhoogd wordt en dan terug wordt weggeschreven in mijn tellerbestand voor volgend gebruik. Daar moet ik nu een oplossing voor vinden.
@Ivo P. Ik wel wel uw oplossing proberen maar ik vind niet hoe in mijn PHP Admin hoe ik naam en geboortedatum uniek kan maken. Elk afzonderlijk wel maar de familienaam kan meerdere keren voorkomen en ook de geboortedatum. Hoe ik die combinatie moet doen snap ik niet.
Vergeet dat bestand en maak het IDR veld autoincrement.
Het wordt tenslotte al met 1 verhoogd.

Tenzij dat nummer ook elders wordt gebruikt als index, kan je het IDR op deze manier aanpassen.

 SET @var_name = 13018685;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1;


IDR verder niet gebruiken bij INSERT.

Dan:
Regel 51 is ALTIJD waar als een SELECT wordt gedaan.
Of er nu wel of geen record bestaat, >= 0 is altijd waar, waarna een UPDATE volgt op een mogelijk niet bestaand record.

En de IDR die je terugkrijgt, kun je gebruiken in de WHERE van de UPDATE. Wat natuurlijk niet lukt als het record niet bestaat.

En vergeet niet om de update en insert ook uit te voeren. Zie regel 48 waar je het wel doet.
Ondertussen deze code:
<?php
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
	die("verbinding mislukt: ".$conn->connect_error);
}

if(isset($_POST['importSubmit'])){
    
    // Toestane mime types
    $csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
    
    // Valideren als het een toegestane csv file is.
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
        
        // If the file is uploaded
        if(is_uploaded_file($_FILES['file']['tmp_name'])){
            
            // Open uploaded CSV file in read-only mode
            $csvFile = fopen($_FILES['file']['tmp_name'], 'r');
            
            // Skip the first line
            fgetcsv($csvFile);
            
            // Haal data uit CSV file lijn per lijn
            while(($line = fgetcsv($csvFile)) !== FALSE){ 
                // Get rij data
                $naam   = $line[0]; 
                $voornaam  = $line[1];
                $gebdatum = $line[2];
                $bestand = $line[3];
				// Hier worden nog enkele vaste variabelen gemaakt.
                $gebgem = "/";
				$overldatum = "00-00-0000";
				$overlgem = "/";
				$site = "https://xxxxx.be/";
				$map = "weterring/hk-wr-data/";
				$verz = "hk-westerring";
				$type = "RB";
				// Uitlezen van de gegevens in de csv
				echo $naam." ".$voornaam." ".$gebdatum." ".$bestand.": ";
			
                // Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
                $sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
                $result = $conn->query($sqlprev);
				//$prevResult = $db->query($prevQuery);
                
                if ($result->num_rows > 0)
					{
                    // Update member data in the database
                    $sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
					if (mysqli_query($conn, $sqlupd)) {
					echo "Record met succes geupdated: " . "<br>";
					} else {
					echo "Error updating record: " . mysqli_error($conn). "<br>";
}
                }else{
                    /*Insert member data in the database
					Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autoincrement.
					Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
					*/
					$mijnbestand = fopen("telleridr.txt", "r") or die("Kan bestand niet openen!");	
					$idr = (int)fread($mijnbestand,30);
					fclose($mijnbestand);
					echo $idr;
					
                    $sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type) 
					VALUES ('".$idr."',
							'".$naam."',
							'".$voornaam."',
							'".$gebdatum."',
							'".$gebgem."',
							'".$overldatum."',
							'".$overlgem."',
							'".$site."',
							'".$map."',
							'".$bestand."',
							'".$verz."',
							'".$type."')";
					if (mysqli_query($conn, $sqlins)) {
					echo "Record met succes bijgevoegd: " . "<br>";
					} else {
					echo "Error invoegen record: " . mysqli_error($conn). "<br>";
}
					
					$idr=$idr+1;
					$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");	
					fwrite($mijnbestand, $idr);
					fclose($mijnbestand);
                }
				
            }
            
            // Close opened CSV file
            fclose($csvFile);
            
            $qstring = '?status=succ';
        }else{
            $qstring = '?status=err';
        }
    }else{
        $qstring = '?status=invalid_file';
    }
}

// Redirect to the listing page
// header("Location: csvupload.php".$qstring);



Maar ik krijg de volgende meldingen:
Abelleyt Lucia 27-02-1901 Abelleyt Lucia 1901-02-27.pdf: Record met succes geupdated:
Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf: 1Error invoegen record: Duplicate entry '1' for key 'PRIMARY'
Achtergael Alex 06-08-1928 Achtergael Alex 1928-08-06.pdf: 2Error invoegen record: Duplicate entry '2' for key 'PRIMARY'
Achtergaele Bertrand 05-02-1930 Achtergaele Bertrand 1930-02-05.pdf: 3Error invoegen record: Duplicate entry '3' for key 'PRIMARY'
Ackerman Godelieve 15-03-1930 Ackerman Godelieve 1930-03-15.pdf: 4Error invoegen record: Duplicate entry '4' for key 'PRIMARY'
Adam Achiel 16-09-1909 Adam Achiel 1909-09-16.pdf: Record met succes geupdated:
Adam Anna Maria 27-07-1914 Adam Anna Maria 1914-07-27.pdf: 5Error invoegen record: Duplicate entry '5' for key 'PRIMARY'
Adam Clementine 10-01-1876 Adam Clementine 1876-01-10.pdf: Record met succes geupdated:
Adam Denise 12-07-1925 Adam Denise 1925-07-12.pdf: Record met succes geupdated:
Adam Imma 01-08-1914 Adam Imma 1914-08-01.pdf: Record met succes geupdated:
Adam Irena 13-10-1911 Adam Irena 1911-10-13.pdf: 6Error invoegen record: Duplicate entry '6' for key 'PRIMARY'
Adam Jozef 15-09-1941 Adam Jozef 1941-09-15.pdf: Record met succes geupdated:
Adam Jules 05-12-1918 Adam Jules 1918-12-05.pdf: Record met succes geupdated:
Adam Margareta 12-05-1914 Adam Margareta 1914-05-12.pdf: Record met succes geupdated:
Adam Remi 05-05-1883 Adam Remi 1883-05-05.pdf: Record met succes geupdated:
Adam Virginie Gabrielle 09-03-1907 Adam Virginie Gabrielle 1907-03-09.pdf: 7Record met succes bijgevoegd:
Adams Armand Jerome Michel 27-09-1925 Adams Armand Jerome Michel 1925-09-27.pdf: Record met succes geupdated:
Adriaens Elsa 10-02-1913 Adriaens Elsa 1913-02-10.pdf: Record met succes geupdated:
Adriaens Gabrielle Maria 20-05-1886 Adriaens Gabrielle Maria 1886-05-20.pdf: 8Error invoegen record: Duplicate entry '8' for key 'PRIMARY'
De teller wordt blijkbaar niet gelezen. Dus ga ik de gesuggereerde oplossing eens uitproberen.
Maar het zal voor morgen zijn.
Sluit je PHP-code ;-)
Volgens mij heb ik dat netjes gedaan, Ik heb gewoon gebruikt wat ik kon gebruiken.
 

// Redirect to the listing page
// header("Location: csvupload.php".$qstring);[/code]

Maar ik krijg de volgende meldingen:
Abelleyt Lucia 27-02-1901 Abelleyt Lucia 1901-02-27.pdf: Record met succes geupdated:
Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf: 1Error invoegen record: Duplicate entry '1' for key 'PRIMARY'
Achtergael Alex 06-08-1928 Achtergael Alex 1928-08-06.pdf: 2Error invoegen record: Duplicate entry '2' for key 'PRIMARY'

[size=xsmall]Toevoeging op 07/08/2022 09:40:37:[/size]

@Adoptive Solution
Ik zet dus deze code:
 SET @var_name = 13018685;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1; 

net na lijn 61.
Ik probeer het uit.
Voor wie het wil proberen.
Let op : de kolomnamen zijn aangepast t.o.v. de originele code

De table code :

DROP TABLE IF EXISTS `rouwbrief`;
CREATE TABLE `rouwbrief` (
  `IDR` bigint(20) NOT NULL AUTO_INCREMENT,
  `Naam` varchar(255) NOT NULL,
  `Voornaam` varchar(255) NOT NULL,
  `Geboortedatum` date NOT NULL,
  `GeboorteGemeente` varchar(255) NOT NULL,
  `Overledendatum` date NOT NULL,
  `OverledenGemeente` varchar(255) NOT NULL,
  `Site` varchar(255) NOT NULL,
  `Map` varchar(255) NOT NULL,
  `Bestandsnaam` varchar(255) NOT NULL,
  `Verzameling` varchar(255) NOT NULL,
  `Type` varchar(255) NOT NULL,
  PRIMARY KEY (`IDR`)
) ENGINE=InnoDB AUTO_INCREMENT=13018685 DEFAULT CHARSET=utf8mb4;


Het csv tekstbestand :

Let op de datum velden.
Die zijn yyyy-mm-dd
Waren eerst dd-mm-yyyy

 naam,voornaam,gebdatum,bestand
Abelleyt,Lucia,1901-02-27,Abelleyt Lucia 1901-02-27.pdf
Absolon,Albert,1905-06-30,Absolon Albert 1905-06-30.pdf
Achtergael,Alex,1928-08-06,Achtergael Alex 1928-08-06.pdf
Achtergaele,Bertrand,1930-02-05,Achtergaele Bertrand 1930-02-05.pdf
Ackerman,Godelieve,1930-03-16,Ackerman Godelieve 1930-03-15.pdf
Adam,Achiel,1909-09-16,Adam Achiel 1909-09-16.pdf
Adam,Anna Maria,1914-07-27,Adam Anna Maria 1914-07-27.pdf
Adam,Clementine 1876-01-10,Adam Clementine 1876-01-10.pdf
Adam,Denise,1925-07-12,Adam Denise 1925-07-12.pdf
Adam,Imma,1914-08-01,Adam Imma 1914-08-01.pdf
Adam,Irena,1911-10-13,Adam Irena 1911-10-13.pdf
Adam,Jozef,1941-09-15,Adam Jozef 1941-09-15.pdf
Adam,Jules,1918-12-05,Adam Jules 1918-12-05.pdf
Adam,Margareta,1914-12-05,Adam Margareta 1914-05-12.pdf
Adam,Remi,1883-05-05,Adam Remi 1883-05-05.pdf
Adam,Virginie Gabrielle,1907-03-09,Adam Virginie Gabrielle 1907-03-09.pdf
Adams,Armand Jerome Michel,1925-09-27,Adams Armand Jerome Michel 1925-09-27.pdf
Adriaens,Elsa,1913-02-10,Adriaens Elsa 1913-02-10.pdf
Adriaens,Gabrielle Maria,1886-05-20,Adriaens Gabrielle Maria 1886-05-20.pdf


Het PHP bestand :

<?php
if( isset( $_POST['importSubmit'] ) )
{
	echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
	echo '<pre>' . print_r( $_FILES, TRUE ) . '</pre>';
	include('connect.php');
	// Toestane mime types
	$csvMimes = [
		'text/x-comma-separated-values',
		'text/comma-separated-values',
		'application/octet-stream',
		'application/vnd.ms-excel',
		'application/x-csv',
		'text/x-csv',
		'text/csv',
		'application/csv',
		'application/excel',
		'application/vnd.msexcel',
		'text/plain'
	];
	echo '<pre>' . print_r( $csvMimes, TRUE ) . '</pre>';

		// If the file is uploaded && Valideren als het een toegestane csv file is.
		if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ) && in_array($_FILES['userfile']['type'], $csvMimes) )
		{
			echo "<p>File ". $_FILES['userfile']['name'] ." uploaded successfully.</p>\n";
			echo "<p>Displaying contents</p>\n";
			readfile($_FILES['userfile']['tmp_name']);
			// Open uploaded CSV file in read-only mode
			$csvFile = fopen( $_FILES['userfile']['tmp_name'], 'r');
			// Skip the first line
			fgetcsv($csvFile);
			// Haal data uit CSV file lijn per lijn
			while( ( $line = fgetcsv($csvFile ) ) !== FALSE )
			{
				echo '<pre>' . print_r( $line, TRUE ) . '</pre>';
				// Get rij data
				$Naam          = $line[0]; 
				$Voornaam      = $line[1];
				$Geboortedatum = $line[2];
				$Bestandsnaam  = $line[3];

				// Hier worden nog enkele vaste variabelen gemaakt.
				$GeboorteGemeente  = "/";
				$OverledenDatum    = "0000-00-00";
				$OverledenGemeente = "/";
				$Site              = "https://****.be/";
				$Map               = "weterring/hk-wr-data/";
				$Verzameling       = "hk-westerring";
				$Type              = "RB";

				// Uitlezen van de gegevens in de csv
				echo '<p>' . $Naam." ".$Voornaam." ".$Geboortedatum." ".$Bestandsnaam."</p>";

				// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
				$sqlselect = "SELECT IDR FROM rouwbrief WHERE Naam = '$Naam' AND Voornaam = '$Voornaam' AND Geboortedatum = '$Geboortedatum';";
				echo '<p>' . $sqlselect . '</p>';
				$result = $db->query( $sqlselect );

				if ( $result->num_rows > 0 )
				{
					$row = $result->fetch_object();
					// Update member data in the database
					$sqlupdate = "UPDATE rouwbrief SET Bestandsnaam = '" . $Bestandsnaam . "' WHERE IDR = " . $row->IDR;
					echo '<p>' . $sqlupdate . '</p>';
					$result = $db->query( $sqlupdate );
				} else {

					$sqlinsert = "INSERT INTO rouwbrief SET
						Naam          = '$Naam',
						Voornaam      = '$Voornaam',
						Geboortedatum = '$Geboortedatum',
						GeboorteGemeente  = '$GeboorteGemeente',
						OverledenDatum    = '$OverledenDatum',
						OverledenGemeente = '$OverledenGemeente',
						Site          = '$Site',
						Map           = '$Map',
						Bestandsnaam  = '$Bestandsnaam',
						Verzameling   = '$Verzameling',
						Type          = '$Type';";

					echo '<p>' . $sqlinsert . '</p>';
					$result = $db->query( $sqlinsert );
				} // end if else
			} // end while

			// Close opened CSV file
			fclose( $csvFile );
			$qstring = '?status=succ';
		} else {
			$qstring = '?status=err';
		}
	?>

<style>
table {
	border-collapse: collapse;
	border: 1px solid #999;
	}

th,td {
	border: 1px solid #999;
	padding: 0.500em;
	}
</style>

<table>
	<thead>
		<tr>
			<th>IDR</th>
			<th>Naam</th>
			<th>Voornaam</th>
			<th>Geboortedatum</th>
			<th>Bestandsnaam</th>
		</tr>
	</thead>
	<tbody>

	<?php
	$sqlSelect = 'SELECT IDR, Naam, Voornaam, Geboortedatum, Bestandsnaam FROM rouwbrief;';
	$result = $db->query( $sqlSelect );
	if ( $result->num_rows > 0 )
	{
		while ( $row = $result->fetch_object() )
		{
		?>

		<tr>
			<td><?php echo $row->IDR;           ?></td>
			<td><?php echo $row->Naam;          ?></td>
			<td><?php echo $row->Voornaam;      ?></td>
			<td><?php echo $row->Geboortedatum; ?></td>
			<td><?php echo $row->Bestandsnaam;  ?></td>
		</tr>

		<?php
		}
	} else {
		?>
		<tr>
			<td colspan="5">Geen data</td>
		</tr>
		<?php
	}
	?>
	</body>
	<tfoot></tfoot>
</table>

<hr />

<?php
}
?>

<form method="post" enctype="multipart/form-data">
bestand <input type="file" name="userfile" /><br /><br />
<input type="submit" name="importSubmit" value="submit" />
</form>


[size=xsmall]Toevoeging op 07/08/2022 13:57:40:[/size]

Erratum
Op regel 9 van het tekstbestand ontbrak achter Clementine een komma.

Reageren