Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 5

8
votes
answers
92 views
+10

React+Laravel 5.8.33 +Axios: errors when registering user with an axios.post request; clarififying the code problem

Update

Checking my network tab in my dev-tools of firefox gives me this:

Response headers (290 B)    
Raw headers
Access-Control-Allow-Origin 
*
Allow   
POST
Cache-Control   
no-cache, private
Connection  
close
Content-Type    
text/html; charset=UTF-8
Date    
Sat, 31 Aug 2019 09:45:04 GMT
Date    
Sat, 31 Aug 2019 09:45:04 GMT
Host    
localhost:8000
X-Powered-By    
PHP/7.2.19-0ubuntu0.18.04.2
Request headers (438 B) 
Raw headers
* Accept: */* *
Accept-Encoding 
gzip, deflate
Accept-Language 
en-US,en;q=0.5
Access-Control-Request-Headers  
x-csrf-token,x-requested-with,x-xsrf-token
Access-Control-Request-Method   
POST
Connection  
keep-alive
Host    
localhost:8000
Origin  
http://127.0.0.1:8000
Referer 
http://127.0.0.1:8000/register
User-Agent  
Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/68.0

Why is the method GET? Trying to change it from the tools, it gives that POST method isn't allowed. Also, when submitting the request, it gives the following info:

Update

I started making changes to bootstrap.js file, where my axios is required, but I had no success. I tried changing

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

to

window.axios = require('axios');

window.axios.defaults.headers.common = {
    'X-Requested-With': 'XMLHttpRequest',
    'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
};

but really, I can't get to a point. I cannot understand how the linked tutorial in my comments worked and I am starting to have a shortage of ideas on what to look. So, any help is appreciated; if someone can point to a valid reference that says, look, this is an unsolved problem, then I will implement py project with a different code; but if not, I this problem shouldn't remain unsolved. If it's a minor mistake from my part, then where exactly is it? Thanks to all.

Note: On my original posts, I didn't showed what my web routes look like. Since I am using React from inside Laravel(I used in terminal php artisan preset react ;) my web routes went from the pre-configured laravel code

Route::get('/', function () {
    return view('welcome');
});

to the new code that calls the React app:

Route::view('/{path?}', 'app');

Update3: I have tried(from yesterday) to change my apache2 conf and my problem remains. I don't know if this is to be taken as change though:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8000/api/user/register. (Reason: missing token ‘x-requested-with’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel).

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8000/api/user/register. (Reason: CORS request did not succeed).

Source map error: request failed with status 404
Resource URL: http://127.0.0.1:8002/js/app.js
Source Map URL: popper.js.map

Update2: I tried changing my axios post request:

const dataofuser={
    name:data.name,
    email:data.email,
    password:data.password
}


 const instance = axios.create({
     method:'post',
     baseURL: 'http://localhost:8000/api/user/',
     timeout: 1000,
     headers: {'Access-Control-Allow-Origin': '*' , 'Access-Control-Allow-Methods ':  'POST, GET, OPTIONS, PUT, DELETE','Access-Control-Allow-Headers':  'Content-Type, X-Auth-Token, Origin, Authorization','X-Requested-With': 'XMLHttpRequest' }
 });

instance          .post("register/create",dataofuser)
           .then(response => {
            console.log(response);
            return response;
          })
           .then(json => {
            if (json.data.success) {
              alert(`Registration Successful!`);
              history.push('/')

... But, then I get

invalid header name


Original As I have mentioned before in another post, I am currently self study React and Laravel. I am trying to build a basic registration app with React as front-end and Laravel as back-end. This post is about errors coming when I fill out the registration form and try to submit it; the user doesn't gets registered and I get several errors depending on what I am trying.

If I try:

axios
          .post("http://localhost:8000/api/user/register", {
              name: data.name,
              email: data.email,
              password: data.password
          })

I get in console :

> Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8000/api/user/register. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

>Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8000/api/user/register. (Reason: CORS request did not succeed).

>Source map error: request failed with status 404
Resource URL: http://127.0.0.1:8000/js/app.js
Source Map URL: popper.js.map

>[object Object] Error: Network Error 

If I try

axios
  .post("/user/register", {
      name: data.name,
      email: data.email,
      password: data.password
  })

then I get(I believe this an error regarding bad route definition ):

Source map error: request failed with status 404
Resource URL: http://127.0.0.1:8000/js/app.js
Source Map URL: popper.js.map

If I use

axios
  .post("/api/user/register", {
      name: data.name,
      email: data.email,
      password: data.password
  })

I get:

Source map error: request failed with status 404
Resource URL: http://127.0.0.1:8000/js/app.js
Source Map URL: popper.js.map

[object Object] Error: Request failed with status code 500

I am not sure anymore(I cannot clarify) if I have a CORS problem (although I have taken actions that should prevent such issues) or some other, routing or data-passing or just syntactic issue. I would go for the CORS problem(altough I have no idea what that popper.js.map notification is all about). I am posting the code below.


Update1:

I just ran my code in Chrome browser with the

 axios
          .post("http://localhost:8000/api/user/register", {
              name: data.name,
              email: data.email,
              password: data.password
          })

and I got the

Access to XMLHttpRequest at 'http://localhost:8000/api/user/register' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
app.js:70270 [object Object] Error: Network Error
app.js:371 POST http://localhost:8000/api/user/register net::ERR_FAILED

It seems I have a CORS problem... and I cant understand from yesterday and all day today how to handle it.


Some code:

My App(parent) component contains a function that gets passed to a Register(child) component; this function handles the registration process

        import React, {Component} from 'react'
        import ReactDOM from 'react-dom'
        import {BrowserRouter, Route, Switch } from 'react-router-dom'
        // import {Link} from 'react-router-dom'
        import Header from './Header'
        import Intro from './Intro'
        import Register from './Register'
        import Login from './Login'
        import Userpage from './Userpage'
        import Footer from './Footer'
        import Science from './Science'
        import Literature from './Literature'
        // import {AppState} from 'react-native'


        class App extends Component {

            constructor(props){
                super(props);
                this.state={
                    isLoggedIn:false,
                    user:{},
                    data_user:'',
                    data_username:''
                }

                this.username_Callback=this.username_Callback.bind(this)
                this._registerUser=this._registerUser.bind(this)



            }

            componentDidMount() {
                let state = localStorage["appState"];
                if (state) {
                  let AppState = JSON.parse(state);
                  console.log(AppState);
                  this.setState({ isLoggedIn: AppState.isLoggedIn, user: AppState });
                }
          }

            _registerUser(data){

                $("#email-login-btn")
                  .attr("disabled", "disabled")
                  .html(
                    '<i class="fa fa-spinner fa-spin fa-1x fa-fw"></i><span class="sr-only">Loading...</span>'
                  );



                // var formData = new FormData(); 
                // formData.append('data.name');
                // formData.append('data.email');
                // formData.append('data.password');

                console.log(data)
                console.log(data.name)
                console.log(data.email)
                console.log(data.password)
                // console.log(formData)



                axios
                  .post("http://localhost:8000/api/user/register", {
                      name: data.name,
                      email: data.email,
                      password: data.password
                  })
                  .then(response => {
                    console.log(response);
                    return response;
                  })
                  .then(json => {
                    if (json.data.success) {
                      alert(`Registration Successful!`);
                      history.push('/')


                      let userData = {
                        name: json.data.data.name,
                        id: json.data.data.id,
                        email: json.data.data.email,
                        auth_token: json.data.data.auth_token,
                        timestamp: new Date().toString()
                      };
                      let appState = {
                        isLoggedIn: true,
                        user: userData
                      };
                      // save app state with user date in local storage
                      localStorage["appState"] = JSON.stringify(appState);
                      this.setState({
                        isLoggedIn: appState.isLoggedIn,
                        user: appState.user
                      });
                    } else {
                      alert(`Registration Failed!`);
                      $("#email-login-btn")
                        .removeAttr("disabled")
                        .html("Register");
                    }
                  })
                  .catch(error => {
                    alert("An Error Occured!" + error);
                    console.log(`${data} ${error}`);
                    $("#email-login-btn")
                      .removeAttr("disabled")
                      .html("Register");
                  });

          };



render(){
                return(


                    <BrowserRouter>

                        <Header listNameFromParent={this.state.data_username} />

                        <Footer />

                        <Switch>
                            <Route exact path='/' component={Intro} />
                            <Route path='/register' render={props=><Register {...props} registerUser={this._registerUser}/>}/>

                            <Route path='/login' render={props=><Login {...props} loginUser={this._loginUser}/>}/>
                            <Route path='/userpage' component={Userpage}/>
                            <Route path='/science' component={Science}/>
                            <Route path='/literature' component={Literature}/>

                        </Switch>


                    </BrowserRouter>




                    )
            }
        }

        ReactDOM.render(<App />, document.getElementById('app'))

My Register component just contains the form and returns the input data. Using a console.log command, I am verifying that the data are indeed available in my App and inside my register function. If asked, I can post the code.

At my back-end I have:

api.php

<?php

        use IlluminateHttpRequest;

        // header('Access-Control-Allow-Origin: *');
        // //Access-Control-Allow-Origin: *
        // header('Access-Control-Allow-Methods:  POST, GET, OPTIONS, PUT, DELETE');
        // header('Access-Control-Allow-Headers:  Content-Type, X-Auth-Token, Origin, Authorization');
        /*
        |--------------------------------------------------------------------------
        | API Routes
        |--------------------------------------------------------------------------
        |
        | Here is where you can register API routes for your application. These
        | routes are loaded by the RouteServiceProvider within a group which
        | is assigned the "api" middleware group. Enjoy building your API!
        |
        */

        Route::middleware('auth:api')->get('/user', function (Request $request) {
            return $request->user();
        });


        Route::group(['middleware' => ['jwt.auth','api-header']], function () {

            // all routes to protected resources are registered here  
            Route::get('users/list', function(){
                $users = AppUser::all();

                $response = ['success'=>true, 'data'=>$users];
                return response()->json($response, 201);
            });
        });
        Route::group(['middleware' => 'api-header'], function () {

            // The registration and login requests doesn't come with tokens 
            // as users at that point have not been authenticated yet
            // Therefore the jwtMiddleware will be exclusive of them
            Route::post('/user/login', 'UserController@login');
            Route::post('/user/register', 'UserController@register');
        });

API.php(middleware)

<?php

        namespace AppHttpMiddleware;

        use Closure;

        class API
        {
            /**
             * Handle an incoming request.
             *
             * @param  IlluminateHttpRequest  $request
             * @param  Closure  $next
             * @return mixed
             */
            public function handle($request, Closure $next)
            {
                $response = $next($request);
                $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Content-Range, Content-Disposition, Content-Description, X-Auth-Token');
                $response->header('Access-Control-Allow-Origin','*');
                $response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
                $response->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With');
                $response->header('Access-Control-Allow-Credentials',' true');
                //add more headers here
                return $response;
            }
        }

UserController

<?php

    namespace AppHttpControllers;

    use IlluminateHttpRequest;
    use AppUser;
    use JWTAuth;
    use JWTAuthException;


    class UserController extends Controller
    {
        private function getToken($email, $password)
        {
            $token = null;
            //$credentials = $request->only('email', 'password');
            try {
                if (!$token = JWTAuth::attempt( ['email'=>$email, 'password'=>$password])) {
                    return response()->json([
                        'response' => 'error',
                        'message' => 'Password or email is invalid',
                        'token'=>$token
                    ]);
                }
            } catch (JWTAuthException $e) {
                return response()->json([
                    'response' => 'error',
                    'message' => 'Token creation failed',
                ]);
            }
            return $token;
        }
public function register(Request $request)
        { 


            $validator = Validator::make($request->all(), [
                'name' => 'required|max:255',
                'email' => 'required',
                'password' => 'required'
            ]);
            if ($validator->fails()) {
                return response()->json(['errors'=>$validator->errors()],422);
            }





            $payload = [
                'password'=>Hash::make($request->password),
                'email'=>$request->email,
                'name'=>$request->name,
                'auth_token'=> ''
            ];




            $user = new AppUser($payload);
            if ($user->save())
            {

                $token = self::getToken($request->email, $request->password); // generate user token

                if (!is_string($token))  return response()->json(['success'=>false,'data'=>'Token generation failed'], 201);

                $user = AppUser::where('email', $request->email)->get()->first();

                $user->auth_token = $token; // update user token

                $user->save();

                $response = ['success'=>true, 'data'=>['name'=>$user->name,'id'=>$user->id,'email'=>$request->email,'auth_token'=>$token]];        
            }
            else
                $response = ['success'=>false, 'data'=>'Couldnt register user'];


            return response()->json($response, 201);
        }
    }

