[PHP/MYSQL] Kan niet twee keer auto_increment hoe

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Nadat ik een tabel ontwerp heb gemaakt, wil deze niet in MYSQL ik krijg als foutmelding:
MySQL retourneerde: Incorrect table definition; There can only be one auto column and it must be defined as a key
Mijn tabel ontwerp is als volgt:
idintauto_incrementPrimaire sleutel
titeltext
artikellongtext
datumdate
img_idintauto_increment
img_titeltext
img_typetinytext
Wat kan ik hier aan doen? Zodat het script wel gaat werken :?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08
Dit heeft iig NIETS met php te maken :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 13:51

Janoz

Moderator Devschuur®

!litemod

2x een auto_incremental id?? Sorry, maar daar zie ik het nut niet van in... Back to the drawingboard maar weer....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Mijn PHP code is als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?
    include(".connectie.php");
    mysql_connect ($ip, $user, $password);
    mysql_select_db($dbname);

    // De verwerking van toevoegen.html artikel gedeelte
    
    $titel = strip_tags($titel);
    $artikel = ($artikel);
    $datum = date("d/m/Y");
    
    $update = "INSERT INTO news (titel, artikel, datum) VALUES ('$titel', '$artikel', '$datum')";
    mysql_query($update) or die (mysql_error());
    
    // De verwerking van toevoegen.html afbeelding gedeelte
    
    if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg");
        {
            if ($bestand_type=="image/gif"_
                {
                    $img_type="gif";
                }
                
            else
                {
                    $img_type="jpg";
                }
        
            $update = "INSERT INTO news (img_id, img_type, img_titel) VALUES ('', '$img_type','$img_titel')";
            mysql_query($update) or die (mysql_error());
            
            $img_id = mysql_insert_id();
            
            mysql_close();
            
    // Het uploaden van de afbeelding
            
            $nieuweBestandsnaam = $img_id.".".$type;
            copy ($bestand,"../plaatjes/$nieuweBestandsnaam") or die ("Er is een fout opgetreden!");
        }
    
    else
        {
            echo "U heeft geen geldige afbeelding toegevoegd!"
        }
?>

Ik wil graag dat de naam van het plaatje in dezelfde rij komt te staan als het id van het nieuwsbericht, zodat de juiste plaatjes bij de juiste nieuwsberichten komen, ik dacht dat dit een goede oplossing was, maar helaas...

Iemand enig idee, hoe ik dit kan verbeteren?

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Ik heb een idee-tje bedacht, maar weet alleen niet als dit uitvoerbaar is!

Als het nieuwsbericht is toegevoegd, wordt het nieuwste id uit de database gehaalt en die wordt toegekend aan img_id!

Gaat het geheel dan wel werken! En zou iemand dan een tipje kunnen oplichten hoe ik dat eventueel zou kunnen doen :?

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
Ja, dat kan, maar ik denk dat je beter even naar je db-ontwerp kan gaan kijken...

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
Dus eigenlijk geldt:

id == img_id

Dus is img_id overbodig.... |:(

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Op maandag 24 september 2001 19:56 schreef goalgetter het volgende:
Ja, dat kan, maar ik denk dat je beter even naar je db-ontwerp kan gaan kijken...
Eigenlijk zou je ook een tabel image kunnen maken! Maar als er geen plaatje wordt upgeload, klopt de nummering niet meer :(

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
Op maandag 24 september 2001 20:06 schreef Mark Olthuis het volgende:

[..]

Eigenlijk zou je ook een tabel image kunnen maken! Maar als er geen plaatje wordt upgeload, klopt de nummering niet meer :(
Waarom wil je hem dan auto_incrementing hebben???
Dan zou ie namelijk niet meer kloppen als er geen plaatje wordt geupload.

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Maar hoe zorg ik er dan voor, dat het id van het plaatje gelijk is aan het id van het bericht met de volgende code?

Als het goed is kan nu de auto_increment weg, en wordt de laatste id toegekent aan het img_id ding toch :?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?
/*    PHP Script geschreven door Marganza Internet.
    Dit PHP Script voegt een nieuws-artikel met foto toe.
    
    Benodigde files:
    # .connectie.php
    # toevoegen.html
    
    Gemaakt op:     24 september 2001
    Gewijzigd op:    24 september 2001

    Marganza Internet
    
    Tel.: +31 (0)6 22 70 95 94
    Fax: +31 (0)84 86 77 903
    
    URL: http://www.marganza.nl
    E-mail: info@marganza.nl

    Marganza Internet is a Dutch company.
*/

    // Het verkrijgen van een database verbinding.

    include(".connectie.php");
    mysql_connect ($ip, $user, $password);
    mysql_select_db($dbname);

    // De verwerking van toevoegen.html artikel gedeelte
    
    $titel = strip_tags($titel);
    $artikel = ($artikel);
    $datum = date("d/m/Y");
    
    $update = "INSERT INTO news (titel, artikel, datum) VALUES ('$titel', '$artikel', '$datum')";
    mysql_query($update) or die (mysql_error());
    
    $img_id = mysql_insert_id();
    
    // De verwerking van toevoegen.html afbeelding gedeelte
    
    if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg");
        {
            if ($bestand_type=="image/gif"_
                {
                    $img_type="gif";
                }
                
            else
                {
                    $img_type="jpg";
                }
        
            $update = "INSERT INTO news (img_id, img_type, img_titel) VALUES ('', '$img_type','$img_titel')";
            mysql_query($update) or die (mysql_error());
                        
            mysql_close();
            
    // Het uploaden van de afbeelding
            
            $nieuweBestandsnaam = $img_id.".".$type;
            copy ($bestand,"../plaatjes/$nieuweBestandsnaam") or die ("Er is een fout opgetreden!");
        }
    
    else
        {
            echo "U heeft geen geldige afbeelding toegevoegd!"
        }
?>

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
Als die id toch gelijk is, waarom wil je hem dan 2x erin zetten?

Als je dan een mogelijkheid wil hebben om het plaatje uit te zetten, maar dan gewoon een veld 'plaatje' die de waarden TRUE of FALSE (1 of 0) kan hebben.

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Het is geen kwestie van een plaatje aan of uit zetten!

Ik bedoel, stel er wordt geen plaatje geupload, hoe weet het script dat dan, die het nieuws moet laten zien :?

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
PHP:
1
2
3
<?
if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg")
?>

(die ; mag niet)

Daardoor weet het systeem het toch....

[edit]

Of wat dacht je van een aparte images tabel, wel zo makkelijk.

Gewoon een tabel met id, type, post_id...

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Ahha, Yes ik heb hem door! Denk ik, ik gaat het proberen!

Die ; komt, omdat ik er al geruime tijd mee bezig ben :D Maar goed ik blijf lachen!

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Helaas :(
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
    // Het verkrijgen van een database verbinding.

    include(".connectie.php");
    mysql_connect ($ip, $user, $password);
    mysql_select_db($dbname);

    // De verwerking van toevoegen.html artikel gedeelte
    
    $titel = strip_tags($titel);
    $artikel = ($artikel);
    $datum = date("d/m/Y");
    
    $update = "INSERT INTO news (titel, artikel, datum) VALUES ('$titel', '$artikel', '$datum')";
    mysql_query($update) or die (mysql_error());
    
    // De verwerking van toevoegen.html afbeelding gedeelte
    
    if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg")
        {
            if ($bestand_type=="image/gif")
                {
                    $img_type="gif";
                }
                
            else
                {
                    $img_type="jpg";
                }
    
            $img_id = mysql_insert_id();
            $update = "INSERT INTO news (img_id, img_type, img_titel) VALUES ('', '$img_type','$img_titel')";
            mysql_query($update) or die (mysql_error());
            
            mysql_close();
            
    // Het uploaden van de afbeelding
            
            $nieuweBestandsnaam = $img_id.".".$type;
            copy ($bestand,"../plaatjes/$nieuweBestandsnaam") or die ("Er is een fout opgetreden!");
        }
?>

HIj voegt wel goed de gegevens toe, alleen geen afbeelding nummer, geen tekst van de afbeelding, en load zelf de afbeelding ook niet up!

Het afbeeldingsnummer blijft de hele tijd nul!

Waar kan dit aanliggen :?

Verwijderd

Mark, dit wordt weer helemaal niks zie ik wel weer...

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
Op maandag 24 september 2001 22:32 schreef RaymondDagelet het volgende:
Mark, dit wordt weer helemaal niks zie ik wel weer...
Flamen doe je maar ergens anders....

Waarom nog geen aparte tabel voor images, dus zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?
    // Het verkrijgen van een database verbinding.

    include(".connectie.php");
    mysql_connect ($ip, $user, $password);
    mysql_select_db($dbname);

    // De verwerking van toevoegen.html artikel gedeelte
    
    $titel = strip_tags($titel);
    $artikel = ($artikel);
    $datum = date("d/m/Y");
    
// De verwerking van toevoegen.html afbeelding gedeelte
    
    if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg")
        {
            if ($bestand_type=="image/gif")
                {
                    $img_type="gif";
                }
                
            else
                {
                    $img_type="jpg";
                }
    
            $update = "INSERT INTO images (id, img_type, img_titel) VALUES ('', '$img_type','$img_titel')";
            mysql_query($update) or die (mysql_error());
            
            $img_id = mysql_insert_id();
            
    // Het uploaden van de afbeelding
            
            $nieuweBestandsnaam = $img_id.".".$type;
            copy ($bestand,"../plaatjes/$nieuweBestandsnaam") or die ("Er is een fout opgetreden!");
        }

    $update = "INSERT INTO news (id, titel, artikel, datum, img_id) VALUES ('', '$titel', '$artikel', '$datum', $img_id)";
    mysql_query($update) or die (mysql_error());
    
    
?>

Er kunnen nog wat foutjes in zitten :)

  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Bedankt!

Maar het werkt nog steeds niet:

Momenteel gebruik ik de volgende bestanden:

toevoegen.html
[html]
<html>
<head>
<title>Nieuws toevoegen</title>
</head>

<body>

<form enctype="multipart/form-data" action="add_nieuws.php" method="post">
<table border="0" width="620">
<tr>
<td width="100%">
<table border="0" width="598">
<tr>
<td width="206"><font face="Arial">Titel :</font></td>
<td width="392"><font face="Arial"><input type="text" name="titel" size="20"></font></td>
</tr>
<tr>
<td width="206"><font face="Arial">Artikel :</font></td>
<td width="392"><font face="Arial"> </font></td>
</tr>
<tr>
<td colspan="2" width="598"><font face="Arial"><textarea rows="13" name="artikel" cols="71"></textarea></font></td>
</tr>
<tr>
<td width="206"> </td>
<td width="392"> </td>
</tr>
<tr>
<td width="598" colspan="2"><font face="Arial">Als u  geen afbeelding wilt toevoegen, laat de twee onderstaande velden dan leeg:</font></td>
</tr>
<tr>
<td width="206"> </td>
<td width="392"> </td>
</tr>
<tr>
<td width="206"><font face="Arial">Afbeelding :</font></td>
<td width="392"><font face="Arial"><input type="file" name="bestand" size="40"></font></td>
</tr>
<tr>
<td width="206"><font face="Arial">Beschrijving van afbeelding :</font></td>
<td width="392"><font face="Arial"><input type="text" name="beschrijving" size="20"></font></td>
</tr>
<tr>
<td width="206"><font face="Arial"> </font></td>
<td width="392"><font face="Arial"> </font></td>
</tr>
</table>
</td>
</tr>
</table>
<font face="Arial"><input type="submit" value="Toevoegen" name="B1"><input type="reset" value="Invoer wissen" name="B2"></font>
</form>

</body>

</html>
[/html]

add_nieuws.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?
    // Het verkrijgen van een database verbinding.

    include(".connectie.php");
    mysql_connect ($ip, $user, $password);
    mysql_select_db($dbname);

    // De verwerking van toevoegen.html artikel gedeelte
    
    $titel = strip_tags($titel);
    $artikel = ($artikel);
    $datum = date("d/m/Y");
    
    $update = "INSERT INTO news (titel, artikel, datum) VALUES ('$titel', '$artikel', '$datum')";
    mysql_query($update) or die (mysql_error());
    
    // De verwerking van toevoegen.html afbeelding gedeelte
    
    if ($bestand_type=="image/gif" OR $bestand_type=="image/jpeg")
        {
            if ($bestand=="image/gif")
                {
                    $img_type="gif";
                }
                
            else
                {
                    $img_type="jpg";
                }
            
            include(".connectie.php");
            mysql_connect ($ip, $user, $password);
            mysql_select_db($dbname);
            
            $query = "SELECT MAX(id) FROM news";
            $result = mysql_query($query);
                            
            $img_id = $result;
            
            $update2 = "INSERT INTO images (img_id, img_type, img_titel) VALUES ('$img_id', '$img_type','$beschrijving')";
            mysql_query($update2) or die (mysql_error());
            
            mysql_close();
            
    // Het uploaden van de afbeelding
            
            $nieuweBestandsnaam = $img_id.".".$img_type;
            copy ($bestand, "../../plaatjes/$nieuweBestandsnaam") or die ("Er is een fout opgetreden!");
        }
?>

Het schrijven in de tabel news, gaat zonder problemen, maar dan houdt het verder op :(

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Ik kan het verkeerd hebben maar volgens mij wordt er onnodig moeilijk gedaan. (Ik heb de geposte code niet doorgekeken)...
Wat je zou moeten doen is twee tabellen; 1 met de newsberichten en 1 met de plaatjes. In de post tabel zet je een refererende sleutel naar de plaatjes tabel.

Vervolgens kun je met de dit plaatjes id (wat dus geen auto_increment is) het plaatje bij de post opzoeken...

Dus eerst insert into plaatje en zorg dat je het id hiervan opvraagt dan een insert into post met img_id = opgehaald id

Volgens mij moet dit werken...

If you are not wiping out you are nog pushing enough...


  • Markje_X
  • Registratie: Maart 2000
  • Laatst online: 29-10-2014

Markje_X

a.k.a. Olthuis

Topicstarter
Zoals uit de bovenstaande code blijkt, werk ik nu ook met twee tabellen, alleen schrijf het ding niets in die tweede tabel :( en load hij ook geen plaatje op

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 13:51

Janoz

Moderator Devschuur®

!litemod

PHP:
1
2
3
4
5
6
7
<?
            $query = "SELECT MAX(id) FROM news";
            $result = mysql_query($query);
                            
            $img_id = $result;
            
?>

Tjongejongejonge ...
1 - result is een resultset, en nog geen resultaat... Je zult iets van mysql_fetch_watdanook($result) moeten gebruiken
2 - Hoe weet je zeker dat het laatste geinserte id ook de hoogste is?? (Ok .. met mysql kun je daar wel een beetje van uitgaan, maar er kunnen natuurlijk wel race-problemen optreden)

Als je ff 2 seconden langer had gekeken naar de phpmanual dan had je daar de functie mysql_insert_id() kunnen zien staan... Kijk daar eens ff naar.

Waarom maak je trouwens in 1 script 2x een verbinding met de db??


IMHO heb je een probleem te pakken wat je pet nog ff flink wat te boven gaat.. Probeer gewoon eerst eens een nieuws systeem in elkaar te flansen zonder plaatjes... Probeer vervolgens eens een "plaatjes upload en maak je eigen fotoalbum"-script... Als je dat allemaal af hebt, en het ook allemaal BEGRIJPT.. dan kun je nog eens aan dit script verder wekren......

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Mijn eigen nieuws systeem heeft een speciale tag voor een plaatje. Zodra de parser deze tag tegenkomt gaat hij in een directory kijken of er een plaatje bestaat met de naam van de id van de nieuwsitem. Als die bestaat voegt hij het plaatje toe aan de nieuws artikel (bestaat ie niet slaat ie hem over..)

Kan dus zelf bepalen waar mijn plaatje precies komt te staan, is het plaatje opeens weg ziet het artikel er nog steeds goed uit omdat hij dan niet wordt weergegeven.

Soms zijn er meerdere mogelijkheden om iets te maken, niet alles moet altijd opgeslagen te zijn in een database.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Het database ontwerp hang altijd af van de voorwaarden die je aan het systeem stelt. Ik weet van Mark dat hij maar 1 plaatje per nieuwbericht wil. Het plaatje en het nieuwsbericht zou dus best kunnen in 1 tabel.

In dat geval kun je het beste de bestandsnaam van het plaatje de id van het nieuwsbericht geven, en slechts 1 insert query uitvoern.

Dus:
- Gegevens van het plaatje in de db plaatsen
- insert_id uitzoeken met mysql_insert_id()
- bestand (plaatje) kopieren naar de goede locatie met de naam als id van het nieuwsbericht.

Maar erg belangrijk: Je kan nooit 2 insert queries uitvoeren voor de zelfde record. In dat geval wordt het altijd 1 insert query en een update query.

  • TheDjasp
  • Registratie: Juni 2001
  • Laatst online: 26-06 08:16

TheDjasp

het wordt toch niks

Op dinsdag 25 september 2001 08:49 schreef Mark Olthuis het volgende:
Zoals uit de bovenstaande code blijkt, werk ik nu ook met twee tabellen, alleen schrijf het ding niets in die tweede tabel :( en load hij ook geen plaatje op
Ik kan het mis hebben maar je if-statement kijkt naar de waarde van variabele $bestands_type, maar die zie ik nergens gedefinieerd worden en dus wordt de statement overgeslagen, en wordt er dus nix uitgevoerd.

Omdat het KAN, HOEFT het nog niet!
I haven't been ignoring you; I've been prioritizing you. Hanglooz; "chromeless windows en fullscreen zuigen allebei als een 1600Watt Nilfisk"
logt nu ook


  • TheDjasp
  • Registratie: Juni 2001
  • Laatst online: 26-06 08:16

TheDjasp

het wordt toch niks

En check dit

Omdat het KAN, HOEFT het nog niet!
I haven't been ignoring you; I've been prioritizing you. Hanglooz; "chromeless windows en fullscreen zuigen allebei als een 1600Watt Nilfisk"
logt nu ook


Verwijderd

Op dinsdag 25 september 2001 11:21 schreef TheDjasp het volgende:

[..]

Ik kan het mis hebben maar je if-statement kijkt naar de waarde van variabele $bestands_type, maar die zie ik nergens gedefinieerd worden en dus wordt de statement overgeslagen, en wordt er dus nix uitgevoerd.
$bestand_type wordt automatisch gevuld na het invullen van het HTML formulier
Pagina: 1