Formulář odesílá jen jeden řádek
Prosím o radu proč se ukládá do db jen jeden řádek.
Formulář:
<html>
<head>
<title>Kurzy</title>
</head>
<body>
<?php
$confid = intval($_GET['conf']);
?>
<form action="kurzy_post.php?conf=<?=$confid?>" method='post'>
<input type="hidden" name="sent" value=""/>
Datum: <input type='text' name='datum'/>
<table>
<thead>
<tr>
<th>Tým</th>
<th>1</th>
<th>2</th>
<th>Tým</th>
</tr>
</thead>
<tbody>
<?php for($radek=1;$radek<=5;$radek++): ?>
<tr>
<td><input type='text' name='tym'/></td>
<td><input type='text' size='2' name='kurz'/></td>
<td><input type='text' size='2' name='kurz1'/></td>
<td><input type='text' name='tym1'/></td>
</tr>
<?php endfor; ?>
<tr>
<td><input type='submit' name='send' value='Vlož zápasy' /></td>
</tr>
</tbody>
</table>
</form>
kurzy_post:
<?php
ob_start(); // cachujeme vystup
if(isset($_POST['sent'])){ // pokud byl odeslan formular pokracuj timto
$confid = intval($_GET['conf']);
$datum = $_POST['datum'];
$tym = $_POST['tym'];
$tym1 = $_POST['tym1'];
$kurz = $_POST['kurz'];
$kurz1 = $_POST['kurz1'];
if($datum=="" or $tym=="" or $tym1=="" or $kurz==""){ // pokud nebylo vyplněno něco z toho, co je povinné, dáme vědět a skript ukončíme
echo "Nebylo povině zadáno - datum, tym nebo kurz<br /><br />";
}else{
require "./settings.php"; // pripojime se k databazi
$VlozData=mysql_query("INSERT INTO kurzy (confid,datum,tym,tym1,kurz,kurz1) VALUES ('$confid','$datum','$tym','$tym1','$kurz','$kurz1') ") or die (mysql_error());
// Vlozim do tabulky hodnoty - prvni je ID - nevyplnim, tvori se samo.
// Jako posledni hodnota je "0", to jsou ty prava uzivatele.
$backlink="clanek_poslat.php?conf=$confid";
// presmerovani s hlaskou ze je vse OK
}
}else{
$backlink="formular_nedoslany.php";
}
// pokud pouzijete HEADER LOCATION tak by pred nim nemelo byt zadne platne ECHO
//echo "<a href='index.php'>index</a>";
// samozrejme zde muze byt presmerovani na jinou stranku pomoci
header ("Location: $backlink");
ob_end_flush();
?>
Formulář:
Zkus si data nejprve vypsat. Tedy ověřit, zda se vůbec posílají na server:
Tedy ve skriptu kurzy_post.php
na server to posílá data až z posledního řádku, z předešlých 4 ne
A proč tomu tak je objasňuje kolega níže.
Kontrola klientského kódu je základ.
Ano, ale jak to udělat aby to funguvalo?
Každý element typu input, který posíláš na server musí mít unikátní jméno.
Způsob, který mě zrovna napadá je přidat číslo za každé "name"
např.:
Výsledkem by mělo být to, že takto se ti budou přenášet všechny hodnoty všech inputů.
Ve jméně name inputu bude na konci vždycky číslo řádku.
Píšu to bez ověření.
Takhle to pošle data jen ze sloupce Tym1 a kurz1
Jo. Ono taky záleží, jak je nastavený php server
Ve zdrojové souboru (musí mít koncovku php):
V příjemci (jen ověření přijatých dat):
tak vyřešeno
Všechna políčka s týmem mají jméno 'tym', tudíž je v $_POST['team'] jen jedno.
Stejně tak ostatní sloupce.