[php] query uitkomst is niet goed, of mijn code :?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Haj,

ik ben bezig met een website waarbij er artikelen kunnen worden geschreven in een tekstformulier, en automatisch op het artikel_index verschijnen.

Het formulier bestaat uit 3 textinputs die worden verwerkt als:

$id
$titel
$inhoud

op mijn artikel_index wordt dus $id en $titel opgevraagd,
het artikel met het laagste id komt dan bovenaan te staan. De naam van mijn link is dan $titel. Erop klikken resulteert in een bekijk_artikel pagina met $titel en $inhoud.

Maar goed, dat is vooral bijzaak, het gaat mij om de variabele $id
Ik probeer de mogelijkheid te creëren om op het formulier ook geen ID in te vullen.
Op die manier wordt dan het laagst mogelijke onbezet ID nummer gebruikt waardoor je dus automatisch een artikel_index krijgt met $id1,$id2[...]

Volgens mij werkte het, maar op de 1 of andere manier wil het nu niet helemaal correct werken. (misschien had ik het eerst gewoon niet door :+ )D.m.v onderstaande code wordt bepaald of er een geldig ID nummer is ingevoerd, of niet:

code:
1
2
3
4
5
6
eregi_checker("^[0-9]{1,3}$",$id,ZERO);
if ($error) {
  //code bepaald ID nummer
} else {
  //neem record op met ingevoerd ID nummer
}


eregi_checker() is een functie die de waarde TRUE geeft aan $error als er geen geldig ID nummer is.

Dit is het stukje code wat het ID nummer moet bepalen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$check_existing_id = "SELECT titel FROM tabel WHERE id='$id'";
$check_existing_id = mysql_query($check_existing_id);
eregi_checker("^[0-9]{1,3}$",$id,ZERO);

if ($error) {
  while ($i==0) {
    if (mysql_num_rows($check_existing_id)!=0) {
      $id=$id+1;
      $check_existing_id = "SELECT titel FROM tabel WHERE id='$id'";
      $check_existing_id = mysql_query($check_existing_id);
      /*deze bovenstaande 2 check_existing_id's 
        had ik overigens eerst niet dit heb ik alleen
        voor de zekerheid geschreven omdat het niet 
        werkte en gewoon van alles probeerde*/
    } else {
      $i=1;
    }
  }
} else {
  //maak record met ingevoerd ID
}


Als ik nu deze code test met lege database als volgt:

Ik voer eerst een artikel in met ID nummer 1 (dus code mag niet ID bepalen)
Vervolgens een artikel zonder ID nummer (dus code moet ID bepalen)

Nu zou het bovenste artikel dus uiteraard ID nummer 1 krijgen, dat klopt. Maar het tweede artikel krijgt op de 1 of andere manier ook ID 1. Terwijl dat volgens mijn code (tenminste, voor zover ik het zie) uitgesloten zijn. En automatisch 2 moeten worden.

Nu moet ik hier wel even bijvertellen dat alle records in de database een vierde waarde hebben naast $id, $titel en $inhoud. Namelijk $custom_id.
Als iemand dus een handmatig ID nummer invoer dan wordt $custom_id TRUE. Zo niet, dan staat custom_id op FALSE (default waarde)

Alle volgende artikelen waarbij ik het ID nummer door de code laat bepalen gaan overigens wel goed. Maar stel ik voer een artikel in met ID nummer 7 (handmatig dus) en er zijn al 5 artikelen met $id1,$id2[...],$id5. En ik voer vervolgens 2 artikelen in waarbij de code het ID nummer zelf moet bepaald worden, dan gaat $id6 goed, maar $id7 niet.

Ik hoop dat ik het een beetje duidelijk heb omschreven, misschien zullen de betere PHPers hier de bovenstaande code omslachtig vinden oid (bijvoorbeeld de if statement in de while loop). Maar ik ben nog maar een paar dagen echt met PHP nodig en ik wil gewoon snappen waarom bovenstaande code niet werkt. En sommige dingen heb ik expres omslachtig gedaan zodat ik zeker weet dat het uitgevoerd wordt.

Overigens is de code, voor de geïnteresseerden bij de else statement (dus waar het ID nummer handmatig is ingevoerd) als volgt:

code:
1
2
3
4
5
6
7
8
if ($error) {
  // blaat
} else {
  if (mysql_num_rows($check_existing_id)!=0) {
    die ("ID nummer is bezet!");
  }
  $insert_artikel = "INSERT INTO tabel VALUES ('$id','$titel','$inhoud', 'TRUE')";
}


En uiteraard komt onder de if-else-statement de uitvoer:

code:
1
2
3
4
5
6
if ($error) {
  //code
} else {
  //nog meer code
}
mysql_query($insert_artikel) or die ("Query mislukt");


maar zoals ik al zei, het geheel werkt niet.
en code technisch komt het voor mij over als, heej. Het MOET gewoon werken :P
Ik zie de eventuele fout gewoon niet

Ikzelf denk dat het misschien wel aan de query's kan liggen die niet meerdere keren uitgevoerd worden oid :? Waardoor ie zijn variabelen/resultaten baseert op een oude query terwijl ie de query ff opnieuw moet doen en een nieuw resultaat moet binnen halen :?

Ik weet het niet ;(
ik hoop iemand hier wel :>

Acties:
  • 0 Henk 'm!

  • Hoppie
  • Registratie: Februari 2001
  • Niet online
Waarom laat je mySQL niet zelf de ID bepalen middels de autoincrement? Ben je van alle gedoe af! Altijd unieke ID's!

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
Waarom gebruik je gewoon geen autonummer- veld voor die ID's? :?

Verder kan je misschien zelf eerst even uw code debuggen (stap voor stap doorlopen).

Tips om te debuggen vind je hier

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoppie schreef op 10 januari 2004 @ 15:46:
Waarom laat je mySQL niet zelf de ID bepalen middels de autoincrement? Ben je van alle gedoe af! Altijd unieke ID's!
Ow ja stom |:(
Dat had ik ook eerst.

Maar regelt autoincrement dan ook dat als er 4 id's in de db zijn (bijvoorbeeld, 1-2-3 en 7) Dat ie dan. 1) Niet de volgende id 8 geeft maar 4. En 2) Als ie bij 6 is, 7 dan overslaat en hem nummer 8 geven

Scheelt me veel code als dat zo werkt 8)7

[ Voor 7% gewijzigd door Verwijderd op 10-01-2004 15:53 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
De 'gaten' die kunnen ontstaan bij auto-incr. columns worden niet opgevuld nee. Als je 4 records hebt, met id's 1, 2, 3, 7, dan krijgt het eerstvolgende record het id 8 mee.

Maar waarom wil je dat die gaten opgevuld worden? Da's toch geen probleem? Een primary key is gewoon een 'administratief nummertje' voor je databank, en je hoeft je nu toch niet druk te maken of dat ID nu 1, 7, of 941211 is ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Naja, in principe wel ja. Maar het gaat om een islam site en naast artikelen wil ik er ook een quran op zetten met dezelfde soort code. En ik wil dus dat surat 56 ook $id 56 heeft.

Maar de gene die de surats invoert die hoeft niet per se bij surat 1 beginnen met invoeren waardoor de rest vanzelf gaat. Maar moet ook gewoon kunnen beginnen met surat 33 invoeren en daarna bijvoorbeeld surat 22. En daarna de rest op volgorde doen. Waardoor de $id's alsnog kloppen ;)

Snappie?

-edit

En ik vind het zelf gewoon netter :)

[ Voor 6% gewijzigd door Verwijderd op 10-01-2004 16:02 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:45
Verwijderd schreef op 10 januari 2004 @ 16:02:
Naja, in principe wel ja. Maar het gaat om een islam site en naast artikelen wil ik er ook een quran op zetten met dezelfde soort code. En ik wil dus dat surat 56 ook $id 56 heeft.
Waarom? Je kan toch ook een veld opnemen met het nummer van die surat? Wat het ID dan is, maakt niet uit.
Daarnaast vind ik het eigenlijk niet zo goed, als je een 'betekenisvol veld' gebruikt als PK. Meestal maak ik een gewoon een extra auto-nummerveld bij in een tabel, wat ik dan gebruik als PK.

Als je bij iedere INSERT een dergelijke check moet doen, dan zal het op de lange duur nogal wat trager gaan om records te inserten.

[ Voor 11% gewijzigd door whoami op 10-01-2004 16:14 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoami schreef op 10 januari 2004 @ 16:13:
[...]

Waarom? Je kan toch ook een veld opnemen met het nummer van die surat? Wat het ID dan is, maakt niet uit.
Daarnaast vind ik het eigenlijk niet zo goed, als je een 'betekenisvol veld' gebruikt als PK. Meestal maak ik een gewoon een extra auto-nummerveld bij in een tabel, wat ik dan gebruik als PK.

Als je bij iedere INSERT een dergelijke check moet doen, dan zal het op de lange duur nogal wat trager gaan om records te inserten.
Hmm, daar heb je helemaal gelijk in :)
En het is nog makkelijker, sneller en logischer ook ;)

naja, bedankt voor de hulp iig
Ik ga het op bovenstaande manier oplossen
Pagina: 1