So again, I cannot clarify what the issue is exactly and the registration procedure doesn't work.

沙发
+50

如果您正在使用rest API,那么您需要处理CORS。

CORS基本上是一个浏览器安全功能,而不是服务器端。

默认情况下,浏览器不允许某些跨域请求。您正在与之交谈的服务器可以发布使用跨源请求是否安全,但是客户端了解并使用该信息,因此提供的保护不是服务器。

浏览器通过OPTIONS方法自动在原始HTTP请求之前发送HTTP请求,以检查发送原始请求是否安全。

只需在服务器端启用CORS即可尝试 laravel-cors 或<

谢谢你的回答。在laravel标题中你是什么意思?正如帖子一样,我已将它们添加到我的中间件中。你的意思是别的什么?谢谢。 - 康斯坦丁布莱克8月31日8:19

我认为这应该是有效的。因为我主要使用前端技术并连接在php,node,ASP.NET core 2中创建的API。因此,我们需要仅从后端启用CORS。您是否能够从邮递员或任何其他工具测试API调用? - Clue Mediator 8月31日13:53

是。我今天打算尝试一下。当laravel为应用程序提供服务时,我是否有机会从php artisan服务的方式获得此问题?或者从我如何从laravel里面调用我的反应前端(我已经使用了php artisan预设反应 - 如果你对此有所了解的话)。谢谢。 - 君士坦丁黑8月31日15:24

我会说首先用postman检查你的简单GET API。如果它的工作,那么尝试在反应中集成相同的API。如果您在响应中收到CORS错误,那么仅在服务器端进行更改(因为只有服务器端更改可以解决您的问题),为此您必须通过在API中间件中添加三行来启用CORS。 - Clue Mediator 8月31日17:19

CORS基本上是一个浏览器安全功能,而不是服务器端。默认情况下,浏览器不允许某些跨源请求。您正在与之交谈的服务器可以发布使用跨源请求是否安全,但是客户端了解并使用该信息,因此提供的保护不是服务器。浏览器通过OPTIONS方法自动在原始HTTP请求之前发送HTTP请求,以检查发送原始请求是否安全。 - Clue Mediator 2天前

板凳
+30

预检请求是客户端向服务器发出的 HTTP-OPTIONS 请求,以验证它是否支持CORS协议。

https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request < p>要做的就是在服务器中注册一个路由,该路由返回带有必要访问控制策略头的响应。例如:

  Route :: options('/ {path}',function(){return response('',200) - &gt;标题('Access-Control-Allow-Headers','Origin,Content-Type,Content-Range,Content-Disposition,内容描述,X-Auth-Token,X-Requested-With') - &gt;标题('Access-Control-Allow-Methods','POST,GET,PUT,OPTIONS,DELETE') - &gt;标题(' Access-Control-Allow-Origin','*') - &gt; header('Access-Control-Allow-Credentials','true'); }) - &gt; where('path','。*');   

这与您的问题中的中间件方法类似,只是中间件附加到路由,但没有为这些路由提供 options 请求的回退。 header('Access-Control-Allow-Credentials','true'); }) - &gt; where('path','。*');

这与您的问题中的中间件方法类似,只是中间件附加到路由,但没有为这些路由提供 options 请求的回退。 header('Access-Control-Allow-Credentials','true'); }) - &gt; where('path','。*');

这与您的问题中的中间件方法类似,只是中间件附加到路由,但没有为这些路由提供 options 请求的回退。

谢谢你的回答。你的意思是我应该用它代替我的api.php文件中的其他路径或者用它们? - 君士坦丁黑8月30日17:23

两种方式,它似乎都不起作用。 - 君士坦丁黑8月30日17:26

在预检响应中返回的Access-Control-Allow-Headers必须包含请求中使用的所有标头。您的问题中的错误消息显示缺少X-Requested-With标头。 - Oluwafemi Sule 8月30日19:10

我同意。但应该在哪里进行更正?在中间件,apache2服务器,api或web路由,在内核的某个地方,在axios,在laravel的csrf标记的调用?谢谢。 - 君士坦丁黑8月31日8:22

这应该在Laravel中考虑你的问题中的Update 3。 - Oluwafemi Sule 8月31日9:11

地板
0

我将在这里发布我如何弄清楚我的Laravel-React-Axios简单注册应用程序发生了什么。从上述试图解决问题的帖子中,只有ClueMediator的一些评论对如何理解幕后问题以及Quentin在我的帖子中提供的一些信息性有用的评论有所帮助。我必须在这里注意,据我所知,关于axios和laravel以及.js前端的所有其他帖子和github讨论根本没有关注这个(或者如果他们这样做,他们没有放任何认真的关注)。

