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>

Als eerste, vervang alle $_POSTS[] dingen in de insert query naar de juiste variabelen.
Ik zal wel proberen uit te vogelen waar precies de fout zit, ik zelf zou de query() anders doen.
en tip gebruik bij include: bijvoorbeeld: require_once("../connect.php");
Dank je voor je antwoord Marco.

Ik ben nog een leek in het php gebeuren... waarom moet ik de $_POSTS[] vervangen en wat zijn juiste variabelen in dt geval?

Ik heb mijn post aangepast ;)
Probeer eerst die dingen even aan te passen.
Ik heb nu de $_POSTS[] in de INSERT query aangepast.
Momenteel krijg ik enkel deze error:
Fatal error: Call to a member function query() on null in /customers/5/f/b/van.be/httpd.www/beheer/2dehands/index.php on line 33

<?php
require_once("../../connect.php");


$Categorie = $_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('".addslashes ($_POST[Categorie])." ', '".addslashes ($_POST[machinenaam])." ', '".addslashes ($_POST[hoofdafb])." ','".addslashes ($_POST[hoofdafb_alt])." ','".addslashes ($_POST[afbklein1])." ', '".addslashes ($_POST[afbklein1_alt])." ', '".addslashes ($_POST[afbklein2])." ', '".addslashes ($_POST[afbklein2_alt])." ', '".addslashes ($_POST[afbklein3])." ', '".addslashes ($_POST[afbklein3_alt])." ', '".addslashes ($_POST[afbklein4])." ', '".addslashes ($_POST[afbklein4_alt])." ', '".addslashes ($_POST[mach_omsch])." ', '".addslashes ($_POST[spanning])." ', '".addslashes ($_POST[machinegewicht])." ', '".addslashes ($_POST[bouwjaar])." ')";

if ($conn->query($sql) === TRUE){
echo "artikel werd succesvol toegevoegd.";
} else {
echo "Er liep iets fout." . $sql . "<Br>" . $conn->error;
}

$conn->close();
?>


probeer dit eens ;)

connection.php


<?php
//database instellingen
$localhost = 'localhost';
$mysql_user = '';
$mysql_pass = '';
$mysql_db = '';

$conn = new mysqli($localhost,$mysql_user,$mysql_pass,$mysql_db);

if($conn->connect_error){
die("connection failed: " .$conn->connect_error);
}
?>


de pagina waar de rest moet:



<?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']);
        $hoofdafb = mysqli_real_escape_string($conn,$_POST['hoofdafb']);
        $hoofdafb_alt = mysqli_real_escape_string($conn,$_POST['hoofdafb_alt']);
        $afbklein1 = mysqli_real_escape_string($conn,$_POST['afbklein1']);
        $afbklein1_alt = mysqli_real_escape_string($conn,$_POST['afbklein1_alt']);
        $afbklein2 = mysqli_real_escape_string($conn,$_POST['afbklein2']);
        $afbklein2_alt = mysqli_real_escape_string($conn,$_POST['afbklein2_alt']);
        $afbklein3 = mysqli_real_escape_string($conn,$_POST['afbklein3']);
        $afbklein3_alt = mysqli_real_escape_string($conn,$_POST['afbklein3_alt']);
        $afbklein4 = mysqli_real_escape_string($conn,$_POST['afbklein4']);
        $afbklein4_alt = mysqli_real_escape_string($conn,$_POST['afbklein4_alt']);
        $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, hoofdafb, hoofdafb_alt, afbklein1, afbklein1_alt, afbklein2, afbklein2_alt, afbklein3, afbklein3_alt, afbklein4, afbklein4_alt, machine_omsch, spanning, machinegewicht, bouwjaar)
        VALUES('".$Categrorie."', '".$machinenaam."', '". $hoofdafb."','". $hoofdafb_alt."','".$afbklein1."', '".$afbklein1_alt."', '".$afbklein2."', '". $afbklein2_alt."', '".$afbklein3."', '".$afbklein3_alt."', '".$afbklein4."', '".$afbklein4_alt."', '".$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;
        }
        

    }

?>



<form method="post">
  <fieldset>
        <label>De categorie waaronder de machine valt:</label>
        <select name="Categorie">
        <?php 
            $query = $conn->query("SELECT * FROM CAT");
            while ($row = mysqli_fetch_array($query)){
                echo "<option value='".$row['path']."'>".$row['catNaam']."</option>";    
            }
        ?>
 </select>       
<input type="submit" name="plaatsen" value="Plaatsen maar!"/>
</fieldset>
</form>


