Avatar billede Oliv3673 Juniormester
17. december 2018 - 10:48 Der er 6 kommentarer og
1 løsning

Opretter et array i array som laver en fejl og gør data ikke bliver sendt til databasen

Hej, jeg sidder og bøvler med denne besked:
"Array ( [phone_number] => 42781530 [email] => Oeh@ee-aps.dk [branche_id] => Array ( [0] => 2 ) [antal_ansatte] => 2 [password] => oliver )"
hvor den ved [branche_id]starter et nyt array. Her har jeg reelt valgt branche_id: 2. Koderne er nedenfor:


        <div class="row">
        <div class="col-sm form">
            <div class="dropdown">
                <label class="control-label">Angiv virksomheden branche(r)</label>
              <select name="branche_id[]" multiple class="custom-select">
                <option name="branche_id[]" class="form-control" selected value="">(Ved valg af flere hold "CTRL" på tasteturet inde imens)</option>
                  <?php
                  $query2 = "SELECT * FROM branche ORDER BY branche ASC";
                  $result2 = mysqli_query($con, $query2);
                  if (!$result2) die(mysqli_error($con));
                  else  {
                      $rows = mysqli_num_rows($result2);
                      if ($rows > 0) {
                          while($row = mysqli_fetch_assoc($result2)) {
                            $branche_id = $row['branche_id'];
                              $branche = $row['branche'];
                          ?>
                  <option value="<?php echo $branche_id;?>" name="branche_id[]"><?php echo $branche; ?></option>
                             
                             
                            <?php
                          }
                      }
                  }
                  ?>
<?php
if (isset($_POST['cvr_nr']) && isset($_POST['virk_name']) && isset($_POST['address']) && isset($_POST['post_code']) && isset($_POST['phone_number']) && isset($_POST['branche_id']) && isset($_POST['antal_ansatte']) && isset($_POST['email']) && isset($_POST['password'])) {
    $cvr_nr = $_POST['cvr_nr'];
    $virk_name = $_POST['virk_name'];
    $address = $_POST['address'];
    $post_code = $_POST['post_code'];
    $phone_number = $_POST['phone_number'];
    $branche_id = $_POST['branche_id'];
    $antal_ansatte = $_POST['antal_ansatte'];
    $email = $_POST['email'];
    $password = $_POST['password'];

   
    $token = password_hash($password, PASSWORD_DEFAULT);
   
    $query = "INSERT INTO virksomhed (cvr_nr, virk_name, address, post_code, phone_number, antal_ansatte, email, password) VALUES('$cvr_nr', '$virk_name', '$address', '$post_code', '$phone_number', '$antal_ansatte', '$email', '$token')";
    $result = mysqli_query($con, $query);
    if (!$result) die(mysqli_error($con));
    elseif ($result == true) {   
        $virk_navn_id = mysqli_insert_id($con);
        foreach ($branche_id as $bid) {
        $query2 = "INSERT INTO virksomhed_brancher (virk_navn_id, branche_id) VALUES ('$virk_navn_id', '$bid')";
            $result2 = mysqli_query($con, $query2);
            if (!$result2) die (mysqli_error($con));
            if ($result == true) {
        $_SESSION['virk_navn_id'] = $virk_navn_id;
        if  (isset($_POST['remember'])) {
            setcookie('user1', $virk_navn_id, time() + (600), "/"); // 600 = 10 minuttes
        }
    }
   
    header("location: opret_bank.php");
    die();
}
    }
}
?>
Avatar billede Slater Ekspert
17. december 2018 - 11:03 #1
Det gør du med vilje, når du giver din select et navn med brackets efter, altså "branche_id[]"

Det betyder at det skal være et array. Hvis du ikke vil have et array af værdier (og det giver ingen mening alligevel, da en select kun kan have én værdi valgt), skal du bare fjerne de brackets efter.

