Hallo,
Ik ben bezig met een overhoringsprogramma. ik ben al best ver, maar ik loop tegen een probleem aan.
Ik probeer meer dan 1 rij een een keer in mijn tabel te inserten, maar alleen de laatste rij wordt ge'insert.
Ik heb al dingen geprobeerd en het lukte een paar keer, maar opeens lukte het niet..
weet iemand hoe ik meerdere rijen kan inserten?
dit is het stukje code

<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST') {

$woord1 = mysqli_real_escape_string($con, $_POST['woord1']);
$woord2 = mysqli_real_escape_string($con, $_POST['woord2']);



if($sql = "
INSERT INTO overhoring (userid, woord1, woord2, kennis)
VALUES ('".$_SESSION['userid']."', '".$woord1."', '".$woord2."', 'nee')
") {
$result = mysqli_query($con, $sql);
$gelukt = '<br />gelukt';
echo $gelukt;
}
else {
	echo 'mislukt';
}
}
?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("#btn1").click(function(){
	$("p").append('<br /><div class="form-group col-md-3"> <input class="form-control" name="woord1" required></div><div class="form-group col-md-3"><input class="form-control" name="woord2" required></div><br /><br />');
    });    
	
	$("#btn2").click(function(){
	$("p").append('<br /><div class="form-group col-md-3"> <input class="form-control" name="woord1" required></div><div class="form-group col-md-3"><input class="form-control" name="woord2" required></div><br /><br />');
    });

});
</script>

</head>
<body>
<div class="header"></div>
<div class="container">


<button id="btn1" class="btn btn-default">woorden toevoegen</button>

<form method="post">

<br /><br />
<div class="form-group col-md-3"> <input class="form-control" name="woord1" required> </div> <div class="form-group col-md-3"><input class="form-control" name="woord2" required></div>
<br /><br />
<p>	</p>
<input type="submit" class="btn btn-default" value="klaar"/>

</form>


groetjes fabian http://web-stars.nl/
Eerst moet je begrijpen wat er gebeurt.

Het ontbreken van de arrayhaken in de veldnamen is de reden dat je dus meerdere keren in een formulier dezelfde veldnaam hebt, wat dus resulteert in het overschrijven van andere data... De array-haken zorgen ervoor dat je dezelfde veldnaam kunt hergebruiken voor meerdere velden met dezelfde naam...

Introduceer eens wat velden met van die array-haken.

Dump vervolgens eens $_POST naar je scherm, dan zie je wat er gebeurt.

Dat kun je dan als uitgangspunt nemen om een of meerdere queries te gaan gebruiken.

Het voornaamste probleem in 80 van de 100 vraagstukken die hier voorbij komen is dat mensen niet weten hoe ze overzicht voor zichzelf kunnen creëren, vervolgens niet weten wat er gebeurt, en vervolgens niet weten wat ze moeten doen (en vaak als je hun een oplossing geeft is dit na afloop nog steeds hetzelfde).
@Thomas: Ja, op die manier kan het ook. Niet alle kort geschreven code valt immers onder luiheid ;-)
@Fabian: Let er wel op dat je de query nog uitvoert. Dat doet Thomas niet in de code, maar legt hij wel uit in comment.
met de array-haken: <input class="form-control" name="woord1[]" required> </div> <div class="form-group col-md-3"><input class="form-control" name="woord2[]" required></div>

ik doe mn best om zo veel mogelijk te leren naast de drukte. ik probeer op oplossingen door te bouwen zodat het gaat werken. ik ben met mijn website met veel dingen bezig. ontzettend veel dingen lukken prima en als het niet lukt en ik voor mijn gevoel er voldoende tijd in heb gestopt met probeersels ga ik naar dit forum. ik kom dus naar dit forum omdat ik geen kennis van bijvoorbeeld arrays heb. ik zal zeker leren wat arrays zijn. alleen heb ik een werkend voorbeeld ofzo nodig om er van te leren. wat volgens mij helemaal niet zoooo raar is

Vergelijk:
<!DOCTYPE html>
<html>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="text" name="test" value="holy" /><br />
<input type="text" name="test" value="crap" /><br />
<input type="text" name="test" value="son!" /><br />
<button type="submit">gaan</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo '<pre>'.print_r($_POST, true).'</pre>';
}
?>
</body>
</html>

Levert na verzenden:
Array
(
    [test] => son!
)


Met:

<!DOCTYPE html>
<html>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="text" name="test[]" value="holy" /><br />
<input type="text" name="test[]" value="crap" /><br />
<input type="text" name="test[]" value="son!" /><br />
<button type="submit">gaan</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo '<pre>'.print_r($_POST, true).'</pre>';
}
?>
</body>
</html>

Levert na verzenden:
Array
(
    [test] => Array
        (
            [0] => holy
            [1] => crap
            [2] => son!
        )
)

