login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Uniek veld controleren

Offline DRobje - 14/03/2007 11:07
Avatar van DRobjeNieuw lid Hoi allen,
ben bezig om een veldje uniek te maken die een controle uitvoerd op de db of dit nummer inmiddels bestaat. In Mysql had ik het veld uniek willen maken maar het kan voorkomen dat dit veld leeg is. En je raad het al dat het meerdere keren voorkomt dat die leeg is dus dat gaat niet op en zou het via php moeten. Hoe ga ik dan verder vanuit mijn huidige script:

  1. <?php
  2. if(isset($_GET['id']))
  3. {
  4. $query = "SELECT * FROM ft_form_4 WHERE submission_id = ".$_GET['id'];
  5. $sql = mysql_query ($query) or die (mysql_error());
  6. }
  7. echo "<table class=\"style6\" border=\"1\" width=\"750\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">" ;
  8. while ($row= mysql_fetch_array ($sql)){
  9. $nr = $row['IPC'];
  10. $hd = $row['Header'];
  11. $pf = $row['Part_Family'];
  12. $rt = $row['Request_Type'];
  13. $prio = $row['Prio'];
  14. $desc = $row['Description'];
  15.  
  16. }
  17. echo "</table>";
  18. //echo "$nr";
  19. ?>
  20.  
  21. </p>
  22. <table width="447" border="0" align="center">
  23. <tr>
  24. <td width="86"><span class="style20">IPC</span></td>
  25. <td width="304"><span class="style11"><?php echo "$nr";?></span></td>
  26. </tr>
  27. <tr>
  28. <td><span class="style20">Part family </span></td>
  29. <td><span class="style11"><?php echo "$pf";?></span></td>
  30. </tr>
  31. <tr>
  32. <td><span class="style20">Request Type </span></td>
  33. <td><span class="style11"><?php echo "$rt";?></span></td>
  34. </tr>
  35. <tr>
  36. <td><span class="style20">Prio</span></td>
  37. <td><span class="style11"><?php echo "$prio";?></span></td>
  38. </tr>
  39. <tr>
  40. <td><span class="style20">Description</span></td>
  41. <td><span class="style11"><?php echo "$desc";?></span></td>
  42. </tr>
  43. </table>
  44. <table width="447" border="0" align="center">
  45. <tr>
  46. <td width="196"><input name="IPC" type="hidden" value="<?php echo "$nr";?>" /></td>
  47. <td colspan="2"><span class="style18"></span></td>
  48. </tr>
  49. <tr>
  50. <td><span class="style20">Header nummer </span></td>
  51. <td colspan="2"><input name="header" type="text" id="header"></td>
  52. </tr>
  53. <tr>
  54. <td><span class="style20">Parent PR aantal </span></td>
  55. <td colspan="2"><input name="parentpr" type="text" id="parentpr" size="5" maxlength="5"></td>
  56. </tr>
  57. <tr>
  58. <td><span class="style20">Child PR aantal </span></td>
  59. <td colspan="2"><input name="childpr" type="text" id="childpr" size="5" maxlength="5"></td>
  60. </tr>
  61. <tr>
  62. <td><span class="style18"><input type="hidden" name="Status" value="open"></span></td>
  63. <td colspan="2"><span class="style18"></span></td>
  64. </tr>
  65. <tr>
  66. <td><span class="style18"><input type="hidden" name="login" value="<?php echo $_SESSION['login']; ?>" /></span></td>
  67. <td width="80"><input name="Reset" type="reset" value="Reset"></td>
  68. <td width="110"><input name="Submit" type="submit" value="Submit"></td>
  69. </tr>
  70.  
  71. </table></form>


Het gaat om het veld Header. dit veld mag dus geen dubbele nummers bevatten. Wie kan mij helpen?

15 antwoorden