首先,我可以在我的第一篇文章中看到将post请求从localhost:8000更改为api / route的名称似乎具有效果删除一些人; 因为我一次在一个或两个服务器上运行项目,作为工匠为应用程序提供服务的地方,cors可能会回来。

其次,即使是减少了角色的情况,也会出现内部500错误; 这是由于我正在学习的教程中的错误,并且与迁移的不完整构造有关。

重点。似乎axios总是试图发送,连同我在我的代码中的请求(在这个例子中是一个post请求)一个选项请求。我做的是检查问题是在工匠正在服务时更改我的主机和端口,并将我的代码放在一起以正确匹配路由。然后,检查控制台上的网络选项卡,我看到虽然post请求发送正常,但我仍然有cors因为axios.options请求默认发送到localhost:8000,但< / em>我没有从那里提供我的应用程序。指定工匠从那里服务,并纠正迁移建设,解决了这个问题。

在这里强调一些东西很重要:artisan在localhost:8000第一次打开他/但打开第二台服务器时服务,它会像通常那样继续下一个可用的端口。如果没有迁移代码中的错误,我可能会发现问题来自工匠和服务的地方。但是,'导致与我的数据库关系失灵的原因,即便如此,我得到500错误,因为内部服务器错误,让我打开另一台服务器,然后发现axios总是只向localhost:8000发送选项请求,甚至如果我的前端和后端彼此达成一致,对代码进行了很多更改产生了不一致。因此,总而言之,在处理坏代码(我应该比我更快看到的东西)之后,只需要正确设置axios和artisan达成一致。

关于上述内容的任何观察逻辑可以改善将是伟大的。

感谢所有人。

我还要注意,我不知道这是否是一个更普遍的社区维基,可以收集与laravel-js-axios相关的许多问题。 - Constantine Black 2天前

4楼
0

您是否尝试使用 csrf 标记作为post参数?如果不是你可以做的是,在 axios 请求的post参数中设置 csrf token token 它将解决您的问题。

这个问题已经解决了。ClueMediator的评论有助于更好地理解,我也发布了问题所在的位置。当然这不是csrf问题。不管怎么说,还是要谢谢你。 - 昨天康斯坦丁·布莱克

30
votes
answers
32 views
+10

有什么区别?int $ number和int $ number = null?

鉴于此解释

Nullable类型:现在可以通过在类型名称前加上问号前缀来将参数和返回值的类型声明标记为可为空。这表示除了指定的类型外,NULL还可以作为参数传递,或者分别作为值返回。

https://www.php.net/manual/en/migration71.new-features.php < p>以下代码:

  public function test(?int $ var){}   

意味着可以使用 $ var 调用 test() 或者作为 int 或作为 null

以下代码:

  public function test(int $ var = null){}   

表示可以使用 $ var test() >既可以作为 int ,也可以作为 null

这两种方法有什么区别?这些中的任何一个都比其他更高效吗? / pre>

表示可以使用 $ var 调用 test()作为 int null 以及。

这两种方法有什么区别?这些中的任何一个都比其他更高效吗? / pre>

表示可以使用 $ var 调用 test()作为 int null 以及。

这两种方法有什么区别?这些中的任何一个都比其他更高效吗?