Veel duidelijker dan dit gaat het niet worden vrees ik.
ja ik snap m!

 <?php ($_POST['woord1'] as $nummer => $woord1) {
    $woord2 = $_POST['woord2'][$nummer]; ?> 
waarom verschillen deze 2 zo erg

[size=xsmall]Toevoeging op 21/08/2015 19:08:49:[/size]

ik zie iets belangrijks over het hoofd :(
ik heb mn best gedaan :)
<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	
$sql = '
INSERT INTO overhoring (x,y,z) 
VALUES ($values) 
';

$values = array();
foreach ($_POST['woord1'] as $nummer => $woord1) {

    $values[] = "('".$woord1."',)";
}

$sql .= implode(',', $values);

if($sql==true) {
$result = mysqli_query($con, $sql);
echo 'gelukt <br />';
}
}
?>


[size=xsmall]Toevoeging op 21/08/2015 20:00:45:[/size]

ik ging dit proberen, maar het werkt nog steeds niet
 <?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	
$insData = array(
    'woord1' => $_POST['woord1'],
    'woord2' => $_POST['woord2'],
); 
	
$columns = implode(", ",array_keys($insData));
$escaped_values = array_map('mysqli_real_escape_string', array_values($insData));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `overhoring`($columns) VALUES ($values)";

}
?>

<button id="btn1" class="btn btn-default">woorden toevoegen</button>

<form method="post">

<br /><br />
<div class="form-group col-md-3"> 
<input class="form-control" name="woord1[]" required> </div> 
<br /><br />
<p>	</p>
<input type="submit" class="btn btn-default" value="klaar"/>

</form>


[size=xsmall]Toevoeging op 21/08/2015 20:01:54:[/size]

hij pakte de valeus niet volgens mij
Sorry maar hier (EDIT je vorige, ongewijzigde bericht) klopt weinig van. Ik stel voor dat je bij het begin begint, dat wil zeggen, verdiep je (op zijn minst) in de volgende basisonderwerpen van PHP:
- typen variabelen
- controle structuren

En dat je dit dan uitbreid naar communicatie met je MySQL-database. Daarbij zou je je ook wat in moeten lezen in de MySQL-syntax.

Tot slot combineer je dit alles tot een HTML-pagina die nog extra dynamish is door gebruikmaking van jQuery.

Het probleem is denk ik een beetje dat je een heleboel disciplines combineert in één script maar een aantal basisprincipes van elk van deze disciplines niet eigen bent. Het wordt dan verdomd lastig om uit te leggen hoe (waarom) bepaalde dingen (niet) werken zonder alles helemaal voor te kauwen.

Ik denk ook niet dat er een snelle manier is om dit te leren behalve door veel lezen en veel oefenen. Er zijn weinig shortcuts wat dat betreft.

Ik probeer dingen altijd zo simpel mogelijk uit te leggen, maar kan deze (simpelweg) niet simpeler maken dan dat ze zijn. Er is een bepaalde minimale hoeveelheid basiskennis nodig om "mee te kunnen redeneren". Ik merk in dit geval dat hier geen sprake van lijkt te zijn. Zodoende kan ik je helaas niet helpen, maar bovenstaande links zouden je een eind op weg moeten helpen.

Als je een boek in het midden begint te lezen zul je weinig begrijpen van het verhaal, begin dus bij het begin.

En als ik je (nog) een tip mag geven: debug ALLES. Dump dingen naar je scherm, je console, een log. Maak visueel wat er met je DATA gebeurt.

Als je alleen maar een query uitvoert zonder foutafhandeling en deze query werkt niet, hoe weet je dan wat er aan de hand is? Als je $sql nu eerst eens op je scherm afdrukt?

Als je je formulier verstuurt, en de helft van je data lijkt maar aan te komen / doorgevoerd te worden, dan druk je die formulierinhoud toch naar je scherm af? Dan zie je precies wat er gebeurt.

Het is niet eens dat de materie nu zo ingewikkeld is, het is hoe je er mee omgaat wat bepaalt hoe makkelijk je het voor jezelf maakt.
Met de [] achter de name="iets[]" krijg je in $_POST['iets'] een array.
Die kan veel bevatten, bijvoorbeeld:

$_POST['iets'][0] = eerste woord
$_POST['iets'][1] = tweede woord
$_POST['iets'][2] = derde woord
$_POST['iets'][3] = vierde woord
$_POST['iets'][4] = etc

Die [0] of [3] hoef je niet te typen. Door name="iets[]" te gebruiken worden die vanzelf toegevoegd.
Dus in je form kan je wel 20 keer name="iets[]" gebruiken. Velden die leeg zijn worden niet verzonden (doe je dus niets mee).
Wil je automatisch alles wat WEL ingetypt is, opslaan, dan ga je dus $_POST['iets'] doorlopen.
En dat doe je met foreach($_POST['iets'] AS $woord. In $woord zit dus "eerste woord", daarna "tweede woord" etc etc.

Probeer maar:

<?php
error_reporting(0);

foreach($_POST['iets'] AS $woord)
 {
 echo 'Het woord is: '.$woord.'<br>';
 }

?>
<form method="post" action="">
 <input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>
<input type="text" name="iets[]"><br>

<input type="submit" value="Verzend">
</form>


Probeer maar 1 woord, of 5 in te vullen.

Reageren