Autor Zpráva
gardener
Profil
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
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
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
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
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
A co máš uložené v $id?
gardener
Profil
nic to tam vkládám prázdné...aby záznam proběhl..jelikož sloupce jsou 4.
Hugo
Profil
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
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
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
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..
Toto téma je uzamčeno. Odpověď nelze zaslat.