Desuden giver det ingen mening at give dine <options> navne. De skal kun have værdier.
Avatar billede Slater Ekspert
17. december 2018 - 11:06 #2
Oh wait, jeg så lige den var sat til multiple - så må du undskylde, så giver det fin mening med flere mulige. Men så er det jo netop meningen at værdierne skal være en array, og du kører den også gennem en for-loop.

Så forstår jeg ikke lige problemet helt.
Avatar billede Oliv3673 Juniormester
17. december 2018 - 11:11 #3
Hmm okay. Men navnene i options sender vel dataene til isset($_POST['branche_id'])
Hvad kan jeg gøre istedet. Det overordnede problem er bare at siden ikke går videre til header("location:opret_bank.php") når man trykker på den nederste submit knap.

Jeg har 2 forms:
<div class="container form" id="containeropretfirma">
    <form class="form-signin" method="post" action="">
        <div class="row">
            <div class="col-sm">
                <label for="textinput">Skriv CVR og data indhentes automatisk</label>
                <input type="number" class="form-control"  placeholder="CVR" name="vat"  required>

                <label for="textinput" hidden>land</label>
                <input type="text" class="form-control"  placeholder="lande code (2 bogstaver)" name="country" value="dk" hidden>

                <input type="submit" class="form-control btn" value ="send data" name="send">
            </div>
        </div>
    </form>
</div>
----

  <div class="container form" id="containeropretfirma">
<form class="form-signin" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
                    <div class="row">
                        <div class="col-sm">
                <label for="textinput" disabled> CVR </label>
                <input type="number" class="form-control"  placeholder="CVR" name="cvr_nr" value="<?php echo $cvr;?>" disabled>
                        </div>
   
                    <div class="col-sm">
                        <label for="textinput">Firmanavn</label>
                        <input type="text" class="form-control"  placeholder="Firmanavn" name="virk_name" value="<?php echo $navn; ?>"disabled> </div>
    </div>
                <br>
                    <div class="row">
                    <div class="col-sm">
                        <label class="control-label" for="textinput">Adresse</label>
                        <input type="text" class="form-control input-md"  placeholder="Adresse"  name="address" value="<?php echo $adresse;?>" disabled> </div>
                   
                    <div class="col-sm">
                    <label for="dLabel">Område</label>
                    <div class="dropdown">
                    <select name="post_code" class="custom-select" disabled>
                    <option selected value="" placeholder="Område" ><?php echo $zip." - ".$by; ?></option>
                  <?php
                  $query = "SELECT * FROM post_codes ORDER BY post_code ASC";
                  $result = mysqli_query($con, $query);
                  if (!$result) die(mysqli_error($con));
                  else  {
                      $rows = mysqli_num_rows($result);
                      if ($rows > 0) {
                          while($row = mysqli_fetch_assoc($result)) {
                            $post_code = $row['post_code']; 
                            $city = $row['city'];
                            $post_city = $post_code . " " . $city;
                    ?>
                 
                  <option value="<?php echo $zip; ?>" name="post_code[]"><?php echo $zip." - ".$by; ?></option>
                             
                            <?php
                          }
                      }
                  }
                  ?>
                </select>
            </div>
        </div>
    </div>
                  <br>
                    <div class="row">
                    <div class="col-sm">
                        <label class="control-label" for="textinput">Telefonnummer</label>
                        <input type="number" class="form-control" placeholder="+45 1234 5678" name="phone_number" value="<?php echo $tlf;?>" required> </div>
                        <div class="invalid-feedback"> Indtast venligst et gyldigt telefonnummer. </div>
                       
                        <div class="col-sm">
                            <label for="textinput">Email</label>
                            <div class="input-group">
                                <input type="email" class="form-control" placeholder="Email" name="email" value="<?php echo $email; ?>" required> </div>
                        </div>
            </div>
            <br>
            <div class="row">
        <div class="col-sm form">
            <div class="dropdown">
                <label class="control-label">Angiv virksomheden branche(r)</label>
              <select name="branche_id[]" multiple class="custom-select">
                <option name="branche_id[]" class="form-control" selected value="">(Ved valg af flere hold "CTRL" på tasteturet inde imens)</option>
                  <?php
                  $query2 = "SELECT * FROM branche ORDER BY branche ASC";
                  $result2 = mysqli_query($con, $query2);
                  if (!$result2) die(mysqli_error($con));
                  else  {
                      $rows = mysqli_num_rows($result2);
                      if ($rows > 0) {
                          while($row = mysqli_fetch_assoc($result2)) {
                            $branche_id = $row['branche_id'];
                              $branche = $row['branche'];
                          ?>
                  <option value="<?php echo $branche_id;?>" name="branche_id[]"><?php echo $branche; ?></option>
                             
                             
                            <?php
                          }
                      }
                  }
                  ?>
                </select>
                    </div>
                    </div>
                <div class="col-sm">
                        <label class="control-label" for="textinput">Antal ansatte</label>
                        <input type="number" class="form-control" placeholder="Antal ansatte" name="antal_ansatte" required>
                    </div>
                </div>
                <br>                           
                    <div class="row">

                        </div>
                        <div class="invalid-feedback"> Indtast venligst en gyldig emailadresse </div>
                        <div class="col-sm">
                            <label for="textinput">Angiv kodeord</label>
                            <div class="input-group">
                                <input type="password" class="form-control" placeholder="Indtast et kodeord" aria-describedby="inputGroupPrepend" name="password" required>
                            </div>
                        </div>
            <br>
                        <div class="col-sm">
                            <label for="textinput">Gentag Kodeord</label>
                            <div class="input-group">
                                <input type="password" class="form-control" placeholder="Gentag kodeordet" name="password" required>
                            </div>
                        </div>

                <br><br>
                <div class="form-group" id="submitfirma">
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
                        <label class="form-check-label" for="invalidCheck"> Accepter <a href="handelsbetingelser.php">Vilkår og betingelser</a> </label>
                        <div href="handelsbetingelser.php" class="invalid-feedback"> Du skal accepterer vilkår og betingelser </div>
                    </div>
                <button class="btn btn-primary" type="submit">Næste</button>
                </div>
                    <br><br> 
            </form>
