| Autor | Zpráva | ||
|---|---|---|---|
| Jan Žák Profil |
#1 · Zasláno: 14. 3. 2016, 20:43:39
Dobrý den všem,
rád bych Vás požádal o pomoc či náízornou lekci. Mám tento funkční skript, který mi ukládá vícero hodnot do databáue. Počet input polí si přidávám pomocí jquery dle potřeby. if (isset($_POST['submit'])) {
$count = count($_POST['beginning-place']);
$query_values = array();
for($i=0; $i<$count; $i++){
$c1 = mysql_real_escape_string($_POST['beginning-place'][$i]);
$c2 = mysql_real_escape_string($_POST['beginning-date'][$i]);
$c3 = mysql_real_escape_string($_POST['beginning-time'][$i]);
$c4 = mysql_real_escape_string($_POST['cities'][$i]);
$c5 = mysql_real_escape_string($_POST['purpose'][$i]);
$c6 = mysql_real_escape_string($_POST['end-place'][$i]);
$c7 = mysql_real_escape_string($_POST['end-date'][$i]);
$c8 = mysql_real_escape_string($_POST['end-time'][$i]);
$query_values[] = " ('$c1','$c2','$c3','$c4','$c5','$c6','$c7','$c8') ";
}
$values = implode(',', $query_values);
// check that required fields are filled in
if ($c1 && $c2 && $c3 && $c4 && $c5 && $c6 && $c7 && $c8) {
$sql = "INSERT INTO cesta (`beginning-place`, `beginning-date`, `beginning-time`, `cities`, `purpose`, `end-place`, `end-date`, `end-time`) VALUES $values";
mysql_query( $sql );
// once saved, redirect back to the view page
$success = 'Cestovní příkaz úspěšně vložen';
} else {
// generate error message
$error = 'Všechna pole jsou povinná!';
}
}Rád bych toto převedl do PDO, ale nevím si rady, PDO se začínám teprve učit. Mohl bych požádat o názornou ukázku, nebo radu jak začít? Děkuji mnohokrát. |
||
| Jan Žák Profil |
Dobrý den trošku jsem popátral a zhotovil tento příkaz:
if (isset($_POST['submit'])) {
$datafields = array(`beginning-place`, `beginning-date`, `beginning-time`, `cities`, `purpose`, `end-place`, `end-date`, `end-time`);
$data[] = array(`beginning-place` => `beginning-place[]`, `beginning-date` => `beginning-date[]`, `beginning-time` => `beginning-time[]`, `cities` => `cities[]`, `purpose` => `purpose[]`, `end-place` => `end-place[]`, `end-date` => `end-date[]`, `end-time` => `end-time[]`);
function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}
return implode($separator, $result);
}
$db->beginTransaction();
$insert_values = array();
foreach($data as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
$insert_values = array_merge($insert_values, array_values($d));
}
$sql = "INSERT INTO routes (" . implode(",", $datafields ) . ") VALUES " . implode(',', $question_marks);
$stmt = $db->prepare ($sql);
try {
$stmt->execute($insert_values);
} catch (PDOException $e){
$error[] = $e->getMessage();
}
$db->commit();
}Bohužel při odeslání dostávám tuto chybu: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',,,,,,) VALUES (NULL)' at line 1 Nevíte někdo v čem dělám chybu? |
||
| Keeehi Profil |
#3 · Zasláno: 16. 3. 2016, 09:20:00
Na řádku 25 si vypiš proměnnou
$sql. Ale tuším, ze ti budou chybět závorky kolem vkládaných hodnot.
|
||
| Jan Žák Profil |
#4 · Zasláno: 16. 3. 2016, 19:14:42
Keeehi:
Díky za info, zkusil jsem si to vypsat ale i tak se mi nedaří přijít kde je chybka, mám to teď takto: $fieldnames = array('beginning-place', 'beginning-date', 'beginning-time', 'cities', 'purpose', 'end-place', 'end-date', 'end-time');
$data[] = array('beginning-place' => 'beginning-place[]', 'beginning-date' => 'beginning-date[]', 'beginning-time' => 'beginning-time[]', 'cities' => `cities[]`, 'purpose' => `purpose[]`, 'end-place' => `end-place[]`, 'end-date' => `end-date[]`, 'end-time' => `end-time[]`);
function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}
return implode($separator, $result);
}
$db->beginTransaction();
$insert_values = array();
foreach($data as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
$insert_values = array_merge($insert_values, array_values($d));
}
$sql = "INSERT INTO routes (" . implode(",", $fieldnames ) . ") VALUES " . implode(',', $question_marks);
$stmt = $db->prepare ($sql);
try {
$stmt->execute($insert_values);
} catch (PDOException $e){
$error[] = $e->getMessage();
}
$db->commit();A zde je chyba co se zobrazí i s echem: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-place,beginning-date,beginning-time,cities,purpose,end-place,end-date,end-time)' at line 1 string(134) "INSERT INTO routes (beginning-place,beginning-date,beginning-time,cities,purpose,end-place,end-date,end-time) VALUES (?,?,?,?,?,?,?,?)" |
||
| Fisir Profil |
#5 · Zasláno: 16. 3. 2016, 20:27:27
Reaguji na Jana Žáka:
Zkus první dva řádky upravit takto: $fieldnames = array('`beginning-place`', '`beginning-date`', '`beginning-time`', 'cities', 'purpose', '`end-place`', '`end-date`', '`end-time`');
$data[] = array('`beginning-place`' => 'beginning-place[]', '`beginning-date`' => 'beginning-date[]', '`beginning-time`' => 'beginning-time[]', 'cities' => `cities[]`, 'purpose' => `purpose[]`, '`end-place`' => `end-place[]`, '`end-date`' => `end-date[]`, '`end-time`' => `end-time[]`);Taky ti patří pochvala za to, že migruješ z ext/mysql. Spousta lidí, kterým to tu doporučíme, na to i přes zjevné potíže v budoucnosti kašlou. |
||
| Jan Žák Profil |
Fisir:
Děkuji, tohle by mě fakt nenapadlo, že by vadili pomlčky ve sloupcích. Opravil jsem to, stránka je nyní bez chyb, ale uloží to pouze texty v data array, viz mysql dump: INSERT INTO `routes` (`id`, `beginning-place`, `beginning-date`, `beginning-time`, `cities`, `purpose`, `end-place`, `end-date`, `end-time`) VALUES (1, 'beginning-place[]', 'beginning-date[]', 'beginning-time[]', 'cities[]', 'purpose[]', 'end-place[]', 'end-date[]', 'end-time[]'); zkoušel jsem do scriptu vložit i POST, ale bez úspěchu. Zde je teď celý kód: header.php <!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<title><?php if(isset($title)){ echo $title; }?></title>
<script type='text/javascript' src='jquery/jquery-2.2.1.min.js'></script>
<script type="text/javascript">
$(document).ready(function(){
var i=1;
$("#add_row").click(function(){
$('#addr'+i).html("<td>"+ (i+1) +"</td><td><input name='beginning-place[]' type='text' placeholder='Odkud' class='form-control input-md' /></td><td><input name='beginning-date[]' type='text' placeholder='Datum' class='form-control input-md'></td><td><input name='beginning-time[]' type='text' placeholder='Hodina' class='form-control input-md'></td><td><input name='cities[]' type='text' placeholder='Místo jednání' class='form-control input-md'></td><td><input name='purpose[]' type='text' placeholder='Účel cesty' class='form-control input-md'></td><td><input name='end-place[]' type='text' placeholder='Kam' class='form-control input-md'></td><td><input name='end-date[]' type='text' placeholder='Datum' class='form-control input-md'></td><td><input name='end-time[]' type='text' placeholder='Hodina' class='form-control input-md'></td>");
$('#tab_logic').append('<tr id="addr'+(i+1)+'"></tr>');
i++;
});
$("#delete_row").click(function(){
if(i>1){
$("#addr"+(i-1)).html('');
i--;
}
});
});
</script>
<link rel="stylesheet" href="bootstrap-3.3.6-dist/css/bootstrap.min.css">
<link rel="stylesheet" href="css/main.css">
</head>if (isset($_POST['submit'])) {
$fieldnames = array('`beginning-place`', '`beginning-date`', '`beginning-time`', 'cities', 'purpose', '`end-place`', '`end-date`', '`end-time`');
$data[] = array('`beginning-place`' => 'beginning-place[]', '`beginning-date`' => 'beginning-date[]', '`beginning-time`' => 'beginning-time[]', 'cities' => 'cities[]', 'purpose' => 'purpose[]', '`end-place`' => 'end-place[]', '`end-date`' => 'end-date[]', '`end-time`' => 'end-time[]');
function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}
return implode($separator, $result);
}
$db->beginTransaction();
$insert_values = array();
foreach($data as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
$insert_values = array_merge($insert_values, array_values($d));
}
$sql = "INSERT INTO routes (" . implode(",", $fieldnames ) . ") VALUES " . implode(',', $question_marks);
$stmt = $db->prepare ($sql);
try {
$stmt->execute($insert_values);
} catch (PDOException $e){
$error[] = $e->getMessage();
}
$db->commit();
} |
||
|
Časová prodleva: 10 let
|
|||
0