Select / option menu met inhoud van database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Sylvie Hoste

Sylvie Hoste

10/10/2017 11:02:01
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?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>

- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 10/10/2017 14:18:47 door - Ariën -
 
PHP hulp

PHP hulp

25/04/2024 17:38:46
 
Marco Eilander

Marco Eilander

10/10/2017 13:14:53
Quote Anchor link
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");
Gewijzigd op 10/10/2017 13:28:22 door Marco Eilander
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 13:22:44
Quote Anchor link
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?
 
Marco Eilander

Marco Eilander

10/10/2017 13:28:52
Quote Anchor link
Ik heb mijn post aangepast ;)
Probeer eerst die dingen even aan te passen.
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 13:49:47
Quote Anchor link
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

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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();
?>
 
Marco Eilander

Marco Eilander

10/10/2017 13:56:47
Quote Anchor link
probeer dit eens ;)

connection.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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;
        }
        

    }


?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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 :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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.
Gewijzigd op 10/10/2017 14:19:11 door Marco Eilander
 
- Ariën  -
Beheerder

- Ariën -

10/10/2017 14:23:41
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>">

Je action-attribuut kan prima leeg blijven als het uitvoer plaatsvindt in hetzelfde script.
Gewijzigd op 10/10/2017 14:25:17 door - Ariën -
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 14:32:00
Quote Anchor link
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.
 
Marco Eilander

Marco Eilander

10/10/2017 14:37:28
Quote Anchor link
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. ;)
Gewijzigd op 10/10/2017 14:38:18 door Marco Eilander
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 14:43:04
Quote Anchor link
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?

Toevoeging op 10/10/2017 14:57:02:

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.

Toevoeging op 10/10/2017 15:01:38:

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

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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();*/
?>
Gewijzigd op 10/10/2017 15:03:26 door Sylvie Hoste
 
Marco Eilander

Marco Eilander

10/10/2017 15:05:31
Quote Anchor link
Ik zal over je net genoemde straks vertellen/uitleggen, eerst even dat van je afbeeldingen.

Je kan eventueel zoiets doen:

tabel met machines
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        <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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- 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 gexporteerd 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 gexporteerde tabellen
--

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

--
-- AUTO_INCREMENT voor gexporteerde 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:
Afbeelding

Zo komt je afbeeldingen tabel er ongeveer uit te zien:
Afbeelding

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.
Gewijzigd op 10/10/2017 15:09:22 door Marco Eilander
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 15:10:20
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

10/10/2017 15:15:17
Quote Anchor link
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.
Gewijzigd op 10/10/2017 15:37:41 door - Ariën -
 
Marco Eilander

Marco Eilander

10/10/2017 15:19:32
Quote Anchor link
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.
Gewijzigd op 10/10/2017 15:23:55 door Marco Eilander
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 15:23:54
Quote Anchor link
De bedoeling is dat ik alleen kan toevoegen.
En dan later met een login nog iemand
 
- Ariën  -
Beheerder

- Ariën -

10/10/2017 15:25:11
Quote Anchor link
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.
Gewijzigd op 10/10/2017 15:26:20 door - Ariën -
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 15:26:21
Quote Anchor link
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

Toevoeging op 10/10/2017 15:36:28:

Ariën ik ben aan het kijken wat een tijdelijke-hash is en hoe ik die kan toevoegen en ook wat een hash is ...
Gewijzigd op 10/10/2017 15:37:16 door Sylvie Hoste
 
- Ariën  -
Beheerder

- Ariën -

10/10/2017 15:45:18
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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.
Gewijzigd op 10/10/2017 15:47:49 door - Ariën -
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 15:52:37
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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"
 
- Ariën  -
Beheerder

- Ariën -

10/10/2017 16:01:07
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(isset($_POST['plaatsen'])){


wordt dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD']=="POST") {
Gewijzigd op 10/10/2017 16:01:26 door - Ariën -
 
Sylvie Hoste

Sylvie Hoste

10/10/2017 16:14:23
Quote Anchor link
Ok, en waarom blijft hij hier "artikel werd succesvol toegevoegd. " tonen?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.