<?php
if($action == "Insert"){
$name = $_POST['addname'];
$date = $_POST['adddate'];
$reason = $_POST['addreason'];
$punishment = $_POST['addpunishment'];
$UID = mysql_query("SELECT `id` FROM `usersinfo` WHERE `name`=".$_POST['addname']." ");

$courtinsert = "INSERT INTO court (id,name,date,reason,punishment) VALUES ('$UID','$name',NOW(),'$reason','$punishment')";
$bool = mysql_query($courtinsert) or die(mysql_error());
if($bool==1) echo "<br><b><font color='orange'>User toegevoegd</font></b>";
if($bool<>1) echo "<br><b><font color='orange'>Bij het toevoegen van een user is een fout opgetreden</font></b";
}
?>

Ik kan niet de fout vinden wat er mis gaat hier
als ik een user wil toevoegen via een form

dan krijg ik deze fout

Out of range value adjusted for column 'id' at row 1

wat hij dan in de column ID wil neer zetten is niks
de column ID staat in tabel court als INT(225) NOT NULL AUTO_INCREMENT

wat hij er neer moet zetten is de ID van de opgegeven naam uit de tabel usersinfo

ik weet niet waarom hij dit niet doet
wat heeft iedereen met
<?php
$name = $_POST['addname'];
$date = $_POST['adddate'];
$reason = $_POST['addreason'];
?> :S Denk je dat dat nut heeft ofzo?
Als ID een auto_increment is, waarom geef je id dan $UID. Gek als je dan een fout krijgt.
Int(255) ? :S Int(11) is meer als zat.
Turmin, beetje vriendelijker mag ook. Nut heeft het misschien niet, maar sommige vinden het wel makkelijker omdat het korter is. Wat vooral leuk is als je de vars vaak gebruikt erna.

@Martijn:
Wat nu in $UID komt is een resourceid van je query, niet het antwoord.
<?php
if($action == "Insert"){

$name = $_POST['addname'];
$date = $_POST['adddate'];
$reason = $_POST['addreason'];
$punishment = $_POST['addpunishment'];
$IdQuery = mysql_query("
SELECT id
FROM usersinfo
WHERE name='".$_POST['addname']."'
"); // Geen backtickets (`) gebruiken!
$Id = mysql_fetch_assoc($IdQuery); // Hier ga ik er van uit dat name uniek is in je tabel!
$UID = $id['id'];

$courtinsert = "
INSERT INTO court (id,name,date,reason,punishment)
VALUES (
'".$UID."',
'".$name."',
NOW(),
'".$reason."',
'".$punishment."'
)";
/** Dit is natuurlijk geen manier van foutafhandeling
* Als je een error krijgt, zal je de nette melding niet te zien krijgen.
* $bool = mysql_query($courtinsert) or die(mysql_error());
* if($bool==1) echo "<br><b><font color='orange'>User toegevoegd</font></b>";
* if($bool<>1) echo "<br><b><font color='orange'>Bij het toevoegen van een user is een fout opgetreden</font></b";
**/
$AddResult = mysql_query($courtinsert) or $mysql_error = mysql_error();
if(!empty($mysql_error))
{
echo 'Er is een fout opgetreden in de query:<br>'.$mysql_error;
}
else
{
echo 'User succesvol toegevoegd.';
}
// Dit is een manier, maar er zijn natuurlijk nog veel meer mogelijkheden.
}
?>
Dit zou volgens mij moeten werken.
@Willem-Jan:

Je gebruikt hoofd- en kleine letters door elkaar in je var-namen:

$Id = mysql_fetch_assoc($IdQuery); // Hier ga ik er van uit dat name uniek is in je tabel!
$UID = $id['id'];
Precies een van de redenen dat ik de underscore-stijl hanteer in plaats van de camel-notatie ;-)
Turmin schreef op 22.08.2006 07:01
Int(255) ? :S Int(11) is meer als zat.

Dit verhaal houdt me al een tijdje bezig, dus ik ben net maar eens gaan testen. De maximale waarde van een signed INT is 2147483647 volgens het MySQL manual.

Stel, je hebt de volgende tabel:

CREATE TABLE int_test (
  id int(11) NOT NULL auto_increment,
  int_1 int(1) NOT NULL,
  int_2 int(2) NOT NULL,
  int_3 int(3) NOT NULL,
  int_4 int(4) NOT NULL,
  int_5 int(5) NOT NULL,
  int_6 int(6) NOT NULL,
  int_7 int(7) NOT NULL,
  int_8 int(8) NOT NULL,
  int_9 int(9) NOT NULL,
  int_10 int(10) NOT NULL,
  int_11 int(11) NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=InnoDB;

en je laat daar de volgende query op los:
<?php
require '../../db_config.php';

// vraag: maakt het uit of je INT(1) of INT(11) doet?
$sql = "
INSERT INTO int_test
SET
int_1 = 2147483647,
int_2 = 2147483647,
int_3 = 2147483647,
int_4 = 2147483647,
int_5 = 2147483647,
int_6 = 2147483647,
int_7 = 2147483647,
int_8 = 2147483647,
int_9 = 2147483647,
int_10 = 2147483647,
int_11 = 2147483647";
if (!mysql_query ($sql)) {
trigger_error ($sql . "\n" . mysql_error ());
}
?>
Dan blijkt uit mijn test dat MySQL alle velden keurig(?) vult. Het maakt bij een type INT dus geen zak uit welk getal je tussen de haakjes opgeeft. Bij een type DECIMAL waarschijnlijk wel, maar dat test ik een andere keer nog wel eens.
Het werkt nu dankzij Willem-Jan

met die wijzegingen wat SanThe had gezegt.

hieronder had ik zo gedaan om dat ik anders niet die mysql fout te zien kreeg

/** Dit is natuurlijk geen manier van foutafhandeling
       * Als je een error krijgt, zal je de nette melding niet te zien krijgen.
      * $bool = mysql_query($courtinsert) or die(mysql_error());
      * if($bool==1) echo "<br><b><font color='orange'>User toegevoegd</font></b>";
      * if($bool<>1) echo "<br><b><font color='orange'>Bij het toevoegen van een user is een fout opgetreden</font></b";
      **/


en Ik gebruikte inderdaad

<?php
  $name = $_POST['addname'];
  $date = $_POST['adddate'];
  $reason = $_POST['addreason'];
?>


omdat ik het gemakkelijker vond en ook stukje kleiner is


Iedereen bedankt

Reageren