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>

Dan moet ik eerst de afbeeldingen uploaden en eenmaal dat gedaan is kan je dan een machine ingeven, correct?
Of kan dit in 1 formulier?
Eerst zul je een machine in je database moeten opslaan voordat je een foto eraan kan koppelen.

Je weet immers nog niet meteen het MachineID-nummer welke die geuploade foto zal krijgen. Daarom is het handig om een extra veld te hebben in je Machine-tabel met de naam 'actief'. Hierin plaats je dan een 0 of een 1 wat betekent of deze wel of niet zichtbaar.

Uiteindelijk volgen er dus 3 bewerkingsacties:
- Machine opslaan met waarde '0' in het veld actief.
- Foto's uploaden
- Machine updaten met waarde '1' in het veld actief.

Of je zou het ook direct kunnen doen:
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.
Dan kan je de tijdelijke hash weer verwijderen, omdat je die niet meer nodig hebt.

Toevallig heb ik dit vandaag voor een eigen project uitgedokterd.

Enige nadeel: Je moet niet tussendoor je bewerkpagina afsluiten nadat je enkel maar geuploadt hebt, mocht dit een apart proces zijn.
Dat kan in principe in 1 formulier, maar kan iedereen machines toevoegen of enkel jij?
Machines toevoegen kan in principe gelijk en later de afbeeldingen, aangezien de afbeeldingen een ID moeten hebben met een verwijzing naar de goede machine.

Betreft de categorienaam, dat kan komen, doordat je "path" van de categorie meegeeft in de select options en die insert je in de database, dus niet de naam.
De bedoeling is dat ik alleen kan toevoegen.
En dan later met een login nog iemand
Zie mijn edit in mijn vorige bericht, dan kan je de foto's gelijk met de machines toevoegen in één menselijke opslaan-actie. Je maakt dan gewoon een tijdelijk ID aan.
Betreft de categorienaam, dat kan komen, doordat je "path" van de categorie meegeeft in de select options en die insert je in de database, dus niet de naam.

Ik heb het path vervangen door catNaam = opgelost :-D

[size=xsmall]Toevoeging op 10/10/2017 15:36:28:[/size]

Ariën ik ben aan het kijken wat een tijdelijke-hash is en hoe ik die kan toevoegen en ook wat een hash is ...
In het door mij uitgelegde upload-proces is het gewoon een tijdelijke identifier, omdat je het uiteindelijke ID-nummer van je machine nog niet weet.

Een hash is niets anders dan een rekenkundige opstelling van getallen en karakters die berekend zijn uit een bepaalde reeks getallen,zin of woord. Deze is niet terug te draaien waardoor het een 'hash' vormt, en het is dus geen encryptie omdat er niet kan worden teruggerekend.
Lees ook: https://nl.wikipedia.org/wiki/Hashfunctie

Wat je er voor dit doel inzet, maakt totaal niet uit, als het maar uniek is. En daarom gebruik ik md5(), de uniqid() voor de tijd in microseconden en een willekeurig getal met rand().
Voor opslaan van wachtwoorden is md5() tegenwoordig veel te zwak.

<?php
$uploadhash = md5(uniqid(rand(), true));
?>

Deze hash wordt als eerste samengesteld op de nieuws-aanmaak pagina, en moet gebruikt worden op het moment dat je de foto's in de database wilt koppelen. Omdat je na het opslaan van het gehele formulier deze identificatie-hash dus weet ($uploadhash) kan je na het INSERT'en alle foto's voorzien van de juiste machineID, omdat je die dan wel weet. De hash is niet meer nodig en kan je wissen uit de tabel.

Wist die hash zichzelf dan of moet dit manueel gebeuren?
(Moet ik dit trouwens niet in een andere topic zetten? of blijft dit duidelijk? )

Ik heb nu alles van de afbeeldingen uit mijn tabel gehaald en ook uit mijn formulier.
Dus hou ik nu dit over (wat werkt) Alleen toont deze constant : artikel werd succesvol toegevoegd.
Ook al werd er nog niets ingevuld of togevoegd.

Hoe zorg ik ervoor dat die zin enkel te zien is nadat er iets succesvol toegevoegd werd.


<?php 
	require_once("../connection.php");
	
if(isset($_POST['plaatsen'])){
	$Categrorie = mysqli_real_escape_string($conn,$_POST['Categorie']);
	$machinenaam = mysqli_real_escape_string($conn,$_POST['machinenaam']);
	$machine_omsch = mysqli_real_escape_string($conn,$_POST['machine_omsch']);
	$spanning = mysqli_real_escape_string($conn,$_POST['spanning']);
	$machinegewicht = mysqli_real_escape_string($conn,$_POST['machinegewicht']);
	$bouwjaar = mysqli_real_escape_string($conn, $_POST['bouwjaar']);
	 
	$sql = "INSERT INTO TweedehandsMach (Categorie , machinenaam, machine_omsch, spanning, machinegewicht, bouwjaar)
        VALUES('".$Categrorie."', '".$machinenaam."', '".$machine_omsch."', '".$spanning."', '".$machinegewicht."', '".$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="">
<fieldset>
    <label>De categorie waaronder de machine valt:
    	<select name="Categorie">
    	<?php 
            $query = $conn->query("SELECT * FROM CAT");
            while ($row = mysqli_fetch_array($query)){
                echo "<option value='".$row['catNaam']."'>".$row['catNaam']."</option>";    
            }
        ?>
		</select>
    </label> <Br><Br> 
      
    <label>Naam van de machine<input type="text" name="machinenaam" required></label><Br>
    
     <Br>
     <label>Omschrijving:<Br>
     <h6>Hier geef je een globale omschrijving in. Lt op het gebruik van zoekwoorden en maak er geen vakjargon van.<Br>
     Wat hier ook komt (in deze volgorde: afmetingen machine / gewicht machine / spanning machine / vemogen machine / capaciteit machine (indien van toepassing)</h6>
    <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" name="plaatsen" value="Toevoegen"/><input type="reset" value="Annuleren">
</form>
</body>
</html>


Voor de afbeeldingen maak ik dan een nieuw formulier waar ik afbeeldingen kan uploaden naar de tabel "afb"
Die hash mag je uiteindelijk zelf weer wissen uit je database, want je hebt er na afloop toch niks meer aan.

Zelf zou ik liever controleren of je formulier verstuurd is via POST dan dat je controleert of er op een knop is gedrukt:


if(isset($_POST['plaatsen'])){


wordt dan:

if($_SERVER['REQUEST_METHOD']=="POST") {
Ok, en waarom blijft hij hier "artikel werd succesvol toegevoegd. " tonen?

Reageren