up vote 21 down vote accepted favorite
沙发
+210
+50
function test(?int $ var){var_dump($ var); function test2(int $ var = null){var_dump($ var); } test(1); // fine test(); //错误test2(1); // fine test2(); //很好

就性能而言,差异可能是微不足道的,没有足够的重要性可以引起关注。

实例< / strong>

Repl

+90

如果语言是今天设计的,那么 int $ var = null 可能是一个错误,应该写成?int $ var = null 这两部分意味着不同的东西:

  • 表示 null 是该参数的有效值。
  • = null 表示如果未传递参数, null 是默认值。

    但是,在之前?引入了类型语法,语言中有一个特例:if null 作为参数的默认值,那么传递 null 是合法的到那个参数,

0

区别在于如何调用函数:

  // public function test(?int $ var)$ foo-&gt; test(“x”); //不起作用(传递给Foo :: test()的参数1必须是int或null类型,给定字符串)$ foo-&gt; test(123); //作品$ foo-&gt; test(null); //作品$ foo-&gt; test(); //不起作用(函数Foo :: test()参数太少,0传递)//公共函数测试(int $ var = null)$ foo-&gt; test(“x”); //不起作用(传递给Foo :: test()的参数1必须是int或null类型,给定字符串)$ foo-&gt; test(123); //作品$ foo-&gt; test(null); //作品$ foo-&gt; test(); //作品  

区别在于你无法将函数称为 - &gt; test()

0
votes
answers
98 views
+10

端口9999服務器不接受請求

0

我想在亞馬遜EC2實例上部署我的套接字[phpws庫]。爲此,我部署了代碼並運行套接字。我選擇了端口9999進行套接字握手,但它不起作用。 我試圖捕獲請求該服務器上通過命令:端口9999服務器不接受請求

sudo tcpdump -i any port 9999 

然後我打這個端口,我沒有收到任何請求。我認爲這是因爲iptables。所以我通過命令檢查它:

sudo iptables -L 

但它清楚地顯示允許所有請求。這裏是輸出:

鏈INPUT(策略ACCEPT) 目標PROT選擇源目的地

鏈FORWARD(策略ACCEPT) 目標PROT選擇源目的地

鏈OUTPUT(策略ACCEPT) 目標保護人選擇來源目的地

在這一點上,我很無能如何前進。任何幫助都是溫和的。尋找答案。

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。 – jww

沙发
0
1

您還必須在附加到EC2實例的AWS安全組中打開端口9999

+0

是的,自從過去幾個小時以來,我一直在與這個愚蠢的錯誤作鬥爭。非常感謝您的幫助。 – Pradeep

0
votes
answers
78 views
+10

PHP - 在Apache中

0
使用mod_rewrite

我有以下網址:PHP - 在Apache中

http://example.com/pages/page.php?company_name=Name

我想實現的是有這樣一個URL:

http://example.com/pages/Name

我已經嘗試了不同的規則但不起作用:

RewriteRule ^pages/([A-Za-z0-9-]+)/?$ /pages/page.php?company_name=$1 [NC] or 

RewriteRule ^pages/([^/]*).php$ /pages/page.php?company_name=$1 [L] 

它不起作用。它給了我一個「未找到」頁面。我該如何正確使用mod_rewrite?

沙发
0
0

嘗試了這一點:

RewriteRule ^pages/([0-9a-zA-Z-_]*)(/|)$ /pages/page.php?company_name=$1 [QSA,L] 

這會關心或不關心,如果該URL的末尾有斜槓:

http://example.com/pages/Name 
http://example.com/pages/Name/ 

,也將包括任何額外AGRS(QSA)如果頁面調用因爲它:

http://example.com/pages/Name/?more=stuff 

這應該工作,如果你的Apache有mod_rewrite和PHP存在你已經顯示。

UPDATE

如果你有一個不同的URL,它需要一個不同的PHP,例如 '藍頁':

http://example.com/bluepages/Name 

那麼這會工作爲:

RewriteRule ^bluepages/([0-9a-zA-Z-_]*)(/|)$ /bluepages/somescript.php?some_var=$1 [QSA,L] 

如果您有多個你想要控制的這個,你可以在你的htaccess中爲每一個創建多個RewriteRules。但是,如果你只是想通配符話,那麼這將做一個盲目的包羅萬象(並導致大量的錯誤報告在Apache日誌):

RewriteRule ^([0-9a-zA-Z]*)/([0-9a-zA-Z-_]*)(/|)$ /$1/page.php?some_var=$2 [QSA,L] 

你要麼必須是具體的,或者只是改變了一切。有很多方法可以配合使用,而且這取決於你的意圖。

+0

我試過上面的選項,但它仍然不起作用,仍然給我「未找到 在這臺服務器上沒有找到請求的URL /bluepages/Name.php我想知道文件夾結構的問題?因爲我有root/pages文件夾,我的.htaccess文件和剩餘的php文件位於這裏。謝謝 –

+0

以上內容適用於你提供的例子,如果你所做的不是你提供的內容,那麼我的答案將不起作用。提及現在的藍圖和根/頁面......所有這些東西都會起作用,應該已經添加到您的原始問題中 – IncredibleHat

+0

感謝您的更新,它現在可以工作了。根據您提供的內容,我會嘗試一些選項/場景並查看它給出的結果。再次感謝! –

0
votes
answers
50 views
+10

將PHP數組轉換爲可用變量

0

嘗試將我的數組值變爲可用變量。我想將這些值輸出爲可讀的內容,以便我可以在SELECT調用中使用它們以獲取我的下一個語句。最終結果我希望能夠做到像echo $ numresults這樣的東西,應該看起來像這樣9,8,6我的代碼如下所示將使用print_r,如下所示。將PHP數組轉換爲可用變量

Array ([0] => 9) Array ([0] => 8) Array ([0] => 6) 

我覺得我很接近但不知道如何將這個數組變成一個可用的變量。

while ($rowa = mysql_fetch_assoc($resulta)) { 
    if ($rowa['Count'] > 0) { 
     $cids[]= $rowa['id']; 
     display_id($rowa['id'], $levela + 1); 
    } elseif ($rowa['Count']==0) { 
     $cids[]= $rowa['id']; 
    } 

} 
print_r($cids); 
+0

讓我知道,如果你需要我的回答 –

+0

幫助使用RTRIM,SUBSTR當兩者都是非常接近但($字符串,0,-1); mb_substr($ string,0,-1);函數刪除最後一個,在輸出它將刪除所有的逗號,並把輸出從9,8,6,到986 –

沙发
0
1
$cids = ""; 

while ($rowa = mysql_fetch_assoc($resulta)) { 
    if ($rowa['Count'] > 0) { 
     $cids = $cids . $rowa['id'] . ","; 
     display_id($rowa['id'], $levela + 1); 
    } elseif ($rowa['Count']==0) { 
     $cids = $rowa['id']; 
    } 
} 

print_r($cids); 
+0

但是,當使用rtrim,substr($ string,0,-1); mb_substr($ string,0,-1);函數刪除最後一個,在輸出時它將刪除所有的逗號,並將輸出從9,8,6到986, –

+0

修正它只是改爲$ cids。「,」。 $ ROWA [ 'ID'];來自$ cids。 $ rowa ['id']。 「」;現在工作很完美 –

0
votes
answers
61 views
+10

PHP檢查字段是否爲空

0

我正在做一個註冊表單,並且我試圖編寫一個代碼,如果用戶沒有填寫所有字段,將顯示錯誤。它工作正常,但由於某種原因,它只適用於我輸入電子郵件。如果我將所有字段留空並單擊註冊,我不會收到任何錯誤,並且所有字段爲空,當我單擊註冊按鈕時,我的光標會轉到電子郵件字段並被激活(此字段)。 這封郵件有問題,但我找不到任何問題,所以錯在哪裏?PHP檢查字段是否爲空

PHP源代碼:

if(empty($_POST['fname']) || empty($_POST['lname']) || empty($_POST['email']) || empty($_POST['password'])) 
{ 
    $error="Fill all fields!"; 
} 

HTML:

<form action="register.php" method="POST"> 
    <input style="margin-top:10px" type="text" value="First Name" name="fname" onblur="if (this.value == '') {this.value = 'First Name';}" onfocus="if (this.value == 'First Name') {this.value = '';}" /> 

    <input type="text" value="Last Name" name="lname" onblur="if (this.value == '') {this.value = 'Last Name';}" onfocus="if (this.value == 'Last Name') {this.value = '';}" /> 

    <input type="email" value="Adres e-mail" name="email" onblur="if (this.value == '') {this.value = 'Adres e-mail';}" onfocus="if (this.value == 'Adres e-mail') {this.value = '';}" /> 

    <p><input type="password" value="Password" name="password" onblur="if (this.value == '') {this.value = 'Password';}" onfocus="if (this.value == 'Password') {this.value = '';}" /></p> 

    <button type="submit" name="submit"> Register</button> </br> 
    </br> 

</form> 
+0

這是什麼問題的現狀如何? – chris85

沙发
0
0

由於其它字段是type="text"和空被認爲是空字符串""。試着檢查它們是否不爲空。 ;)

