id doorsturen naar volgende pagina

Status
Niet open voor verdere reacties.

Hobbit

Gebruiker
Lid geworden
15 okt 2002
Berichten
129
Hallo,

Ik heb een formulier gemaakt waarmee ik gegevens naar een database stuur. Ik wil het id wat dan aangemaakt wordt door de database meesturen naar de volgende pagina. Ik heb al vanalles geprobeerd maar kom er niet helemaal. Heeft iemand een aanwijzing voor me.

Dit is het scriptje;

PHP:
<?php 

$db_table = "request";

if (isset($_REQUEST['Submit'])) 
{ 

$bedrijf=($_POST['bedrijf']); 
$plaats=($_POST['plaats']);
$contact=($_POST['contact']);
$telefoon=($_POST['telefoon']);
$email=($_POST['email']);
$ophaaldatum=($_POST['ophaaldatum']);
$opdrachtnummer=($_POST['opdrachtnummer']);

$sql = "INSERT INTO $db_table(bedrijf,plaats,contact,telefoon,email,ophaaldatum,opdrachtnummer) values ('$bedrijf','$plaats','$contact','$telefoon','$email','$ophaaldatum','$opdrachtnummer')"; 
if($result = mysql_query($sql ,$db))
{
echo ("<a href=\"product_request.php?id=$obj->id\">Ga verder.</a>");
} 
else 
{ 
echo "ERROR: ".mysql_error(); 
} 

} 
else 
{ 
?>

//formulier staat hier

<?php 
} 
?>

Bedankt alvast.
 
ja, dat komt omdat er geen $obj is? En in je databse ook niet?



Wat je dan moet doen is zoiets:

ipv dit:
PHP:
echo ("<a href=\"product_request.php?id=$obj->id\">Ga verder.</a>");
zoiets:
PHP:
$q = mysql_query("SELECT COUNT(*) as bla FROM $db_table");
while($r = mysql_fetch_object($q)){
   $id = $r->bla;
}
echo ("<a href=\"product_request.php?id=".$id."\">Ga verder.</a>");


(COUNT(*) telt alle rows. Dus stel je hebt 5 in je tabel, return het 6 (want je zet er net 1tje bij). Dit is dan je 'id')


:thumb:
 
Laatst bewerkt:
ja, dat komt omdat er geen $obj is? En in je databse ook niet?



Wat je dan moet doen is zoiets:

ipv dit:
PHP:
echo ("<a href=\"product_request.php?id=$obj->id\">Ga verder.</a>");
zoiets:
PHP:
$q = mysql_query("SELECT COUNT(*) as bla FROM $db_table");
while($r = mysql_fetch_object($q)){
   $id = $r->bla;
}
echo ("<a href=\"product_request.php?id=".$id."\">Ga verder.</a>");


(COUNT(*) telt alle rows. Dus stel je hebt 5 in je tabel, return het 6 (want je zet er net 1tje bij). Dit is dan je 'id')


:thumb:

:shocked:

De functie COUNT() telt het aantal records. Het aantal records hoeft niet gelijk te zijn aan het hoogste id! Wat als je een record verwijdert? Dan klopt er niks meer van je query.

De enige juiste manier om na een INSERT het ingevoerde id terug te krijgen, is door de functie mysql_insert_id().

echo '<a href="x?id='.mysql_insert_id().'">';


Daarnaast is een while() bij deze query nutteloos en is mysql_fetch_object aanzienlijk langzamer dan mysql_fetch_assoc.
 
Laatst bewerkt:
Ik neem aan dat je al wel een verbinding maakt met je database?

Het id van de laatst toegevoegde rij kun je ophalen met mysql_insert_id();

Het controleren of een formulier is verstuurd doe je met

PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST'){}

De volgende code zou wel moeten werken:

PHP:
<?php 

$db_table = "request";

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
  $sql = "INSERT INTO " . $db_table . "(bedrijf,plaats,contact,telefoon,email,ophaaldatum,opdrachtnummer) VALUES  (
  '" . $_POST['bedrijf'] . "', 
  '" . $_POST['plaats'] . "',
  '" . $_POST['contact'] . "',
  '" . $_POST['telefoon'] . "',
  '" . $_POST['email'] . "',
  '" . $_POST['ophaaldatum'] . "',
  '" . $_POST['opdrachtnummer'] . "'
  )";

  if($result = mysql_query($sql ,$db)){
    $id = mysql_insert_id();
    echo '<a href="product_request.php?id=' . $id . '">Ga verder.</a>';
  } else { 
    echo "ERROR: ".mysql_error(); 
  } 
} else { 
?>

//formulier staat hier

<?php } ?>

[edit]Oeps, was deze post aan het schrijven terwijl SvU de zijne postte...[/edit]
 
Laatst bewerkt door een moderator:
Als je hem in een query gebruikt zou je ook de MySQL functie LAST_INSERT_ID() kunnen gebruiken.
 
LAST_INSERT_ID() geeft de laatste value van een auto_increment veld weer. Als iemand anders, ergens anders op ongeveer hetzelfde moment een item toevoegt is het dus niet 100% zeker dat je de juiste waarde krijgt (niet die van de andere insert).

Bij mysql_insert_id() krijg je alleen de waarde die is toegevoegd via de bestaande connectie.

BRON: http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html
 
Ik neem aan dat je al wel een verbinding maakt met je database?

Het id van de laatst toegevoegde rij kun je ophalen met mysql_insert_id();

Het controleren of een formulier is verstuurd doe je met

PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST'){}

De volgende code zou wel moeten werken:

PHP:
<?php 

$db_table = "request";

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
  $sql = "INSERT INTO " . $db_table . "(bedrijf,plaats,contact,telefoon,email,ophaaldatum,opdrachtnummer) VALUES  (
  '" . $_POST['bedrijf'] . "', 
  '" . $_POST['plaats'] . "',
  '" . $_POST['contact'] . "',
  '" . $_POST['telefoon'] . "',
  '" . $_POST['email'] . "',
  '" . $_POST['ophaaldatum'] . "',
  '" . $_POST['opdrachtnummer'] . "'
  )";

  if($result = mysql_query($sql ,$db)){
    $id = mysql_insert_id();
    echo '<a href="product_request.php?id=' . $id . '">Ga verder.</a>';
  } else { 
    echo "ERROR: ".mysql_error(); 
  } 
} else { 
?>

//formulier staat hier

<?php } ?>

[edit]Oeps, was deze post aan het schrijven terwijl SvU de zijne postte...[/edit]


Om hier nog even op terug te komen:

Het in een aparte variabele zetten van de mysql_insert_id() is overbodig en wordt op lange termijn onoverzichtelijk (en in sommige gevallen zelfs geheugenvretend). Doe het alleen als het nodig is, maar hou anders waarden waar ze horen. Daarnaast uiteraard altijd input escapen met mysql_real_escape_string.

Aan de topicstarter:

Het gebruiken van variabele tabelnamen is zelden een goed idee. Je moet wel een heel goede reden hebben wil het iets toevoegen aan je applicatie.

Verder is je naamgeving wat vreemd. Je gebruikt bij mysql_query() een variabele 'db', maar ik schat zo in dat dat de link identifier van MySQL is. Iets als 'conn' is dus logischer. Sowieso is het onnodig om bij mysql_query() je connectie te specificeren, tenzij je meerdere verbindingen tegelijk gebruikt, maar die kans lijkt me in dit geval nihil.
 
Het in een aparte variabele zetten van de mysql_insert_id() is overbodig en wordt op lange termijn onoverzichtelijk (en in sommige gevallen zelfs geheugenvretend). Doe het alleen als het nodig is, maar hou anders waarden waar ze horen. Daarnaast uiteraard altijd input escapen met mysql_real_escape_string.

Daar heb je (uiteraard) gelijk in. Vooral dat tweede puntje had ik eigenlijk niet mogen vergeten :o

Mod-edit: Waarom je het in PHP-tags doet is mij een raadsel :confused:
 
Laatst bewerkt door een moderator:
Nou Eric,

Werkt perfect. Dit had ik zelf niet kunnen verzinnen. Ontzettend bedankt.
Ik kan weer verder. Nu even kijken hoe ik met het meegestuurde id omga:D

SvU, bedankt voor de uitleg. Zeker niet onbelangrijk.

Ik hoop dat dit wel gaat lukken.

Nogmaals bedankt!!!:thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan