Hallo,

Ik wil een formulier opzetten waarbij je een artikel in de database steekt.
Er is ook een kolom categorie.

In het formulier moet je eerst kiezen onder welke categorie het artikel valt dat je in de database wil steken.

Je krijgt dus eerst een selectieblokje waar je de categorie kiest.
Maar daar krijg ik een melding:

Fatal error: Call to a member function query() on null in /customers/5/f/b/van.be/httpd.www/test2.php on line 36


Kan iemand mij helpen om dit werkend te krijgen aub?

<?php 
	include"../connection.php";
	
	$Categrorie = $_POST['Categorie'];
	$machinenaam = $_POST['machinenaam'];
	$hoofdafb = $_POST['hoofdafb'];
	$hoofdafb_alt = $_POST['hoofdafb_alt'];
	$afbklein1 = $_POST['afbklein1'];
	$afbklein1_alt = $_POST['afbklein1_alt'];
	$afbklein2 = $_POST['afbklein2'];
	$afbklein2_alt = $_POST['afbklein2_alt'];
	$afbklein3 = $_POST['afbklein3'];
	$afbklein3_alt = $_POST['afbklein3_alt'];
	$afbklein4 = $_POST['afbklein4'];
	$afbklein4_alt = $_POST['afbklein4_alt'];
	$machine_omsch = $_POST['machine_omsch'];
	$spanning = $_POST['spanning']; 
	$machinegewicht = $_POST['machinegewicht'];
	$bouwjaar = $_POST['bouwjaar']; 
	
	$sql = "INSERT INTO TweedehandsMach (Categorie , machinenaam, hoofdafb, hoofdafb_alt, afbklein1, afbklein1_alt, afbklein2, afbklein2_alt, afbklein3, afbklein3_alt, afbklein4, afbklein4_alt, machine_omsch, spanning, machinegewicht, bouwjaar)
	VALUES('".$_POST['Categorie']."', '".$_POST['machinenaam']."', '".$_POST['hoofdafb']."','".$_POST['hoofdafb_alt']."','".$_POST['afbklein1']."', '".$_POST['afbklein1_alt']."', '".$_POST['afbklein2']."', '".$_POST['afbklein2_alt']."', '".$_POST['afbklein3']."', '".$_POST['afbklein3_alt']."', '".$_POST['afbklein4']."', '".$_POST['afbklein4_alt']."', '".$_POST['machine_omsch']."', '".$_POST['spanning']."', '".$_POST['machinegewicht']."', '".$_POST['bouwjaar']."')";
	
	if ($conn->query($sql) === TRUE){
		echo "artikel werd succesvol toegevoegd.";
	} else {
		echo "Er liep iets fout." . $sql . "<Br>" . $conn->error;
	}
	
	$conn->close();
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">
<fieldset>
    <label>De categorie waaronder de machine valt:
    <?php 
		$query = "SELECT catNaam FROM CAT";
		$result = mysql_query($query) or die(mysql_error()."[".$query."]");
		?>
		<select name="Categorie">
		<?php 
		while ($row = mysql_fetch_array($result))
			{
    	echo "<option value='".$row['path']."'>'".$row['catNaam']."'</option>";
		}
		?>        
		</select>
    </label> 
<Br><Br> 
    <label>Naam van de machine<input type="text" name="machinenaam"></label><Br>
     <label>Kies de hoofdafbeelding  (logo)<input type="file" name="hoofdafb" size="40"></label><Br>
     <label>Alt tekst<input type="text" name="hoofdafb_alt"></label>
     <Br><br>
     <label>Kies een eerste afbeelding  (logo)<input type="file" name="afbklein1" size="40"></label><Br>
     <label>Alt tekst<input type="text" name="afbklein1_alt"></label>
     <Br>
     <label>Kies een 2e afbeelding  (logo)<input type="file" name="afbklein2" size="40"></label><Br>
     <label>Alt tekst<input type="text" name="afbklein2_alt"></label>
     <Br>
     <label>Kies een 3e afbeelding  (logo)<input type="file" name="afbklein3" size="40"></label><Br>
     <label>Alt tekst<input type="text" name="afbklein3_alt"></label>
     <Br>
     <label>Kies een 4e afbeelding  (logo)<input type="file" name="afbklein4" size="40"></label><Br>
     <label>Alt tekst<input type="text" name="afbklein4_alt"></label><Br>
     <Br>
     <label>Omschrijving:<Br>
     <textarea name="machine_omsch" rows="10" cols="50"></textarea></label><Br>
     <label>Spanning <input type="text" name="spanning"></label><Br>
    <label>Gewicht <input type="text" name="machinegewicht"></label><Br>
    <label>Afmetingen (in CM) <input type="text" name="machineafmeting"></label><Br>
    <label>Bouwjaar <input type="text" name="bouwjaar"></label><Br>
</fieldset>
<input type="submit" value="Toevoegen"><input type="reset" value="Annuleren">
</form>

Omdat je na het POST'en direct je pagina ververst, vermoed ik?
Wanneer krijg je die melding precies?
Die melding staat daar meteen, van zodra je op de pagina komt.
Dat zou sterk zijn, want je controleer eerst of je formulier is verstuurd.
Of je hebt teveel gesleuteld aan je code die we nog niet ingezien hebben.
Inderdaad, het was Chrome die nog niet mee was...
Zonet bekeken in Safari en daar had ik het niet.

Nu de afbeeldingen nog. Ik probeer eerst verder met hetgeen je hierboven vertelde.
In beide browsers zou het precies hetzelfde moeten werken. PHP wordt namelijk door de server uitgevoerd, en niet door de browser.
- Ariën - op 10/10/2017 14:23:41

Je action-attribuut kan prima leeg blijven als het uitvoer plaatsvindt in hetzelfde script.


Voor HTML5 geldt dat de action attribuut helemaal weggelaten mag worden en als die wel gebruikt wordt dan mag die juist niet leeg zijn. bron

@Marco: Beetje jammer dat je in je voorbeeld midden in de HTML je functionaliteiten plempt..
Zou het mogelijk zijn dit stukje in een meer beginnerstaal uit te leggen aub?

Je zorgt voor een extra veld in je foto-tabel met de naam 'tijdelijke-hash'. Je zorgt dat al je foto's de tijdelijke hash krijgen. Het ID-nummer van je machine die je aan je foto's wilt koppelen weet je immers nog niet, maar de hash wel. Zodra je het nieuwsbericht ook daadwerkelijk hebt opgeslagen, kan je met mysqli_insert_id() achterhalen welke ID-nummer deze heeft gekregen, en aan de hand van de aangemaakte hash kan je dit ID-nummer dan ook in de afbeeldingen-tabel gebruiken bij de foto's.
Op welk punt snap je het niet?

Reageren