Per Button ID in DB schreiben & anschließend User weiterleiten

Odomanie

Mitglied
Hallo zusammen :)

der Titel verrät schon viel. Ich möchte einen Button auf einer Seite einbauen, der durchs klicken eine ID per Insert Into-Befehl in eine DB schreibt und den User sofort auf eine Seite X weiterleitet. Ich möchte das ganze nicht über ein AUTO_INCREMENT lösen.

Hierzu habe ich bisher folgendes.

Teil 1: Größte ID in der Datenbank ermitteln und 1 addieren
PHP:
<?php

     $mysqlhost="x";
     $mysqluser="x";
     $mysqlpwd="x"; 
     $mysqldb="x";

$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");


$id_step1 = "select MAX(id) from tabelle";
$id_step2 = mysql_query($id_step1);
$id_step3 = mysql_fetch_array($id_step2);
$id_step4 = $id_step3[0];
$id_step4++;

echo $id_step4;


mysql_close($connection);

  ?>


Teil 2: Der Button mit hidden-Feld
PHP:
 <?php

     $mysqlhost="x";
     $mysqluser="x";
     $mysqlpwd="x"; 
     $mysqldb="x";

$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");



if(isset($_POST["speichern"]))
{

    $id = $_POST['id'];


    $eintrag = "INSERT INTO `tabelle` SET `id` = '{$id_step4}',";

    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
}


       echo '<input type="hidden" name="id" value="'.$id_step4.'" />';
       echo '<input type="submit" value="ID hinzufügen" name="speichern" />';
       echo '</form>';

mysql_close($connection);

  ?>



Es wird jedoch keine ID eingetragen. Fehlermeldungen gibt es auch keine. Woran kann es liegen, dass keine neue ID in die Datenbank geschrieben wird? Ich bin für jeden Tipp dankbar! :)


Viele Grüße

Odo
 
Erstens: Sehr gefährlich.
Wenn ich das richtig verstehe löst du beim Seitenaufruf eine neue ID. Und wenn das Formular abgeschickt wird, wird die ID in die DB eingetragen. Was wenn dazwieschen jemand anderes ebenfalls das Formular öffnet? Dann arbeiten beide mit derselben ID. Ich glaube mal nicht, dass dies gewünscht ist. Genau darum gibt es das AUTO_INCREMENT.

Dein Problem:
Warum hast du im insert die $id_step4 und nicht die $_POST['id']?
 
Hallo Yaslaw :)

danke für deine Hilfe! Ich nutze dieses Skript auf einer Seite, die ich ausschließlich alleine nutze, daher wäre es in diesem Fall schon iO mit dem lösen einer ID, bei Aufruf der Seite.

Ich habe es wie folgt geändert. Leider wird noch keine neue ID in die DB eingetragen. Habe ich noch etwas übersehen? Danke für deine Hilfe!

PHP:
 <?php 

     $mysqlhost="x"; 
     $mysqluser="x"; 
     $mysqlpwd="x";  
     $mysqldb="x"; 

$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen."); 



if(isset($_POST["speichern"])) 
{ 

    $id = $_POST['id']; 


    $eintrag = "INSERT INTO `tabelle` SET `id` = '{$id}',"; 

    mysql_query($eintrag) or die("Änderung fehlgeschlagen."); 
} 


       echo '<input type="hidden" name="id" value="'.$id_step4.'" />'; 
       echo '<input type="submit" value="ID hinzufügen" name="speichern" />'; 
       echo '</form>'; 

mysql_close($connection); 

  ?>
 
item: Wird das Formular mit der methode POST abgesendet?

item: Auf anhieb sehe ich grad nix was falsch währe (zu kompliziert gelöst, aber nicht per se falsch). Aber ich geh dabei davon aus, dass beide Scripte in demselben File sind.

Du könntest mal den generierten HTML-Code anschauen ob da eine ID im Formular vorhanden ist. Dan weisst du bereits einmal ob die ID beim Vorbereiten oder beim Speichern nicht funktioniert.
Des weiteren, debuggen:
PHP MySQL Debug Queries
PHP Debuggen mit var_dump()
 
Mach das doch noch einfacher...

SQL:
INSERT INTO `tabelle`
   (id)
VALUES
   ((SELECT max(id) FROM `tabelle`)+1)
Dadurch wird direkt der letzte Eintrag ausgelesen, +1 erhöht und in die DB geschrieben.


Zumal dein INSERT-Command einfach nur falsch ist.
SQL:
INSERT INTO tabelle (feld1, feld2, feld3) VALUES (value1, value2, value3)
Natürlich entsprechende Zeichen bei den Inhalten setzen.

lg
 
Vielen Dank für eure Hilfe. Ich habe es angepasst, ohne Erfolg. Was kann ich noch ändern? fehlermeldungen sagen nichts.

@Yaslaw:

Laut HTML wird die "richtige" neue ID als value angezeigt.
HTML:
<input type="hidden" name="id" value="13">

Darüber hinaus habe ich die method wie folgt ergänzt
HTML:
<input method="post" type="submit" value="ID hinzufügen" name="speichern" />

@Lime:

Ich habe den Code entsprechend angepasst. Danke für die Vereinfachung.


PHP:
<?php  

     $mysqlhost="x";  
     $mysqluser="x";  
     $mysqlpwd="x";   
     $mysqldb="x";  

$connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen.");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");  



if(isset($_POST["speichern"]))  
{  

    $id = $_POST['id'];  


    $eintrag = "INSERT INTO `tabelle`  (id) VALUES  ((SELECT MAX(id) FROM `tabelle`)+1)";  

    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");  
}  


       echo '<input type="hidden" name="id" value="'.$id_step4.'" />';  
       echo '<input method="post" type="submit" value="ID hinzufügen" name="speichern" />';  
       echo '</form>';  

mysql_close($connection);  

  ?>
 
Wenn du meinen SQL-Qry nimmst, brauchst du das hidden-field gar nicht mehr. Es reicht folgender Code:

PHP:
<?php
if(isset($_POST['submit']))
{
    $mysqlhost="x";   
    $mysqluser="x";   
    $mysqlpwd="x";    
    $mysqldb="x";   

    $connection = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen."); 
    mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
    $eintrag = "INSERT INTO `tabelle`  (id) VALUES  ((SELECT MAX(id) FROM `tabelle`)+1)";   
    mysql_query($eintrag) or die("Änderung fehlgeschlagen.");
    mysql_close($connection);
} else {
    echo '<form method="post" action="diesedatei.php">';
       echo '<input type="submit" name="submit" value="Absenden" />';
    echo '</form>';
}
?>
 
Ich habe den Code wie von dir gepostet getestet, leider bekomme ich die Fehlermeldung "Änderung fehlgeschlagen."

Woran kann das liegen?
 
Schmeisst das VALUES raus. Das braucht es bei einem INSERT INTO...SELECT Statement nicht.
SQL:
INSERT INTO `tabelle`  (id)   SELECT MAX(id)+1 FROM `tabelle`
 
Zuletzt bearbeitet von einem Moderator:
Zurück