</div>
Avatar billede Oliv3673 Juniormester
17. december 2018 - 11:13 #4
Til øverste form er der indsat:
if (isset($_POST['send'])) {
    $vat = $_POST['vat'];
    $country = $_POST['country'];
   
    $data = (cvrapi($vat, $country));
    if (array_key_exists ( "error", $data)){
    if($data['error'] == "NOT_FOUND"){
        $navn = "";
        $adresse = "";
        $zip= "";
        $by = "";
        $tlf = "";
        $email = "";
        $cvr = "";
        echo "<script>alert('Angiv gyldigt CVR-nummer!');</script>";
    }}
    $navn = (isset($data['name']))? $data['name'] : "";
    $adresse = (isset($data['address']))? $data['address'] : "";
    $zip = (isset($data['zipcode']))? $data['zipcode'] : "";
    $by = (isset($data['city']))? $data['city'] : "";
    $tlf = (isset($data['phone']))? $data['phone'] : "";
    $email = (isset($data['email']))? $data['email'] : "";
    $cvr = (isset($data['vat']))? $data['vat'] : ""; 
}
else {
$navn = "Firmanavn";
$adresse = "Adresse";
$zip = "";
$by = "";
$tlf= "+45 12 34 55 78";
$email = "email";
Avatar billede olsensweb.dk Ekspert
17. december 2018 - 16:24 #5
>> <div class="container form" id="containeropretfirma">
id'er skal være unique på siden

>okay. Men navnene i options sender vel dataene til isset($_POST['branche_id'])
prøv at udskrive din post, og slå error_reporting og display error til

sæt dette ind i toppen af din fil
ini_set("display_startup_errors", "on");
ini_set("display_errors", "on");
ini_set("html_errors", "false");
error_reporting(-1); // -1 viser alle slags fejl beskeder
ini_set("ignore_repeated_errors", 0);
if(isset($_POST)) print_r($_POST);


noget andet du også kunne have gavn af er at bruge dit udviklings  værktøj i din browser (F12), evt med nogle add ons


ref #3
<?php
$query = "SELECT * FROM post_codes ORDER BY post_code ASC";
$result = mysqli_query($con, $query);
if (!$result) die(mysqli_error($con));
else  {
  $rows = mysqli_num_rows($result);
  if ($rows > 0) {
      while($row = mysqli_fetch_assoc($result)) {
        $post_code = $row['post_code']; 
        $city = $row['city'];
        $post_city = $post_code . " " . $city;
?>

<option value="<?php echo $zip; ?>" name="post_code[]"><?php echo $zip." - ".$by; ?></option>
         
        <?php
      }
  }
}
?>
</select>

for du skrevet noget i din option inde i din while ??
Avatar billede olsensweb.dk Ekspert
18. december 2018 - 14:22 #6
#0               
har du prøvet at udskrive dine sql statement ??
står der det du forvendter i dem ??


uden fejl beskeder er det svært at fejl finde i coden, så den er pillet fra hinnanden
jeg har fjernet alt html og en masse test af variable i php, og taget udgangs punkt i det array du visser

<?php
require_once("debugheader.php"); // slåe error_reporting og display error til
require_once("connection.php"); // $con

$info = Array("phone_number" => 42781530, "email" => "Oeh@ee-aps.dk", "branche_id" => Array("0" => 2, "1" => 6), "antal_ansatte" => 2, "password" => "oliver");
// print_r($info);
// test
$cvr_nr = 1111111;
$virk_name = "xxx";
$address = "ukendt";
$post_code = 2700;
$phone_number = $info['phone_number'];
$branche_id = $info['branche_id'];
$antal_ansatte = $info['antal_ansatte'];
$email = $info['email'];
$password = $info['password'];
$token = password_hash($password, PASSWORD_DEFAULT);


$query = "INSERT INTO virksomhed (cvr_nr, virk_name, address, post_code, phone_number, antal_ansatte, email, password) VALUES('$cvr_nr', '$virk_name', '$address', '$post_code', '$phone_number', '$antal_ansatte', '$email', '$token')";
$result = mysqli_query($con, $query);
if (!$result) {
    die(mysqli_error($con));
} elseif ($result == true) {
    $virk_navn_id = mysqli_insert_id($con);
    foreach ($branche_id as $bid) {
        $query2 = "INSERT INTO virksomhed_brancher (virk_navn_id, branche_id) VALUES ('$virk_navn_id', '$bid')";
        $result2 = mysqli_query($con, $query2);
        if (!$result2)
            die(mysqli_error($con));
        if ($result == true) {
            $_SESSION['virk_navn_id'] = $virk_navn_id;
            if (isset($_POST['remember'])) {
                setcookie('user1', $virk_navn_id, time() + (600), "/"); // 600 = 10 minuttes
            }
        }
    }
    header("location: opret_bank.php");
    die();
}
?>
Avatar billede olsensweb.dk Ekspert
18. december 2018 - 17:24 #7
vær opmærksom på at disabled gør at elementet ikke sendes og det er readonly, brug readonly istedet

erstat
<div class="col-sm">
    <label for="textinput" disabled> CVR </label>
    <input type="number" class="form-control"  placeholder="CVR" name="cvr_nr" value="<?php echo $cvr; ?>" disabled>
</div>


med
<div class="col-sm">
    <label for="textinput" disabled> CVR </label>
    <input type="number" class="form-control"  placeholder="CVR" name="cvr_nr" value="<?php echo $cvr; ?>" readonly = "readonly">
</div>

og sæt en class på der styler baggrunden på dit input, så man kan se at man ikke kan skrive i den
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester