[PHP] Vreemd probleem met uploadscript *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Voor een onderdeel van een site heb ik een upload script geschreven.
Dit script plaatst het geuploadde bestand (mits het aan een aantal voorwaarden voldoet) in een bepaalde map en plaatst in een MySQL tabel een vermelding (naam van de uploader + bestandsnaam) naar het plaatje.
Dit werkte op zich allemaal goed.

Nu wilde ik, om te voorkomen dat er 2x dezelfde naam in de DB komt, een deel toevoegen die controleerde of de naam al voorkwam. Op zich leek mij dit goed te doen. Ik schreef hiervoor het volgende stukje:
PHP:
1
2
3
4
5
6
    connect_db();
    $naamcheck = mysql_num_rows(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")) or die(mysql_error()); 
    if (!empty($naamcheck)) { 
        echo "$html_code <li>Jij hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij </li>";
        exit();
    }

Na het toevoegen van dit stukje script krijg ik keurig een foutmelding wanneer de naam al in de DB stond, maar was dit niet het geval dan kreeg ik alleen nog maar een lege pagina.. Zodra ik dit stukje verwijder, werkt het script verder weer perfect.

Verder heb ik een keer de if-statement verwijderd maar de rest laten staan. Vervolgens heb ik een
PHP:
1
echo $naamcheck;
toegevoegd.
Ik kreeg dan bij een naam die al in de DB stond een getal te zien (afhankelijk van het aantal keren dat de naam voorkwam).
Op zich lijkt mij dus dat de code klopt. Maar waar ga ik de fout in?

[ Voor 6% gewijzigd door JJapie op 23-06-2003 20:27 ]


Acties:
  • 0 Henk 'm!

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Na het toevoegen van dit stukje script krijg ik keurig een foutmelding wanneer de naam al in de DB stond, maar was dit niet het geval dan kreeg ik alleen nog maar een lege pagina.. Zodra ik dit stukje verwijder, werkt het script verder weer perfect.
Wat is dan de else in de rest van je pagina?
Daarnaast kan je toch ook gewoon gebruik maken van de functie file_exists () om te controleren of er al een bestand met dezelfde naam bestaat.

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
er is toch niet per se een 'else' nodig? De else is namelijk dat het script gewoon doorgaat...
File_exists() gaat hier niet op omdat ik controleer of de naam in de DB voorkomt (niet de bestandsnaam, maar de naam van de persoon). Om te controleren of een bestand al voorkomt in de dir gebruik ik inderdaad file_exists()..

.edit: ik heb er maar een if-else statement van gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
connect_db();
    $naamcheck = mysql_num_rows(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")) or die(mysql_error()); 
    if (!empty($naamcheck)) 
      { 
          echo "$html_code <li>Jij hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij@dus</li>";
      exit();
      } 
    else {
    $naamcheck = "goedzo";
    }

Dit heeft echter geen effect..

[ Voor 58% gewijzigd door JJapie op 23-06-2003 18:59 ]


Acties:
  • 0 Henk 'm!

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

er is toch niet per se een 'else' nodig? De else is namelijk dat het script gewoon doorgaat...
Je zegt dat wanneer je een naam invoert waar geen bestand voor aanwezig is (en je script dus werkt) je een blanke pagina krijgt daarom vraag ik wat de else is.
Maar wat doet je code verder dan? Moet er iets getoond worden wanneer $naamcheck leeg is, of juist niet?

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Mijn script werkt wanneer er een naam wordt ingevoerd die al in de database voorkomt, ik krijg dan keurig de medling dat diegene al een plaatje heeft geupload.
Maar als ik een naam invul van een persoon die nog niet in de database voorkomt, dan krijg ik een blanke pagina..

Als $naamcheck leeg is, en de naam (van een persson NIET van het bestand) dus niet in de db voorkomt moet het plaatje gemoved worden naar een dir en een entry worden aangemaakt in de db voor die persoon...

Acties:
  • 0 Henk 'm!

Verwijderd

Maar wat doe je na de code die je hierboven hebt geplaatst?
Dan zul je toch zoiets moeten doen als:

if ($naamcheck == "goedzo") {plaats plaatje in folder en vermelding in database}

Toevallig ben ikzelf met iets dergelijks bezig op dit moment en dat werkt prima...

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Voor de volledigheid post ik het hele script. Dan snappen jullie in ieder geval wat de bedoeling is.
Als ik het script door loop, lijkt het allemaal te kloppen. Toch is dit niet het geval.. De vraag is alleen waar dan de fout zit..

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/* (c) 2003 - Jan Jaap van Donselaar */

if($submit){

//wat config-shit
require("vars.inc.php");
$ext="jpg jpeg png gif bmp"; //de toegestane extensies
$max_size = 500; // de maximale grootte in kilobytes
$file_size = $_FILES["bestand"]["size"]; //bestandsgrootte getten
$html_code = "
<html>
<head>
<title>My.smoel :: Upload je smoel</title>
</head>
<body bgcolor=#000080>
<font size=2 face=\"verdana, arial, helvetica\" color=#FFFFFF>";

    if(empty($jenaam)){
    echo "  $html_code
        <li>Je moet een naam opgeven!</li> ";
    exit();
    }
    
    connect_db();
    //komt de naam al voor in de DB?
    $naamcheck = mysql_num_rows(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")) or die(mysql_error()); 
    if (!empty($naamcheck)) //Ja, dan moet het script stoppen en een foutmelding geven
      { 
          echo "$html_code <li>Jij hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij</li>";
      exit();
      } 
    else {
    //het script moet gewoon doorlopen.. Ik heb hier de variabele naamcheck wel een waarde toegekend, maar ik gebruik dit niet..
    //ik wil niets anders dan dat het bestand de rest van het script doorloopt.
    $naamcheck = "goedzo";
    }
    
    if (is_uploaded_file($bestand)) { 

    $file = $_FILES['bestand']['name']; 

    //klopt de extensie?
    $name = explode(".",$file); 
        $total = count($name)-1;  
        $file_ext = strtolower($name[$total]); 
        unset($total); 

        $ext_perm = explode(" ",$ext); 
        $valid_ext = 0; 
        $total = count($ext_perm); 
        for ($i=0; $i<$total; $i++) { 
            if ($file_ext == $ext_perm[$i]) { 
                $valid_ext = 1; 
                break; 
            } 
        } 
        if ($valid_ext == 0) {
          echo "$html_code
        <li>Wij accepteren alleen bestanden met de volgende extensies:<b> ".$ext."</b></li>\n"; 
        exit();
    }

    // bestaat bestandsnaam al in de dir?
    if (file_exists("/home/janjaap/public_html/gastenboek/uploaden/smoelen/$file")) {
                echo "
        $html_code
        <li>Deze bestandsnaam bestaat al.. Hernoem je bestand!</li>\n"; 
        exit();
    }

    //grootte controleren
    if (!empty($max_size)) 
          $max_size = 500;
        $max_size = $max_size*1024; 
        if ($file_size >= $max_size) {
          echo "
    $html_code
    <li>De grootte van je bestand (".round($file_size/1024)." kb) is te groot. De maximale grootte is: ".round($max_size/1024)." kb.</li>\n"; 
      exit();
    }
    
    $path = "smoelen/".$file; 
    //een kopie verplaatsen naar de eindbestemming
    move_uploaded_file($_FILES['bestand']['tmp_name'],$path);
    
    //een vermelding in de DB maken naar het plaatje + naam
    $add = "INSERT INTO smoelen (naam, smoelurl) VALUES ('$jenaam', '$file')";
        connect_db();
        $added = mysql_query($add) or die("Helaas, Het toevoegen van je plaatje aan de Database is mislukt.. Stuur een mailtje met onderstaande gegevens naar mij".n);
        if (!$added) {
           $msg_db = "<font color=red>maar het is niet gelukt om je plaatje toe te voegen aan de DB. Stuur aub een mailtje met onderstaande gegevens naar mij</font>".n;
           }
        else {
        $msg_db = "en je plaatje zit in de DB";          
     }
    
    
    echo "
    $html_code
    <br>naammsjek:$naamcheck<br>Het uploaden is geslaagd $msg_db!<br><br>Je hebt het volgende bestand geupload:<b>";
    echo $file;
    echo "</b><br>De grootte van het bestand is: <b>".round($file_size/1024)." kb</b><br>Je naam is: <b>$jenaam</b><br>Dit is je bestand:<br><br>";
    echo "[img]\"$path\"[/img]";
    }

    else{
    echo "$html_code foutjuhh";
    }
}


else {

?> 
<html>
<head>
<title>My.smoel :: Upload je smoel</title>
</head>
<body bgcolor=#000080>
<font size=2 face="verdana, arial, helvetica" color=#FFFFFF>
Gebruik dit formulier om je smoel te uploaden.<br>
<form ENCTYPE="multipart/form-data" action="" method="POST">
<b>Je naam</b><br><input type="text" name="jenaam"><br><br>
<b>Bestand</b><br><input type="file" name="bestand"><br>
<br><input type="submit" name="submit" value="Voeg toe!">
</form>
</font>
</body>
</html>
<?php
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
    //grootte controleren
    if (!empty($max_size)) 
          $max_size = 500;
        $max_size = $max_size*1024; 
        if ($file_size >= $max_size) {
          echo "
    $html_code
    <li>De grootte van je bestand (".round($file_size/1024)." kb) is te groot. De maximale grootte is: ".round($max_size/1024)." kb.</li>\n"; 
      exit();
    }
Zit in deze if-statement, dus niet in de daarin geneste if-statement, niet foutje?
Moet het niet zijn:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if (!empty($max_size)){   // Hier is dus iets veranderd 
          $max_size = 500;
          $max_size = $max_size*1024; 
          if ($file_size >= $max_size) {
                echo "
                $html_code
                <li>De grootte van je bestand (".round($file_size/1024)." kb) is te groot.
                De maximale grootte is: ".round($max_size/1024)." kb.</li>\n";
                exit();
          }
}    // en hier ook

Bovendien kan naar mijn mening de else-statement gewoon weg, maar dat moet niets veranderen aan de werking van het script als je $naamcheck later toch niet meer gebruikt.
PHP:
1
2
3
4
5
else { 
    //het script moet gewoon doorlopen.. Ik heb hier de variabele naamcheck wel een waarde toegekend, maar ik gebruik dit niet.. 
    //ik wil niets anders dan dat het bestand de rest van het script doorloopt. 
    $naamcheck = "goedzo"; 
    }

zou dus weg moeten kunnen.

Ben benieuwd of dit iets uitmaakt...

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
waarom doe je dit trouwens:

PHP:
1
2
3
$ext="jpg jpeg png gif bmp";
// ...
$ext_perm = explode(" ",$ext);

waarom niet gewoon gelijk een array? lijkt me wat sneller

en dit:
PHP:
1
2
3
4
5
6
7
        $ext_perm = explode(" ",$ext);
        $valid_ext = 0;
        $total = count($ext_perm);
        for ($i=0; $i<$total; $i++) {
            if ($file_ext == $ext_perm[$i]) {
                $valid_ext = 1;
                break;

kun je ook met een in_array oplossen. is ook wat sneller en overzichterlijker:
PHP:
1
2
3
4
if (in_array($file_ext, $ext_perm))
   // extentie is toegestaan
else
   // extentie is niet toegestaan

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Als de naam niet voorkomt in de database, levert mysql_num_rows() toch 0 op?
Dan is $naamcheck dus niet empty. Dan is $naamcheck *nooit* empty.

Of vergis ik me nu?

Acties:
  • 0 Henk 'm!

Verwijderd


Acties:
  • 0 Henk 'm!

Verwijderd

jat deze maar:

van www.diehards.tk
uploadscript, plaatje wordt upgeload, naam wordt in database geknalt, titel en zo ook
file wordt opgeslagen als een nummer.

naja kijk zelf maar

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
70
71
72
73
74
75
76
77
<?php
   include ("mysql.php");
  if($file)
  {
    $filename  = $HTTP_POST_FILES[file][name];
    $extensie = substr($filename, -3);
    if (strtoupper($extensie) != "JPG")
    {
    echo "You can only upload .jpg files!";
    }    else {

      $destination = "upload/";  

      $i = 1;

      while (file_exists($destination . $i . ".jpg"))

      {

        $i = $i + 1;

      }

      $name =  $i;

      copy($file, $destination . $name . ".jpg");
      $jpg = ".jpg";
      $adres = $destination . $name . $jpg;
    $d = date(d);
    $m = date(m);
    $y = date(Y);
    $date = $d . "/" . $m . "/" . $y;
    
      $query2 = "INSERT INTO `foto` (`titel`, `adres`, `datum`, `albumid`, `door`) VALUES ('$titel', '$adres', '$date', '$albumid', '$logn')";
      mysql_query($query2) or die("query mislukt");

      echo "File uploaded succesfully!";

    }

  }

?>

<form action="index.php?page=fotoadd" method="post" enctype="multipart/form-data">
  <table width="75" border="0">
    <tr>
      <td>Titel:</td>
      <td><input name="titel" type="text" id="titel"></td>
    </tr>
    <tr>
      <td>Album:</td>
      <td><select name="albumid">
       <?php
              $query = "SELECT * FROM album ORDER BY id DESC";
              $result = mysql_query($query);
              $row = mysql_num_rows($result); 
                for ($i = 1; $i <= $row ; $i++ ) {
                   $r = mysql_fetch_array($result);
                   $id = $r['id'];
                   $titel = $r['titel'];
                   echo "<option value='$id'>$titel</option>";
                }
                ?>
        </select></td>
    </tr>
    <tr>
      <td>Bestand:</td>
      <td><input type="file" name="file"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="submit" type="submit" value="Upload"></td>
    </tr>
  </table>
  <p>&nbsp; </p>
</form>


;)

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Ik heb de aanpassingen van J-Rome uitgevoerd. Dit leverde niets op.
Toen ben ik maar wat code gaan vervangen:

Voor het controleren van de naam gebruik ik nu:
PHP:
1
2
3
4
5
6
$naamcheck = mysql_fetch_array(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")); 
    if ($naamcheck[0] > 0) 
    { 
    echo "$html_code <li>Jij ($jenaam) hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij@ikke</li>";
    exit();
    }


En voor het controleren van het bestand:
PHP:
1
2
3
4
5
6
7
//bestaat bestandsnaam al?
    $filecheck = mysql_fetch_array(mysql_query("SELECT * FROM smoelen WHERE smoelurl = '$file'")); 
    if ($filecheck[0] > 0) 
    { 
    echo "$html_code <li>Dit bestand ($file) bestaat al! Hernoem je bestand.</li>";
    exit();
    }


Het werkt al wel iets beter, maar absoluut nog niet ideaal...
Als ik als naam een getal gebruik gaat het allemaal goed, maar anders.. ho maar :(
Gebruik ik een naam met een spatie, dan gaat het helemaal fout.. ;(
Deze manier van controleren is dus ook super brak... Hoe doe ik het beter?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
GFM schreef op 25 June 2003 @ 09:48:
voor het controleren van de naam gebruik ik nu:
PHP:
1
2
3
4
5
6
$naamcheck = mysql_fetch_array(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")); 
    if ($naamcheck[0] > 0) 
    { 
    echo "$html_code <li>Jij ($jenaam) hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij@ikke</li>";
    exit();
    }
Wat je hier doet is ook niet echt een goeie oplossing
Doe je zelf een lol en probeer het gewoon overzichtelijk te houden ipv dat je alles op 1 regel probeert te proppen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query = "SELECT * FROM smoelen WHERE naam = '".$jenaam."'";
$result = mysql_query($query);
// om nu te checken of er rows zijn gereturned doe je dit:
$total = mysql_num_rows($result);
// total bevat nu het aantal rows dat werd teruggegeven
if ($total > 0)
{
   // geef foutmelding
}
else
{
  $row = mysql_fetch_assoc($result);
  // doe hier verder wat je wil
}
?>


En als ik je nog een tip mag geven: probeer die exits zoveel mogelijk te vermijden. Daar wordt je code ook brak van

[ Voor 7% gewijzigd door marty op 25-06-2003 10:12 ]


Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Bedankt, that did the trick :) Had die dingen een beetje door elkaar gegooid zie ik :P

Jij zegt dat je beter geen exit(); kan gebruiken.. Maar hoe stop je een code dan?

[ Voor 4% gewijzigd door JJapie op 25-06-2003 10:23 ]


Acties:
  • 0 Henk 'm!

  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08 16:13
In normale omstandigheden bouw je daar dus if-then-else constructies omheen. Zoals in iedere programmeer-taal: Een functie returned altijd op 1 plaats: De laatste regel code in die functie...

Als je exit toch wilt gebruiken, moet je er ook aan denken dat je de HTML wel 'afmaakt'. Want je opent je HTML wel netjes, maar de </body></html> vergeet je... En da's ook al niet zo netjes :S

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
pgussow schreef op 25 June 2003 @ 10:39:
In normale omstandigheden bouw je daar dus if-then-else constructies omheen. Zoals in iedere programmeer-taal: Een functie returned altijd op 1 plaats: De laatste regel code in die functie...

Als je exit toch wilt gebruiken, moet je er ook aan denken dat je de HTML wel 'afmaakt'. Want je opent je HTML wel netjes, maar de </body></html> vergeet je... En da's ook al niet zo netjes :S
Jup, zal dat iig meteen ff afmaken :)

Maar als je al die checks wilt uitvoeren krijg je toch een hele diepe if-else constructie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if(naam=goed) {
    //naam goed, volgende check

    if(grootte=goed){
    //volgende check dan maar
        if(extensie=goed){
        //nu plaatje verplaatsen + in DB proppen
        }
        else {
        //helaas extensie fout
        }
    }
    else{
    //helaas grootte fout
    }   
}

else {
//helaas naam fout
}


Maar dit zou wel moeten werken dus?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
GFM schreef op 25 juni 2003 @ 10:23:
Jij zegt dat je beter geen exit(); kan gebruiken.. Maar hoe stop je een code dan?
Je moet niet denken in termen van je code stoppen, maar in termen van je code een bepaald pad laten volgen.

Stel je gaat een controle uitvoeren en je wil dat ie in 3 van de 4 mogelijke gevallen 'stopt'. Dan doe je zoiets
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
if ($case == 1)
{
    $error = "dit mag niet";
}
elseif ($case == 2)
{
    $error = "dit mag ook niet";
}
elseif ($case == 3)
{
    $error = "dit mag al helemaal niet";
}
elseif ($case == 4)
{
    // dit mag wel. je zet geen error
}

if (!isset($error))
{
    // ga doen wat je wil doen
}
else
{
     // er is een error dus die geef je weer
    echo $error."<br>\n";
     // (of niet)
}

of gewoon een wat grotere tree structuur bouwen:
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
if ($case == 1)
{
    $query = "SELECT * FROM table WHERE iets = '".$case."'";
    if (!$result = mysql_query($query))
    {
        echo "Er kon helaas geen geldige query worden gedaan<br>\n";
        mail("jezelf","fout",$query."\n".mysql_error());
    }
    else
    {
        if (mysql_num_rows($result) == 0)
        {
            echo "De query was geldig, maar leverde geen rows op<br>\n";
        }
        else
        {
            while($row = mysql_fetch_assoc($result))
            {
                echo $row['ietsanders']."<br>\n";
            }
        }
    }
}
else
{
    echo "Bij deze waarde van case kunnen we geen query doen<br>\n";
}

Het zijn maar wat voorbeeldjes uit de losse pols verzonnen...

[ Voor 10% gewijzigd door marty op 25-06-2003 10:49 ]


Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Ok, dat is duidelijk.. Zal voortaan een andere opbouw kiezen en de exit(); niet meer gebruiken..

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom doe je dit niet doormiddel van een database restrictie en dan de error van mysql afvangen.

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Omdat ik dan weer helemaal overnieuw kan beginnen :P

Nee, ik zou zo snel niet weten wat jij dan wil :?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
GFM schreef op 25 June 2003 @ 20:00:
Omdat ik dan weer helemaal overnieuw kan beginnen :P

Nee, ik zou zo snel niet weten wat jij dan wil :?
Waar hij waarschijnlijk op doelt is dat je een veld ook uniek kan maken : die staat dan geen dubbele waardes toe. Op het moment dat je toch een waarde dubbel probeert in te voeren krijg je dan een foutmelding.

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Ja, ok dat kan inderdaad. Maar dat vind ik persoonlijk geen mooie manier... Bovendien zullen mensen eerder 'schrikken' van een MySQL foutmelding..

Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

PHP:
1
2
3
4
//klopt de extensie? 
    $name = explode(".",$file); 
        $total = count($name)-1;   
        $file_ext = strtolower($name[$total]);


TXT file hernoemen naar een JPG en woei , gelukt :P

Beter te checken op MIME type

PHP:
1
$_FILES[ 'naam' ] [ 'type' ]


;)

Ja man


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
GFM schreef op 25 June 2003 @ 21:40:
Ja, ok dat kan inderdaad. Maar dat vind ik persoonlijk geen mooie manier... Bovendien zullen mensen eerder 'schrikken' van een MySQL foutmelding..
dat is nergens voor nodig. als jij gewoon in php op die foutmelding controleert en 'm afvangt hoeft de gebruiker daar niets van te zien.

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
BierPul schreef op 25 June 2003 @ 22:16:
PHP:
1
2
3
4
//klopt de extensie? 
    $name = explode(".",$file); 
        $total = count($name)-1;   
        $file_ext = strtolower($name[$total]);


TXT file hernoemen naar een JPG en woei , gelukt :P

Beter te checken op MIME type

PHP:
1
$_FILES[ 'naam' ] [ 'type' ]


;)
Hmm, ja, dat is idd wel een goed idee :) FF de handleiding raadplegen...

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Is dit misschien iets:
PHP:
1
2
3
4
5
6
7
8
connect_db();

$result = mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'") or die(mysql_error();

if (mysql_num_rows($result) > 0) { 
    echo "$html_code <li>Jij hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij</li>"; 
    exit(); 
}

In plaats van:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    connect_db(); 
    //komt de naam al voor in de DB? 
    $naamcheck = mysql_num_rows(mysql_query("SELECT * FROM smoelen WHERE naam = '$jenaam'")) or die(mysql_error()); 
    if (!empty($naamcheck)) //Ja, dan moet het script stoppen en een foutmelding geven 
      { 
          echo "$html_code <li>Jij hebt al een plaatje op je naam staan. Wil je deze vervangen, stuur dan een mailtje naar mij</li>"; 
      exit(); 
      } 
    else { 
    //het script moet gewoon doorlopen.. Ik heb hier de variabele naamcheck wel een waarde toegekend, maar ik gebruik dit niet.. 
    //ik wil niets anders dan dat het bestand de rest van het script doorloopt. 
    $naamcheck = "goedzo"; 
    }


Misschien dat die code van mij iets uitvooert, kijk maar.

offtopic:
[quote]Verwijderd schreef op 25 June 2003 @ 02:27:
[...]

Nee :)[/quote]

Je vergist je wel, voer dit script maar eens uit:
[php]
<?
$nul = 0;
$een = 1;
echo (empty($nul)) ? 'true' : 'false';
echo '<br>';
echo (empty($een)) ? 'true' : 'false';
?>
[/php]

Acties:
  • 0 Henk 'm!

Verwijderd

Slagroom schreef op 26 June 2003 @ 15:45:
offtopic:
[quote]Verwijderd schreef op 25 June 2003 @ 02:27:
[...]

Nee :)[/quote]

Je vergist je wel, voer dit script maar eens uit:
[php]
<?
$nul = 0;
$een = 1;
echo (empty($nul)) ? 'true' : 'false';
echo '<br>';
echo (empty($een)) ? 'true' : 'false';
?>
[/php]
offtopic:
oeps, was in de war met isset :)

Acties:
  • 0 Henk 'm!

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 21:20
Deze oplossing was een paar reacties terug ookal voorbij gekomen, maar het werkt erg goed :) Als nog bedankt voor je reactie :Y)

Acties:
  • 0 Henk 'm!

Verwijderd

GFM schreef op 25 June 2003 @ 21:40:
Ja, ok dat kan inderdaad. Maar dat vind ik persoonlijk geen mooie manier... Bovendien zullen mensen eerder 'schrikken' van een MySQL foutmelding..
Dat is toch geen probleem je kunt de mysql fout heel simpel af vangen en dan je eigen melding geven.

Dan hoef je dus ook niet zo heel moeilijk te doen scheelt je een hoop code en ook snelheid.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Verwijderd schreef op 26 June 2003 @ 16:50:
[...]


offtopic:
oeps, was in de war met isset :)
offtopic:
Dan klopt het nog wat hij zegt, want mysql_num_rows() geeft altijd iets terug, en hij controleerd of het leeg is, dat is sowieso niet zo. (er word niet op true/false gecontroleerd zeg maar, maar op wel/geen waarde, en er is altijd een waarde)

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:22
Roa schreef op 28 June 2003 @ 23:14:
Dan klopt het nog wat hij zegt, want mysql_num_rows() geeft altijd iets terug, en hij controleerd of het leeg is, dat is sowieso niet zo. (er word niet op true/false gecontroleerd zeg maar, maar op wel/geen waarde, en er is altijd een waarde)
Uit de PHP handleiding:
empty() returns FALSE if var has a non-empty or non-zero value. In otherwords, "", 0, "0", NULL, FALSE, array(), var $var;, and objects with empty properties, are all considered empty.
Het gebruik van empty() was dus zeker wel correct (dat deel van de code werkte tenslotte ook), al was een vergelijking met 0 hier waarschijnlijk meer op z'n plaats (aangezien dat de enige 'empty' waarde is die in dit geval op zou kunnen treden).

Overigens zie ik dat er mooi een lompe fout in de handleiding staat:
TRUE is returned if var is not empty.
Dat lijkt me niet; ik neem aan dat die 'not' daar niet tussen hoort!

[ Voor 15% gewijzigd door Soultaker op 28-06-2003 23:28 ]

Pagina: 1