例如:

if(isset($_POST["fname"]) && (strlen($_POST["fname"]) > 0) && isset($_POST["lname"]) && (strlen($_POST["lname"]) > 0) && isset($_POST["email"]) && isset($_POST["password"])){ 
    //your code 
} 

對於電子郵件和密碼,您可以跳過空的,如果你讓他們在HTML5需要我猜。

+1

不要依賴客戶端驗證。 'isset'和'!empty'基本上是一樣的東西。 '這意味着empty()實質上就是!isset($ var)||的簡潔等價物$ var == false'-http://php.net/manual/en/function.empty.php – chris85

+0

嗨chris85,現在應該會更好我猜...只要檢查長度 – oetoni

+0

@ chris85 isset和!空不是一回事 –

板凳
0
0

我不認爲它們是空的。他們將不明確或""。使用print_r($_POST['name'])爲每一個,看看他們回來了。然後你會看到他們是否空了。

+0

如... print_r($ _ POST ['fname']); – newCoder

地板
0
0

你必須你佔位符而不是

<form action="index3.php" method="POST" > 

    <input style="margin-top:10px" type="text" placeholder="First Name" name="fname" 
    onblur="if (this.placeholder == '') {this.placeholder = 'First Name';}" 
    onfocus="if (this.placeholder == 'First Name') {this.placeholder = '';}" /> 

    <input type="text" placeholder="Last Name" name="lname" 
    onblur="if (this.placeholder == '') {this.placeholder = 'Last Name';}" 
    onfocus="if (this.placeholder == 'Last Name') {this.placeholder = '';}" /> 

    <input type="email" placeholder="Adres e-mail" name="email" 
    onblur="if (this.placeholder == '') {this.placeholder = 'Adres e-mail';}" 
    onfocus="if (this.placeholder == 'Adres e-mail') {this.placeholder = '';}" /> 

    <p><input type="password" placeholder="Password" name="password" 
    onblur="if (this.placeholder == '') {this.placeholder = 'Password';}" 
    onfocus="if (this.placeholder == 'Password') {this.placeholder = '';}" /></p> 

    <button type="submit" name="submit"> Register</button> </br></br> 

</form> 
+0

你的答案仍然使用「值」。 – chris85

4楼
0
0

onbluronfocus事件使每個輸入的value總是被填充,所以當你提交的每個領域都有它的默認值,或者你把它改爲。更好的解決方案是使用placeholder屬性。這將保持value爲空,直到用戶填充它們。

<form action="register.php" method="POST"> 
    <input style="margin-top:10px" type="text" value="First Name" name="fname" placeholder="First Name" /> 
    <input type="text" value="Last Name" name="lname" placeholder="Last Name" /> 
    <input type="email" value="Adres e-mail" name="email" placeholder="Adres e-mail" /> 
    <p><input type="password" value="Password" name="password" placeholder="Password" /></p> 
    <button type="submit" name="submit"> Register</button> </br> 
    </br> 
</form> 

這也應該功能密碼字段更好,因爲我懷疑你以前有password爲8要點。

服務器端,您可以驗證這是通過輸出$_POST陣列var_dumpprint_r的原因,或者通過遍歷它foreach($_POST as $name => value)

5楼
0
0

首先,你的PHP代碼是正確的。但是您的HTML表單有一些技術錯誤。您必須設置placeholder屬性用於顯示輸入框中的字段名稱,因爲運行onBlur事件時,該值已設置爲字段並將字符串發送到服務器,並且NOT NULL!通過這種方式,您的PHP代碼不適用於檢查空值。您必須執行的第二項工作,請通過爲每個輸入元素輕鬆設置required屬性來檢查客戶端中的字段是否爲空。我寫了正確的html標籤,你必須使用。

<form action="register.php" method="POST"> 
 
     <input style="margin-top:10px" type="text" name="fname" placeholder="First Name" required /> 
 

 
     <input type="text" name="lname" placeholder="Last Name" required /> 
 

 
     <input type="email" name="email" placeholder="Adres e-mail" required /> 
 

 
     <p><input type="password" name="password" placeholder="Password" required /></p> 
 

 
     <button type="submit" name="submit"> Register</button> </br> 
 
     </br> 
 

 
    </form>

爲PHP代碼,你可以使用的foreach簡單地方式:

$error=""; 
foreach($_POST as $key => $value) { 
    if(empty($_POST[$key])) 
    { 
     $error="Fill all fields!"; 
     break; 
    } 
} 
0
votes
answers
59 views
+10

給人一種獨特的數字ID的名稱

0

我有我的index.php文件下面的代碼給人一種獨特的數字ID的名稱

<?php 
$name = $_GET['name']; 
$id = rand(0,100); // i need a unique id from the name than random 
?> 

