| Autor | Zpráva | ||
|---|---|---|---|
| gardener Profil |
#1 · Zasláno: 10. 6. 2008, 00:53:37 · Upravil/a: gardener
Zdravím
Mám následující problém, nastavil jsem sloupec s názvem 'poradi' typu INT, UNSIGNED, auto_increment,Primární klíč. Problém je v tom,že se mi hodnoty neinkrementují od jedničky a vůbec nevím proč:)? Skript, který vkládá hodnoty do db vypadá zhruba takto,říkám si,jestli nemůže být chyba v něm.. $name = $_POST['jmeno']; $mail = $_POST['mail']; $message = $_POST['zprava']; $vloz = "INSERT INTO book VALUE('$id','$name','$mail','$message')"; $id_vysledku = mysql_query($vloz,$id_spojeni); if (!$id_vysledku) Netuší někdo prosím, kde by mohla býti chyba? |
||
| Hugo Profil |
#2 · Zasláno: 10. 6. 2008, 06:04:16
Toto se může stát, když si uložíš strukturu tabulky např. pomocí phpMyAdmina a máš při exportu zatrhlý checkbox "Add AUTO_INCREMENT value". Potom se ti v SQL kódu na konci objeví toto AUTO_INCREMENT=x.
Řešení jsou dvě, buď vymazat AUTOINCREMENT z SQL příkazu nebo po vytvoření tabulky poslat příkaz ALTER TABLE `table` AUTO_INCREMENT = 1 |
||
| gardener Profil |
#3 · Zasláno: 10. 6. 2008, 13:53:15
Když jem ale třeba zkoušel dělat aplikaci cd seznam,tak tam AUTOINCREMENT normálně fungoval a přiřazovalo se to vždy korektně od jedničky..když ho teď v phpMyadminu ze sloupce odstraním,tak se to nebude přičítat vůbec ne?
|
||
| Hugo Profil |
#4 · Zasláno: 10. 6. 2008, 15:01:00
gardener
Nemyslel jsem odstranit autoincrement z tabulky, ale pouze nastaveni hodnoty autoincrementu (pokud to v tom sql kodu je). Tzn. pokud máš něco takového CREATE TABLE `table` ( `ID` smallint(5) unsigned NOT NULL auto_increment, ... ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=52 ; Tak to uprav na CREATE TABLE `table` ( `ID` smallint(5) unsigned NOT NULL auto_increment, ... ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; |
||
| gardener Profil |
#5 · Zasláno: 10. 6. 2008, 15:37:37
Přávě že,nemám..dokonce jsemto vytvořil ručně tu tabulku abych si to ověřil,pořád to samé..
Schválně sem dám kód: <?php $spojeni = mysql_connect('localhost','root',''); if (!$spojeni) die('Nepodarilo se pripojit k MySQL'); $zvoleni_databaze = mysql_select_db('pokus',$spojeni); if(!$zvoleni_databaze) {echo mysql_errno($spojeni),': ',mysql_error($spojeni),'<br>'; die('Chyba pri vyberu databaze book'); } $jmeno = $_POST['jmeno']; $mail = $_POST['mail']; $zprava = $_POST['zprava']; $vloz = "INSERT INTO book VALUE('$id','$jmeno','$mail','$zprava')"; //Escape string je velice dulezite pouzivat,omezi se tak moznost vlozeni nezadoucich dat $overeni_vlozeni = mysql_query($vloz,$spojeni); if (!$spojeni) {echo mysql_errno($spojeni),': ',mysql_error($spojeni),'<br>'; die('Nepodařilo se provést příkaz'); } //mysql_errno nám vrací číselnou hodnotu chyby pokud nastane,předchozího Mysql prikazu a mysql_error Vrátí text chybové zprávy předchozího příkazu echo 'Váš vzkaz byl úspěsně vložen'; mysql_close($spojeni); ?> |
||
| Hugo Profil |
#6 · Zasláno: 10. 6. 2008, 16:03:51
A co máš uložené v $id?
|
||
| gardener Profil |
#7 · Zasláno: 10. 6. 2008, 16:11:56
nic to tam vkládám prázdné...aby záznam proběhl..jelikož sloupce jsou 4.
|
||
| Hugo Profil |
#8 · Zasláno: 10. 6. 2008, 16:16:34
Tak zkus toto
$vloz = "INSERT INTO book (`Jmeno`, `Mail`, `Zprava`) VALUES ('$jmeno','$mail','$zprava')";
Problém může být v té neinicializované proměnné. |
||
| nightfish Profil |
#9 · Zasláno: 10. 6. 2008, 16:38:12
auto_increment začíná vždy od 1 nebo od následníka nejvyššího vloženého čísla v "auto_increment" sloupci
jistotou je truncate table `jmenotabulky`; (vymaže všechny data z tabulky a nastaví auto_increment na 1) |
||
| YoSarin Profil |
#10 · Zasláno: 10. 6. 2008, 16:47:02
gardener
IMHO to bude vkládáním toho $id - udělej to buď jak píše Hugo, nebo místo $id do toho řetězce dej NULL (nebo znak %). Nevím jak konkrétně je na tom PHPko, ale obecně - proměnná, která je nedefinovaná může obsahovat defacto cokoli... třeba se ti tam v tom $id vkládá nějaký nesmysl... |
||
| gardener Profil |
#11 · Zasláno: 10. 6. 2008, 17:03:46
Hugův pustup funguje na jedničku, ještě předdtím jsem však pro jistotu použil truncate table.
Jinak YOSarinův postup určitě využiji v příštích skiptech , jelikož mi příjde ,že tak se bude dát lépe využít s escape_string. Děkuji moc za radu a pomoc při řešení problému.. |
||
|
Časová prodleva: 18 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0