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: 8 let
|
0