Gesponsorde links
Offline Ultimatum - 14/03/2007 11:09
Avatar van Ultimatum PHP expert Ten eerste houd vars buiten php: <?php echo "$pf";?> word <?php echo $pf;?>
Ten tweede kan je met empty() kijken of het veld leeg is. Als dat niet zo is zou ik alle values ophalen uit van het veld header en dan kan je met mysql_num_rows() kijken of de value meerdere keren voorkomt
Offline DRobje - 14/03/2007 11:27
Avatar van DRobje Nieuw lid Ja, maar hoe doe ik dat. het vervelende is namelijk dat ik al een optie op mijn form proces heb namelijk:
<form action="process.php" method="post"> en in die query heb ik al wat lopen stoeien met COUNT maar word daar niet wijzer van.
Offline Ultimatum - 14/03/2007 11:30
Avatar van Ultimatum PHP expert Zoiets zou moeten werken:
  1. <?php
  2. if(!empty($row['Header']))
  3. {
  4. $select = mysql_query("SELECT Header FROM ft_form_4 WHERE Header = '". $row['Header'] ."'");
  5. if(mysql_num_rows($select) == 0)
  6. {
  7. //komt nog niet voor
  8. }
  9. else
  10. {
  11. //komt minstens 1 keer voor
  12. }
  13. ?>
Offline DRobje - 14/03/2007 11:37 (laatste wijziging 14/03/2007 12:12)
Avatar van DRobje Nieuw lid Maar hoe brei ik dit nu samen met de oorspronkelijke query van mij. Die werkt nu namelijk perfect. Of moet ik een nieuwe aanmaken in hetzelfde bestand. En dan wil ik niet alleen kijken of die meerdere malen voorkomt maar het dus onmogelijk maken dat men het in kan vullen. Dat er dus een melding komt van nummer al gebruikt of zo.
Het gaat er dus om dat ik de huidige functie van het bestand niet verlies omdat hier meerder pagina's voor zitten.
Offline Rens - 14/03/2007 12:16
Avatar van Rens Gouden medaille

Crew algemeen
Als ik je snap, wil je een uniek veld toevoegen, wat ook leeg mag zijn?
Kun je dan geen gebruik maken van PHP.net: mysql_insert_id?
Of snap ik je nu niet goed?
Offline Ultimatum - 14/03/2007 12:41
Avatar van Ultimatum PHP expert @rens als ik het goed begrijp wil hij dat als header is ingevuld (hoeft dus niet) maar 1 keer in de database voorkomt. Hij moet dus controleren of de naam van de header al in de database bestaat voordat hij toegevoegd mag worden.

Ten minste zo begrijp ik het
Offline DRobje - 14/03/2007 13:23 (laatste wijziging 15/03/2007 17:14)
Avatar van DRobje Nieuw lid Exact, Ultimatum. dat is de bedoeling. De reden waarom deze namelijk met lege waarden voorkomen is als de omschrijving wordt gelogd. Hier is dan geen header beschikbaar. Die moeten later toegevoegd worden onder hetzelfde id. Misschien is het zo wat duidellijker. Maar zonder mijn huidige code op de schop te gooien zou ik graag dit hierin willen breien en zodra men op de knop drukt dat hij vertelt dat het al bestaat en niet toegevoegd kan worden.
Offline Ibrahim - 14/03/2007 14:32 (laatste wijziging 14/03/2007 14:32)
Avatar van Ibrahim PHP expert
  1. <?php
  2. if( empty( $_POST['header'] ) )
  3. {
  4. // gewoon inserten
  5. }
  6. else
  7. {
  8. $query = mysql_query("SELECT header FROM tabel WHERE header ='" . mysql_real_escape_string( $_POST['header'] ) );
  9.  
  10. if( mysql_num_rows( $query_hierboven ) > 0 )
  11. {
  12. // er bestaat al een header in de database
  13. }
  14. else
  15. {
  16. // geen header in de database
  17. }
  18. }
  19. ?>


zo iets ?
Offline DRobje - 14/03/2007 22:23 (laatste wijziging 15/03/2007 17:11)
Avatar van DRobje Nieuw lid nee sorry. het moet absoluut geen insert worden. daar zorgt proces.php voor. hij moet het alleen checken. probleem is dus dat ik al een toepassing heb voor die Form action. 
Offline ikkedikke - 15/03/2007 17:22 (laatste wijziging 15/03/2007 17:32)
Avatar van ikkedikke PHP expert
  1. SELECT T1.thuisteam, (
  2. SELECT COUNT( 1 )
  3. FROM wedstrijden AS T2
  4. WHERE T2.thuisteam = T1.thuisteam
  5. AND T2.id != T1.id
  6. )
  7. FROM wedstrijden AS T1
  8. WHERE (
  9.  
  10. SELECT COUNT( 1 )
  11. FROM wedstrijden AS T3
  12. WHERE T3.thuisteam = T1.thuisteam
  13. AND T3.id != T1.id
  14. ) !=0
  15. LIMIT 0 , 30

Het is getest maar je moet de namen nog even aanpassen.

Citaat:
siliecom14's edit:
ikkedikke code tags !
Offline DRobje - 15/03/2007 22:39
Avatar van DRobje Nieuw lid Die begrijp ik niet. Dit is toch een query uit 2 verschillende tabellen??
Offline Rens - 16/03/2007 09:03
Avatar van Rens Gouden medaille

Crew algemeen
Ja.
Kan dit?
Ja.
Offline DRobje - 16/03/2007 09:28 (laatste wijziging 16/03/2007 21:08)
Avatar van DRobje Nieuw lid Ja dat het kan snap ik, maar dat is bij mij toch niet van toepassing?? Kun je me een beetje op weg helpen. Volgens mij snap ik ongeveer wel wat het plannetje is maar ik zit even met het aanroepen van die process.php.
:?:
Offline ikkedikke - 16/03/2007 15:20
Avatar van ikkedikke PHP expert Ok hier komt de uitleg
Ik neem aan dat je eens cript wil dat eenmalig alle dubbelen er uit haalt?
als je daarna namelijk de kolom een unique maakt zal er nooit meer een dubbele waarde voorkomen.
  1. SELECT T1.id, (
  2. SELECT COUNT( 1 )
  3. FROM wedstrijden AS T2
  4. WHERE T2.thuisteam = T1.thuisteam
  5. AND T2.id != T1.id
  6. )
  7. FROM wedstrijden AS T1
  8. WHERE (
  9.  
  10. SELECT COUNT( 1 )
  11. FROM wedstrijden AS T3
  12. WHERE T3.thuisteam = T1.thuisteam
  13. AND T3.id != T1.id
  14. ) !=0
  15. LIMIT 0 , 30

Regel 1: Neem voor iedere rij de kolom ID (of een kolom waarmee jij precies ziet om welke rij het gaat.) uit tabel T1(tijdelijke tabel, zie regel 7)
2: Het tweede veld dat geselecteerd wordt: Het aantal rijen dat er is dat ook dat thuisteam heeft maar een ander uniek veld.
3: ... uit tabel wedstrijden, die voor de query de tijdelijke naam T2 krijgt.
4,5: Als van T2 de thuisploeg gelijk is aan die van de huidige rij van T1, maar een ander ID heeft, tel dan 1 op bij de COUNT()
7: De oorspronkelijke query wordt gedraaid op de tabel wedstrijden, met de tijdelijke naam T1
9: Selecteer alle rijen waar de count meer is dan 0 (0 wordt gezien als FALSE, alle getallen daarboven worden gezien als TRUE.

Dit zal wel volstaan volgens mij.
Offline DRobje - 17/03/2007 13:02 (laatste wijziging 18/03/2007 13:21)
Avatar van DRobje Nieuw lid Misschien wordt het verkeerd begrepen. Mijn script moet dit niet eenmalig doen maar altijd. ik zit te denken aan zoiets:

  1. $query="SELECT login FROM users WHERE login='".$_POST["login"]."'";
  2.  
  3. // Run query:
  4. $result=mysql_query($query, $link) or die("MySQL query $query failed. Error if any: ".mysql_error());
  5.  
  6. // If a row exists with that username, issue an error message:
  7. if( ($row=mysql_fetch_array($result)) ){
  8. $messages[]="Login ID \"".$_POST["login"]."\" already exists. Try another.";
  9. }


Maar hoe pas ik dat toe op mijn huidige zonder verlies van het aanroepen van process.php en het $_GET [id] verhaal.
:?: 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.261s