我想要做的是,當有人提供他們的姓名,0和100之間的唯一數字ID應該顯示。刷新頁面後不應更改。如果用戶提供名稱「John」,id應該是「99」(或任何其他不會更改的號碼) 如果用戶提供名稱「david」,則id應該是「5」(或任何其他號碼不會改變)

我試過使用MD5,但它會產生更多的數字,我不能使用它,因爲我是一個PHP新手。

對不起,我的英語不好。

+0

那麼這段代碼有什麼問題?這應該給你隨機數。你有刷新或什麼問題? 'md5'不是隨機的,它會爲每個名稱生成相同的值(並且對於不同的名稱可能具有相同的值(https://crypto.stackexchange.com/questions/1434/are-there-two-known-strings哪位-具有最相同-MD5哈希值))。 – chris85

+0

超過2-3位數字有什麼問題? –

沙发
0
0

rand()函數只給你隨機數,但它永遠不會給你任何單詞的唯一編號。最好的解決方案是使用md5,它將您的名字轉換爲總是唯一的 字符串。如果您需要md5的幫助,請告訴我。

+0

我需要生成一個只包含數字(0到100之間)的md5散列。必須有機會獲得每個名字的所有100個號碼。 –

+0

md5無法生成0到100之間的數字,如果使用rand(),則該數字對於每個名稱都不是唯一的。 –

板凳
0
0

在數組中創建一個數組的數組,然後我們對其進行洗牌。獲取混洗陣列的元素。

function generateRandomNumberInRange($min, $max, $quantity) { 
    $randomNumberArray = range($min, $max); 
    shuffle($randomNumberArray); 
    return array_slice($randomNumberArray, 0, $quantity); 
} 

echo "<pre>"; 
$numbersArray = generateRandomNumberInRange(0, 100, 101); 
print_r($numbersArray); 
echo "</pre>" 

for ($i = 0; $i <= 100; $i++) { 
    echo $numbersArray[$i] . "<br/>"; 
} 

然後,您將名稱分配給唯一和隨機數。

0
votes
answers
63 views
+10

大尺寸PHP上傳圖片

1

有人可以幫助我,幾乎所有的可能頭髮都已經走了。試圖將大圖片上傳到網站時遇到問題。我已經解決了這個問題,一切似乎都正常。我用10Mb + JPEG文件測試了我的腳本,並且看起來都很完美。但是,我剛剛嘗試從某個電話(4.9Mb)上載JPEG,並且出現500錯誤。看看PS中的圖片,尺寸爲72dpi時寬1054px,高1874px。任何人都可以幫助我,爲什麼這是一個問題,我怎麼解決它?如果我把圖片縮小(700px寬),它會上傳嗎?大尺寸PHP上傳圖片

有沒有人有同樣的問題?下面是我的代碼,它旋轉圖像(因爲手機上傳的一些內容一旦上傳),然後調整大文件的大小以便存儲。我測試過的所有照片似乎都能正常工作......除了這張照片外,這張照片很蠢!有人請幫忙!

$file_name = $_FILES['newPicture']['tmp_name']; 

correctImageOrientation($file_name); 
AdjustPicSize($file_name); 


function correctImageOrientation($file_name) { 
    if (function_exists('exif_read_data')) { 
    $exif = exif_read_data($file_name); 
    if($exif && isset($exif['Orientation']) || !isset($exif['Orientation'])) { 
     $orientation = $exif['Orientation']; 
     if($orientation != 1){ 
     $img = imagecreatefromjpeg($file_name); 
     $deg = 0; 
     switch ($orientation) { 
      case 3: 
      $deg = 180; 
      break; 
      case 6: 
      $deg = 270; 
      break; 
      case 8: 
      $deg = 90; 
      break; 
     } 
     if ($deg) { 
      $img = imagerotate($img, $deg, 0);  
     } 
     // then rewrite the rotated image back to the disk as $filename 
     imagejpeg($img, $file_name, 95); 
     } // if there is some rotation necessary 
    } // if have the exif orientation info 
    } // if function exists  
} 


function AdjustPicSize($file_name) 
{ 
    $maxDim = 800; 

     list($width, $height, $type, $attr) = getimagesize($file_name); 
     if ($width > $maxDim || $height > $maxDim) { 
      $target_filename = $file_name; 
      $ratio = $width/$height; 
      if($ratio > 1) { 
       $new_width = $maxDim; 
       $new_height = $maxDim/$ratio; 
      } else { 
       $new_width = $maxDim*$ratio; 
       $new_height = $maxDim; 
      } 
      $src = imagecreatefromstring(file_get_contents($file_name)); 
      $dst = imagecreatetruecolor($new_width, $new_height); 
      imagecopyresampled($dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
      imagejpeg($dst, $target_filename); // adjust format as needed 
     } 
} 

請溫和一點,我對這一切都有點新鮮感!

+0

比500錯誤更詳細的信息將有助於診斷。你可以檢查你的PHP日誌文件,看看實際的錯誤是什麼? – Bert

沙发
0
0

這是內存限制問題,您可能想要增加它或考慮使用圖像magick。 GD使用RAM來存儲數據並從5 MB文件創建新資源(大尺寸)將花費你的內存

+0

Hi ya Trac,非常感謝您的回覆!這絕對是一個內存問題,即使我可以上傳圖像3倍的文件大小? – Origination

+0

這不是關於文件大小,它是文件尺寸,從20兆像素相機拍攝的jpeg小於1MB,但處理時可能會損壞您的內存,嘗試使用Image Magick或在使用imagecreatefromjpeg之前首先檢查尺寸 –

+0

非常感謝Trac,我剛剛記起來,有問題的文件似乎上升了!謝謝!真的很感激它! – Origination

0
votes
answers
42 views
+10

減去許多陣列

0

我有一個很大的陣列大約這樣50個值(例如我使用較小的陣列):減去許多陣列

Array 
(
    [Adam Ma?ysz] => 1 
    [Justyna Kowalczyk] => 2 
    [Janne Ahonen] => 3 
    [Stefan Hula] => 4 
    [Ole Einar Bjoerdalen] => 5 
    [Jakub Janda] => 6 
    [Mariusz Pudzianowski] => 7 
    [Harry Potter] => 8 
    [Vladimir Zografski] => 9 
    [Pavel Karelin] => 10 
    [Eddie Edwards] => 11 
    [Apoloniusz Tajner] => 12 
) 

和我有Ñ較小具有不同值的常數數組:

Array 
(
    [Adam Ma?ysz] => 1 
    [Janne Ahonen] => 2 
    [Stefan Hula] => 3 
    [Ole Einar Bjoerdalen] => 4 
    [Vladimir Zografski] => 5 
    [Pavel Karelin] => 6 
    [Apoloniusz Tajner] => 7 
    [Mariusz Pudzianowski] => 8 
    [Jakub Janda] => 9 
    [Harry Potter] => 10 
) 
Array 
(
    [Justyna Kowalczyk] => 1 
    [Apoloniusz Tajner] => 2 
    [Harry Potter] => 3 
    [Janne Ahonen] => 4 
    [Mariusz Pudzianowski] => 5 
    [Adam Ma?ysz] => 6 
    [Jakub Janda] => 7 
    [Ole Einar Bjoerdalen] => 8 
    [Vladimir Zografski] => 9 
    [Pavel Karelin] => 10 
) 
Array 
(
    [Adam Ma?ysz] => 1 
    [Janne Ahonen] => 2 
    [Jakub Janda] => 3 
    [Stefan Hula] => 4 
    [Ole Einar Bjoerdalen] => 5 
    [Justyna Kowalczyk] => 6 
    [Harry Potter] => 7 
    [Mariusz Pudzianowski] => 8 
    [Vladimir Zografski] => 9 
    [Apoloniusz Tajner] => 10 
) 

所以我想減去數組值是在哪裏是相同的密鑰,如:

Big Array: [哈利波特] => 8
[馬里斯斯·普祖亞諾斯基] => 7

小陣列#1:[哈利波特] => 10
[馬里斯斯·普祖亞諾斯基] => 8
小型陣列#2:[哈里波特] => 3
[馬里斯斯·普祖亞諾斯基] => 5

輸出:小型陣列#1和大陣列之間的差異爲鍵[哈利 波特] = 2
小陣列#1和大陣之間 差分鍵[Mariusz Pudzianowski] = 1

輸出:小型陣列#2 和Big陣鍵[哈利波特] =小陣列#2和大陣列之間5
差分對鍵之間2

基本上我差[馬里斯斯·普祖亞諾斯基] =卡住了。 請幫忙。

+0

這是不是很清楚你想達到什麼。請你能解釋一下你的例子。 –

沙发
0
0

可以將您的大數組命名爲$ bigArray和small array作爲$ smallArray,它們都具有鍵值對。現在代碼應該是:

foreach($bigArray as $bigKey=>$bigValue){ 
    foreach($smallArray as $smallKey=>$smallValue){ 
     if($smallKey==$bigKey){ 
      $output=$bigValue-$smallValue; 
      echo 'Difference between Small Array #1 and Big Array for $bigKey is '.$output; 
     } 
    } 
} 

這樣你的大陣,你會循環小數組的每個元素,並檢查密鑰匹配,如果他們那麼你減去它們的值,並打印出來。你也可以爲其他小陣列做這個。

板凳
0
0

您可以使用array_intersect_key來查找所有陣列通用的所有密鑰。

$commonKeys = array_intersect_key($bigArray, $smallArray1, $smallArray2, ...) 

從那裏你只需要遍歷$ commonKeys並進行相應的替代。例如:

foreach ($commonKeys as $key) { 
    $result = abs($bigArray[$key] - $smallArray1[$key]); 
    echo " Difference between Small Array #1 and Big Array for key [$key] = $result"; 
    //you do that for each Small Array 
} 
0
votes
answers
66 views
+10

php7顯示存儲在mongodb中的文件3.4

0

我對php和mongodb很新。我已經在Ubuntu 16.04.3 LTS上安裝了php7.0和mongo 3.4.10。php7顯示存儲在mongodb中的文件3.4

我可以通過輸入蒙戈CLI命令顯示所需的文檔: db.testcollection.find({_id:'superid'}).pretty()

它給了我這樣的結果:

{ "_id" : "superid", "record" : "whatever" }

但我tryig與此PHP腳本顯示從MongoDB的集合文件:

<?php 

    $mongo = new MongoDBDriverManager(); 
    $filter = ['_id' => 'superid']; 
    $options = []; 
    $query = new MongoDBDriverQuery($filter, $options); 
    $rows = $mongo->executeQuery('db.testcollection', $query); 
    foreach ($rows as $document) { 
     print_($document); 
     var_dump($document); 
     echo $document; 
    } 

    echo "The END" 
    ?> 

這隻顯示「結束」。

我很想念我的PHP腳本同樣顯示蒙戈查詢結果爲CLI命令?

沙发
0
0

的問題是: 我創建了使用此命令在蒙戈外殼名爲test的新DATABSE:

use test; 
db.createCollection("testcollection"); 
db.testcollection.insert({ "_id" : "superid", "record" : "whatever"}); 

所以路徑分貝是test.testcollection不db.testcollection。

當我糾正相應的線路是這樣的:

$rows = $mongo->executeQuery('test.testcollection', $query); 

它按預期工作。

我被給出而不需要指定數據庫名稱(即使註銷蒙戈外殼並重新登錄)我正確的結果蒙戈外殼(CLI)混淆。

另一方面,你必須在php中指定dbname.collectionname(有意義):)