Databse insert met koppeltabel

Status
Niet open voor verdere reacties.

pieter53

Gebruiker
Lid geworden
1 jan 2007
Berichten
297
Alles is nog in het experimentele stadium maar dit zijn de eerste inserts.
In dit bestand zijn nog overbodige meldingen opgenomen, voor het geval het ergens fout kan gaan.
Dan kan ik tenminste zien tot hoe ver het goed gaat.

PHP:
<?php 
session_start(); // controle op gebruiker
if(!isset($_SESSION['pietjepuk'])){
	header("location:login.php");
exit;
}
?>

<!DOCTYPE html> 
<html lang="nl"> 
<head>
<meta charset="utf-8">
<title>Database input</title>
<meta name="author" content="P.Klein">
<meta name="keywords" content="binnenvaart">
<meta name="description" content="pietje">
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<link rel="stylesheet" type="text/css" href="../extra/algemeen.css">
</head>

<body>
<div class="tekst" style="text-align: left;">

<?php
	require_once "../extra/functions.php";
	require_once "vbconfig.php"; //functie db_connect = contact maken met de DB
			
	$titel = $vnaam = $anaam = $anaamc = $omschr = $begin = $eind = $urlext = $urlint = $note = $status = $status2 = $status3 = "";
	
	$titel = safe($_GET["titel"]);
	$vnaam = safe($_GET["voornaam"]);
	$anaam = safe($_GET["achternaam"]);
	$anaamc = cleanstr2($_GET["achternaam"]);
	$omschr = safe($_GET["omschrijving"]);
	$begin = safe($_GET["periode0"]);
	$eind = safe($_GET["periode1"]);
	$urlext = ($_GET["urlext"]);
	$urlint = ($_GET["urlint"]);
	$note = safe($_GET["note"]);
	
	

	$db = db_connect();
	global $db;


	$q1 = "INSERT INTO tbestand VALUES ('','$titel','$omschr','$begin','$eind','$urlext','$urlint','$note') "; 
	//'$anaamc'

	$result = mysqli_query($db,$q1);
	$status = mysqli_affected_rows($db);
	$idtb  = mysqli_insert_id($db);
	echo "Er is/zijn".$status." row(s) toegevoegd.<br><br>";

	$q2 = "INSERT INTO naam VALUES ('','$vnaam','$anaam','$anaamc') "; 

	$result2 = mysqli_query($db,$q2);
	$status2 = mysqli_affected_rows($db);
	$idnaam	 = mysqli_insert_id($db);
	echo "Er is/zijn".$status2." row(s) toegevoegd.<br><br>";

	$q3 = "INSERT INTO koppeltbnaam VALUES ('','$idtb','$idnaam') "; 

	$result3 = mysqli_query($db,$q3);
	$status3 = mysqli_affected_rows($db);
	echo "New record has id: " . mysqli_insert_id($db) ."<br>";
	echo "Er is/zijn".$status3." row(s) toegevoegd.<br><br>";

	
	
	
mysqli_free_result($result); //schijnt niet echt nodig te zijn....
 
mysqli_close($db);

// daarna verder met het toevoegen van filters.

$_SESSION['idtb']= $idtb;
header("location:filter.php?idtb=".$idtb);

?>

</div>
</body>
</html>

Misschien nieuwsgierig naar de functies safe en cleanstr2 ?

Function safe op advies van een ander toegepast:
PHP:
function safe($invoer) {
  $invoer = trim($invoer);
  $invoer = stripslashes($invoer);
  $invoer = htmlspecialchars($invoer);
  return $invoer;
}

Function cleanstr2 heeft te maken met bepaalde variaties in schrijfwijzen, het gebruik van speciale lettertekens en het correct alfabetisch plaatsen van resultaten.

PHP:
function cleanstr($zoekterm){
	$zoekterm = strtolower($zoekterm);
		$search = array("ñ","ð","ï","î","í","ì","ü","û","ú","ù","ë","ê","é","è","ç","à","â","á","ã","å","ä","æ","ß","Ø","ø","ö","õ","ô","ó","ò","š","œ","ÿ","ý"," ","'","&",'"',"@");

		$replace = array("n","o","i","i","i","i","u","u","u","u","e","e","e","e","c","a","a","a","a","a","a","ae","ss","O","o","o","o","o","o","o","s","oe","y","y","","","en","","");

		$woord = str_replace($search,$replace,$zoekterm);
		
	return $woord;
}

Misschien niet perfect, maar het werkt (en daar ben ik al heel blij mee....)
O ja, GET wordt nog vervangen door POST
 
Vergeet ik
PHP:
$urlext = ($_GET["urlext"]);
$urlint = ($_GET["urlint"]);

te voorzien van URLENCODE....
(de ouderdom komt met gebreken, helaas)
 
Die safe() functie van je is bedriegelijk, het beschermt je niet tegen SQL-injection en je vernachelt je invoer. Dat wil je gewoon NIET!

Gebruik gewoon mysqli_real_escape_string() en je zit goed (zolang je ook quotes om je value in je query gebruikt). Op je uitvoer kan je prima je HTML filteren.

Daarnaadt raad ik genummerde variabelen af. Noem het gewoon wat het doet.

En met welke reden wil je de accenten zoals ä é ù omzetten? Het lijkt mij niet wenselijk voor de opslag van een naam, tenzij het voor een slug in de URL is.
 
Laatst bewerkt:
De invoer is alleen voor de admin....
De functie 'safe' werd me door iemand aangeraden en nu is er iemand die het me afraadt :)
Ik denk dat ik jouw advies maar volg.

Danrnaadt raad ik genummerde variabelen af. Noem het gewoon wat het doet.
Je bedoelt $periode0, $periode1 ?
Ach, voor mij is het duidelijk en verder heeft er niemand iets mee te maken (maar je hebt wel gelijk).

En met welke reden wil je de accenten zoals ä é ù omzetten? Het lijkt mij niet wenselijk voor de opslag van een naam, tenzij het voor een slug in de URL is.

Het antwoord gaf ik al:
Function cleanstr2 heeft te maken met bepaalde variaties in schrijfwijzen, het gebruik van speciale lettertekens en het correct alfabetisch plaatsen van resultaten.
Sommige mensen kunnen geen afwijkende lettertekens zoals 'ø' invoeren en kiezen dan voor 'o',
Sommigen weten niet of het 'Scharten-Antink' of 'Scharten Antink' is, enz enz
Verder wordt Scharten Bolleboos alfabetisch voor Scharten bakker of Scharten-Antink geplaatst terwijl het er achter hoort.... (ten minste dat was een tijd geleden nog wel het geval)
De correcte invoer is opgeslagen in $anaam, de $anaamc is er om invoeren te alfabetiseren of met eerder invoeren te vergelijken.
 
Over de invoer met je vreemde safe() functie:

Het zal inderdaad voor de admin zijn, maar dat neemt niet weg dat een onverlaat hier gebruik kan maken van SQL-injection.
Of misschien doe je het wel zelf als je 's Hertogenbosch invult. Dan krijg je dus deze entities-troep in je database: & # 039; s Hertogenbosch. Daar kan je niet lekker mee werken. Gebruik daarom mysqli_real_escape_string(). Die past het escapen zelf toe bij de uitvoer.

(zelfs het forum hier kan niet met entities omgaan. Die maakt er weer een ' van, tenzij ik er spaties tussen zet :eek:)

Over het sorteren op de naam, volgens mij heeft MySQL geen enkel probleem met speciale tekens. Als je de juiste collatie tenminste gebruikt moet het geen problemen opleveren.

En over de genummerde variabelen: Stel dat je met iemand samenwerkt, en een paar handjes vol aan $variabele 1 t/m $var 26 hebt. Hoe moet diegene dan snel weten welke variabele welke inhoud heeft? Ook al werk je alleen in je code: Nu weet je het nog, maar hoe zit dat over een paar maanden, of een paar jaar?
 
Laatst bewerkt:
Ik ga me nog eens goed in mysqli_real_escape_string() verdiepen. Bedankt.

In feite geeft periode0 en periode1 eigenlijk precies aan wat de bedoeling is.
Boeken behandelen vaak een bepaalde periode, die periode is meestal niet met twee exacte jaartallen aan te duiden.
Periode0 bevat daarom een jaartal dat valt in de periode waarin de beschrijvingen beginnen, Periode1 doet hetzelfde voor het eind.
'Periodebegin' en 'Periodeeind' zijn echter aan de lange kant, 'perbeg' en 'pereind' zijn tamelijk onbegrijpelijk, dus vandaar mijn keus.
Ik heb ook gedacht aan 'begin' en 'eind' zonder periode, of 'start' en 'eind', maar dat wekt een indruk van exact te zijn terwijl dat zelden zo is. Want waar houdt het heden op?
 
Het ging mij om $result1, $result2 en $result3.

Die variabele die je voor de insert-query gebruikt kan je best wel recyclen.
 
Dat kan, ja.
Maar voor zover ik weet is dat niet nodig.
En als nu iemand een opmerking wilt plaatsen over de query gebruikt voor result1, 2, of 3
kan ik meteen vinden waar het over gaat, niet waar?
 
Tot je even stopt met programmeren en later verder gaat, een fout in je nummering maakt, en je verkeerde data ophaalt.
Wees gewoon duidelijk. Een beetje goede editor geeft bovendien ook een auto-complete aan met welke variabelen je wilt werken.
 
Aangezien het niet mijn dagelijkse hobby is en ik toch een beetje kort van memorie ben
tracht ik er een gewoonte van te maken elke stap van een kort commentaar te voorzien.
Het is wat werk, maar zelfs na een jaar of vijf weet je dan zo weer de draad op te pakken.
 
Met commentaar is niks mis. Sterker zelfs: Ik raad het iedereen zelfs aan.

PHP:
<?php
// Altijd een goed idee!

/*
Of over
meerdere
lijnen
*/
?>
 
Ik weet het.
Je denkt zo gauw; ik weet het wel, maar een dag later denk je soms al,
waar kwam dat ook weer vandaan?
 
Of als je een complex script heb (zoals mijn rechtensysteem-script). Dan heb ik na een paar jaar wel weer even een opfrissertje nodig over hoe het ook alweer werkte, zonder dat ik elke lijn weer moet doorlopen. Gelukkig heb ik dit gedocumenteerd in de comments.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan