Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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ář: [beznzvbwb.png]

Předmět Autor Datum
Zkus si data nejprve vypsat. Tedy ověřit, zda se vůbec posílají na server: Tedy ve skriptu kurzy_po…
Flash_Gordon 20.04.2012 13:46
Flash_Gordon
na server to posílá data až z posledního řádku, z předešlých 4 ne
Gizzer 20.04.2012 13:59
Gizzer
A proč tomu tak je objasňuje kolega níže. Kontrola klientského kódu je základ. :-)
Flash_Gordon 20.04.2012 14:31
Flash_Gordon
Ano, ale jak to udělat aby to funguvalo?
Gizzer 20.04.2012 14:38
Gizzer
Každý element typu input, který posíláš na server musí mít unikátní jméno. Způsob, který mě zrovna…
Flash_Gordon 20.04.2012 14:49
Flash_Gordon
Takhle to pošle data jen ze sloupce Tym1 a kurz1
Gizzer 20.04.2012 14:56
Gizzer
Jo. Ono taky záleží, jak je nastavený php server :-) Ve zdrojové souboru (musí mít koncovku php):…
Flash_Gordon 20.04.2012 15:08
Flash_Gordon
tak vyřešeno <!DocType HTML> <html> <head> <title>Kurzy</title> </head> <body> <?php $confid = intv… poslední
Gizzer 20.04.2012 15:43
Gizzer
Všechna políčka s týmem mají jméno 'tym', tudíž je v $_POST['team'] jen jedno. Stejně tak ostatní sl…
hynajs 20.04.2012 13:48
hynajs

Zkus si data nejprve vypsat. Tedy ověřit, zda se vůbec posílají na server:

Tedy ve skriptu kurzy_post.php

<?php

ob_start();               // cachujeme vystup
  if(isset($_POST['sent'])){      // pokud byl odeslan formular pokracuj timto
     $confid = intval($_GET['conf']);
  $datum = $_POST['datum'];
echo $tym = $_POST['tym'];
echo $tym1 = $_POST['tym1'];
echo $kurz = $_POST['kurz'];
echo $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();
?>

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ř.:

<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<?echo $radek;?>'/></td>
        <td><input type='text' size='2' name='kurz<?echo $radek;?>'/></td>
        <td><input type='text' size='2' name='kurz1<?echo $radek;?>'/></td>
        <td><input type='text' name='tym1<?echo $radek;?>'/></td>
    </tr>
<?php endfor; ?>
    <tr>
        <td><input type='submit' name='send' value='Vlož zápasy' /></td>
    </tr>
</tbody>
</table>
</form>


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í.

Jo. Ono taky záleží, jak je nastavený php server :-)

Ve zdrojové souboru (musí mít koncovku php):

                                             <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<?php echo $radek;?>'/></td>
        <td><input type='text' size='2' name='kurz<?php echo $radek;?>'/></td>
        <td><input type='text' size='2' name='kurz1<?php echo $radek;?>'/></td>
        <td><input type='text' name='tym1<?php echo $radek;?>'/></td>
    </tr>
<?php endfor; ?>
    <tr>
        <td><input type='submit' name='send' value='Vlož zápasy' /></td>
    </tr>
</tbody>
</table>
</form>

V příjemci (jen ověření přijatých dat):

<?php

ob_start();               // cachujeme vystup
  if(isset($_POST['sent'])){      // pokud byl odeslan formular pokracuj timto
     $confid = intval($_GET['conf']);
  $datum = $_POST['datum'];

foreach ($_POST as $key => $value)
{
print "$key ma vlozenou hodnotu: $value <br>";
}


ob_end_flush();
  }
?>

tak vyřešeno

<!DocType HTML>
<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>

</body>
</html>
<?php

ob_start();               // cachujeme vystup
if( isset($_POST['sent']) && ((int)$_GET['conf'])>0 && StrToTime($_POST['datum'])!==false ) {      // pokud byl odeslan formular pokracuj timto
	$confid = intval($_GET['conf']);
	$datum = $_POST['datum'];
	$values='';

	require_once 'settings.php';
	foreach($_POST['tym'] as $n=>$val) {
		$tym=mysql_real_escape_string($_POST['tym'][$n]);
		$kurz=mysql_real_escape_string($_POST['kurz'][$n]);
		$kurz1=mysql_real_escape_string($_POST['kurz1'][$n]);
		$tym1=mysql_real_escape_string($_POST['tym1'][$n]);
		if( !empty($tym) && !empty($kurz) && !empty($kurz1) && !empty($tym1) ) {
			if( !empty($values) )
				$values.=',';
			$values.="({$confid}, '{$datum}', '${tym}', '{$tym1}', '{$kurz}', '{$kurz1}')";
		}
	}
	if( !empty($values) ) {
		//$VlozData=mysql_query("INSERT INTO kurzy (confid,datum,tym,tym1,kurz,kurz1) VALUES ('$confid','$datum','$tym','$tym1','$kurz','$kurz1') ") or die (mysql_error());
		$VlozData=mysql_query("INSERT INTO kurzy (confid,datum,tym,tym1,kurz,kurz1) VALUES {$values} ") 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.


		// presmerovani s hlaskou ze je vse OK
		$backlink='';
	}
	else {
		$backlink='formular_nedoslany.php';
	}
}
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();
?>

Zpět do poradny Odpovědět na původní otázku Nahoru