Moet je alleen zelf wel even een check maken, dat alles correct is ingevuld en dat alle inputs binnen de form correct zijn. (kan je aanpassen bij de isset().


Nog even een tip/suggestie:
Je had dit stukje :

 $query = "SELECT catNaam FROM CAT";

met daaronder een while() met select options. je was vergeten om in dat stukje "path" erbij te zetten. Je resultaten worden dan namelijk leeg. Ik heb dat stukje nu vervangen naar een * , maar je mag er gerust catNaam,path van maken.
Ik zou ook even naar je database-structuur kijken. Want als ik genummerde velden zie, dan betekent dit een slechte databaseopzet. Nu kan je maximaal 4 foto's gebruiken, terwijl je dit later aan wilt passen.
Zulke aantallen wilt je feitelijk op oneindig houden, dus je kan beter een aparte tabel aanmaken waarin je de foto's opslaat met een auto-incremented ID-nummer, en een apart koppelveld waarin de de ID's met de foto's met de ID's van je Machines koppelt. Op die manier kan je onbeperkt aantal foto's kwijt per machine.
Zo hoef je bij een uitbreiding ook niet je database-structuur en de script overhoop te gooien.

Verder mag je de PHP-code uit dit regeltje wel weglaten:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">

Je action-attribuut kan prima leeg blijven als het uitvoer plaatsvindt in hetzelfde script.
Marco , top. Hij toont geen errors meer. Maar hij toont de categorie naam ook niet.
Ik krijg een leeg (smal) selectiemenuutje te zien zondere waarde.
Wat ik ook opmerk is dat hij telkens ik de pagina vernieuw een lege lijn invoert in de database. Ook al heb ik ondertussen het "naam" veld verplicht gemaakt.

Ariën, ik bekijk dit meteen. Al weet ik niet echt hoe ik deze moet gaan koppelen.
Sylvie, dat komt omdat je mijn script niet over hebt gezet. ;)

Je gebruikt geen isset(), dat is een functie die zorgt, dat alles daar binnen in wordt uitgevoerd als er op een input is gedrukt, als je dat niet gebruikt, gaat die alles uitvoeren.

Ik denk dat je geen resultaten krijgt ivm het sluiten van je database connectie ergens bovenin. ;)
In verband met die aparte tabel voor de afbeeldingen:
Ik maak een tabel met :
ID / afb / afb_alt / machinenaam

Dan ga ik via SELECT alle afb oproepen waar de machinenaam gelijk is aan de machinenaam uit de tabel TweedehandsMach

correct?

[size=xsmall]Toevoeging op 10/10/2017 14:57:02:[/size]

Idd, ik had je isset() niet meegenomen.
de $conn->close(); staat ook af. ;-)

Hij toont nu de categorienamen en hij voegt het artikel toe an dedatabase. Maar hij zet de categorienaam niet bij de machine in de database.

[size=xsmall]Toevoeging op 10/10/2017 15:01:38:[/size]

De melding "artikel werd succesvol toegevoegd." staat er ook constant. In principe moet deze maar getoond worden eenmaal het artikel succesvol toegevoegd is.


<?php
$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('".$Categrorie."', '".$machinenaam."', '". $hoofdafb."','". $hoofdafb_alt."','".$afbklein1."', '".$afbklein1_alt."', '".$afbklein2."', '". $afbklein2_alt."', '".$afbklein3."', '".$afbklein3_alt."', '".$afbklein4."', '".$afbklein4_alt."', '".$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();*/
?>
Ik zal over je net genoemde straks vertellen/uitleggen, eerst even dat van je afbeeldingen.

Je kan eventueel zoiets doen:

tabel met machines

        <table>
        <tr>
            <td><b>ID</b></td>
            <td><b>Machine naam</b></td>
            <td><b>Afbeeldingen</b></td>
        </tr>
        <?php 
            $query = $conn->query("SELECT * FROM TweedehandsMach ORDER BY id DESC");
            while ($row = mysqli_fetch_array($query)){
                echo "<tr>
                <td>".$row['id']."</td>
                <td>".$row['machinenaam']."</td>
                <td>";
                $zoekafbeeldingen = $conn->query("SELECT * FROM afbeeldingen WHERE machine_id = '".$row['id']."'");
                while($afb = mysqli_fetch_array($zoekafbeeldingen)){
                    echo "<img src=".$afb['url']." style='width:80px;' ??/> ";
                }
                if(mysqli_num_rows($zoekafbeeldingen) == 0){
                    echo 'Geen afbeeldingen beschikbaar.';
                }
              echo "  </td>
                </tr>";    
            }
        ?>
 </table>     


en je afbeeldingen maak je dan ongeveer zo :
(sla dit op als een .sql en importeer het naar je database


-- phpMyAdmin SQL Dump
-- version 4.7.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Gegenereerd op: 10 okt 2017 om 15:04
-- Serverversie: 5.5.31
-- PHP-versie: 5.5.38

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;


-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `afbeeldingen`
--

CREATE TABLE `afbeeldingen` (
  `afb_id` int(11) NOT NULL,
  `machine_id` int(11) DEFAULT NULL,
  `url` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Gegevens worden geëxporteerd voor tabel `afbeeldingen`
--

INSERT INTO `afbeeldingen` (`afb_id`, `machine_id`, `url`) VALUES
(1, 1, 'https://www.phphulp.nl/img/phphulp-logo.jpg'),
(2, 1, 'https://www.phphulp.nl/img/phphulp-logo.jpg'),
(3, 1, 'https://www.phphulp.nl/img/phphulp-logo.jpg'),
(4, 2, 'https://www.phphulp.nl/img/phphulp-logo.jpg');

--
-- Indexen voor geëxporteerde tabellen
--

--
-- Indexen voor tabel `afbeeldingen`
--
ALTER TABLE `afbeeldingen`
  ADD PRIMARY KEY (`afb_id`);

--
-- AUTO_INCREMENT voor geëxporteerde tabellen
--

--
-- AUTO_INCREMENT voor een tabel `afbeeldingen`
--
ALTER TABLE `afbeeldingen`
  MODIFY `afb_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



Het komt er dan zo ongeveer uit te zien:


Zo komt je afbeeldingen tabel er ongeveer uit te zien:


Je kan de kolom url eventueel vervangen naar enkel een bestand, maar moet je maar net willen, dat mensen afbeeldingen kunnen uploaden naar je website.

Reageren